diff --git a/locales/en.json b/locales/en.json index 9f4aa085d..a3ca2af98 100644 --- a/locales/en.json +++ b/locales/en.json @@ -1199,7 +1199,7 @@ "views.ActivityFilter.swapState.successful": "Successful", "views.ActivityFilter.swapState.failed": "Failed", "views.ActivityFilter.swapState.refunded": "Refunded", - "views.ActivityFilter.lsps1OrderState.completed": "Completed", + "views.ActivityFilter.lsps1State.completed": "Completed", "views.ActivityToCsv.title": "Download Activity", "views.ActivityToCsv.csvDownloaded": "CSV file has been downloaded", "views.ActivityToCsv.csvDownloadFailed": "Failed to download CSV file", diff --git a/stores/ActivityStore.ts b/stores/ActivityStore.ts index 87b5df8c9..c3abdb093 100644 --- a/stores/ActivityStore.ts +++ b/stores/ActivityStore.ts @@ -31,6 +31,7 @@ export interface Filter { sent: boolean; swaps: boolean; lsps1: boolean; + lsps7: boolean; received: boolean; unpaid: boolean; inTransit: boolean; @@ -49,7 +50,12 @@ export interface Filter { failed: boolean; refunded: boolean; }; - lsps1OrderState: { + lsps1State: { + CREATED: boolean; + COMPLETED: boolean; + FAILED: boolean; + }; + lsps7State: { CREATED: boolean; COMPLETED: boolean; FAILED: boolean; @@ -63,6 +69,7 @@ export const DEFAULT_FILTERS = { sent: true, swaps: true, lsps1: true, + lsps7: true, received: true, unpaid: true, inTransit: false, @@ -83,7 +90,12 @@ export const DEFAULT_FILTERS = { failed: true, refunded: true }, - lsps1OrderState: { + lsps1State: { + CREATED: true, + COMPLETED: true, + FAILED: true + }, + lsps7State: { CREATED: true, COMPLETED: true, FAILED: true @@ -134,6 +146,7 @@ export default class ActivityStore { cashu: true, swaps: true, lsps1: true, + lsps7: true, sent: false, received: true, unpaid: false, @@ -148,7 +161,8 @@ export default class ActivityStore { endDate: undefined, memo: '', swapState: { ...DEFAULT_FILTERS.swapState }, - lsps1OrderState: { ...DEFAULT_FILTERS.lsps1OrderState } + lsps1State: { ...DEFAULT_FILTERS.lsps1State }, + lsps7State: { ...DEFAULT_FILTERS.lsps7State } }; await Storage.setItem(ACTIVITY_FILTERS_KEY, this.filters); }; @@ -225,7 +239,6 @@ export default class ActivityStore { if (res.service === 'LSPS7') { const payment = orderData?.payment; - console.log(payment); const fee = payment?.bolt11?.order_total_sat || payment?.fee_total_sat || @@ -361,9 +374,13 @@ export default class ActivityStore { ...DEFAULT_FILTERS.swapState, ...(parsedFilters.swapState || {}) }, - lsps1OrderState: { - ...DEFAULT_FILTERS.lsps1OrderState, - ...(parsedFilters.lsps1OrderState || {}) + lsps1State: { + ...DEFAULT_FILTERS.lsps1State, + ...(parsedFilters.lsps1State || {}) + }, + lsps7State: { + ...DEFAULT_FILTERS.lsps7State, + ...(parsedFilters.lsps7State || {}) } }; } else { @@ -386,9 +403,13 @@ export default class ActivityStore { ...DEFAULT_FILTERS.swapState, ...filters.swapState }, - lsps1OrderState: { - ...DEFAULT_FILTERS.lsps1OrderState, - ...filters.lsps1OrderState + lsps1State: { + ...DEFAULT_FILTERS.lsps1State, + ...filters.lsps1State + }, + lsps7State: { + ...DEFAULT_FILTERS.lsps7State, + ...filters.lsps7State } }; this.filteredActivity = ActivityFilterUtils.filterActivities( diff --git a/utils/ActivityFilterUtils.ts b/utils/ActivityFilterUtils.ts index dc6f3527a..94d9b198f 100644 --- a/utils/ActivityFilterUtils.ts +++ b/utils/ActivityFilterUtils.ts @@ -82,25 +82,37 @@ class ActivityFilterUtils { if (filter.lsps1 == false) { filteredActivity = filteredActivity.filter( - (activity) => - activity.model !== 'LSPS1Order' && - activity.model !== 'LSPS7Order' + (activity) => activity.model !== 'LSPS1Order' ); } else { filteredActivity = filteredActivity.filter((activity) => { - if ( - activity.model !== 'LSPS1Order' && - activity.model !== 'LSPS7Order' - ) - return true; + if (activity.model !== 'LSPS1Order') return true; const state = activity.state; - if (filter.lsps1OrderState.CREATED && state === 'CREATED') + if (filter.lsps1State.CREATED && state === 'CREATED') return true; - if (filter.lsps1OrderState.COMPLETED && state === 'COMPLETED') + if (filter.lsps1State.COMPLETED && state === 'COMPLETED') return true; - if (filter.lsps1OrderState.FAILED && state === 'FAILED') + if (filter.lsps1State.FAILED && state === 'FAILED') return true; + + return false; + }); + } + + if (filter.lsps7 === false) { + filteredActivity = filteredActivity.filter( + (activity) => activity.model !== 'LSPS7Order' + ); + } else { + filteredActivity = filteredActivity.filter((activity) => { + if (activity.model !== 'LSPS7Order') return true; + + const state = activity.state; + if (filter.lsps7State.CREATED && state === 'CREATED') return true; + if (filter.lsps7State.COMPLETED && state === 'COMPLETED') + return true; + if (filter.lsps7State.FAILED && state === 'FAILED') return true; return false; }); diff --git a/views/Activity/ActivityFilter.tsx b/views/Activity/ActivityFilter.tsx index 4db9030b8..4471d11fb 100644 --- a/views/Activity/ActivityFilter.tsx +++ b/views/Activity/ActivityFilter.tsx @@ -46,6 +46,7 @@ interface ActivityFilterState { services: boolean; swaps: boolean; lsps1: boolean; + lsps7: boolean; }; } @@ -63,7 +64,8 @@ export default class ActivityFilter extends React.Component< expandedSections: { services: false, swaps: false, - lsps1: false + lsps1: false, + lsps7: false } }; @@ -75,15 +77,23 @@ export default class ActivityFilter extends React.Component< const newFilters = JSON.parse(JSON.stringify(filters)); if (path === 'services') { - const isTurningOn = !(filters.swaps || filters.lsps1); + const isTurningOn = !( + filters.swaps || + filters.lsps1 || + filters.lsps7 + ); newFilters.swaps = isTurningOn; newFilters.lsps1 = isTurningOn; + newFilters.lsps7 = isTurningOn; Object.keys(newFilters.swapState).forEach((key) => { (newFilters.swapState as any)[key] = isTurningOn; }); - Object.keys(newFilters.lsps1OrderState).forEach((key) => { - (newFilters.lsps1OrderState as any)[key] = isTurningOn; + Object.keys(newFilters.lsps1State).forEach((key) => { + (newFilters.lsps1State as any)[key] = isTurningOn; + }); + Object.keys(newFilters.lsps7State).forEach((key) => { + (newFilters.lsps7State as any)[key] = isTurningOn; }); if (!isTurningOn) { @@ -91,7 +101,8 @@ export default class ActivityFilter extends React.Component< expandedSections: { ...prevState.expandedSections, swaps: false, - lsps1: false + lsps1: false, + lsps7: false } })); } @@ -102,14 +113,16 @@ export default class ActivityFilter extends React.Component< if (isTurningOn) { if (parent === 'swapState') newFilters.swaps = true; - if (parent === 'lsps1OrderState') newFilters.lsps1 = true; + if (parent === 'lsps1State') newFilters.lsps1 = true; + if (parent === 'lsps7State') newFilters.lsps7 = true; } else { const allChildrenOff = Object.values(newFilters[parent]).every( (item) => item === false ); if (allChildrenOff) { if (parent === 'swapState') newFilters.swaps = false; - if (parent === 'lsps1OrderState') newFilters.lsps1 = false; + if (parent === 'lsps1State') newFilters.lsps1 = false; + if (parent === 'lsps7State') newFilters.lsps7 = false; } } } else { @@ -123,8 +136,13 @@ export default class ActivityFilter extends React.Component< }); } if (key === 'lsps1') { - Object.keys(newFilters.lsps1OrderState).forEach((key) => { - (newFilters.lsps1OrderState as any)[key] = isTurningOn; + Object.keys(newFilters.lsps1State).forEach((key) => { + (newFilters.lsps1State as any)[key] = isTurningOn; + }); + } + if (key === 'lsps7') { + Object.keys(newFilters.lsps7State).forEach((key) => { + (newFilters.lsps7State as any)[key] = isTurningOn; }); } } @@ -178,6 +196,7 @@ export default class ActivityFilter extends React.Component< cashu, swaps, lsps1, + lsps7, sent, received, unpaid, @@ -346,7 +365,7 @@ export default class ActivityFilter extends React.Component< ] }, { - label: localeString('views.LSPS1.lsps1Orders'), + label: localeString('views.LSPS1.type'), value: lsps1, var: 'lsps1', section: 'lsps1', @@ -355,21 +374,50 @@ export default class ActivityFilter extends React.Component< label: localeString( 'views.ActivityFilter.swapState.created' ), - var: ['lsps1OrderState', 'CREATED'], + var: ['lsps1State', 'CREATED'], type: 'Toggle' }, { label: localeString( - 'views.ActivityFilter.lsps1OrderState.completed' + 'views.ActivityFilter.lsps1State.completed' ), - var: ['lsps1OrderState', 'COMPLETED'], + var: ['lsps1State', 'COMPLETED'], type: 'Toggle' }, { label: localeString( 'views.ActivityFilter.swapState.failed' ), - var: ['lsps1OrderState', 'FAILED'], + var: ['lsps1State', 'FAILED'], + type: 'Toggle' + } + ] + }, + { + label: localeString('views.LSPS7.type'), + value: lsps7, + var: 'lsps7', + section: 'lsps7', + children: [ + { + label: localeString( + 'views.ActivityFilter.swapState.created' + ), + var: ['lsps7State', 'CREATED'], + type: 'Toggle' + }, + { + label: localeString( + 'views.ActivityFilter.lsps1State.completed' + ), + var: ['lsps7State', 'COMPLETED'], + type: 'Toggle' + }, + { + label: localeString( + 'views.ActivityFilter.swapState.failed' + ), + var: ['lsps7State', 'FAILED'], type: 'Toggle' } ] @@ -567,7 +615,9 @@ export default class ActivityFilter extends React.Component< this.handleToggle( 'services'