diff --git a/backend/controllers/cln/offers.js b/backend/controllers/cln/offers.js index 7a0fd2fb..ad158bcb 100644 --- a/backend/controllers/cln/offers.js +++ b/backend/controllers/cln/offers.js @@ -11,7 +11,7 @@ export const listOfferBookmarks = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Offers', msg: 'Getting Offer Bookmarks..' }); databaseService.find(req.session.selectedNode, CollectionsEnum.OFFERS).then((offers) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Offers', msg: 'Offer Bookmarks Received', data: offers }); - res.status(200).json(offers.Offers); + res.status(200).json(offers); }).catch((errRes) => { const err = common.handleError(errRes, 'Offers', 'Offer Bookmarks Error', req.session.selectedNode); return res.status(err.statusCode).json({ message: err.message, error: err.error }); diff --git a/backend/controllers/shared/pageSettings.js b/backend/controllers/shared/pageSettings.js index 94a6efed..d56b983c 100644 --- a/backend/controllers/shared/pageSettings.js +++ b/backend/controllers/shared/pageSettings.js @@ -1,7 +1,7 @@ import { Database } from '../../utils/database.js'; import { Logger } from '../../utils/logger.js'; import { Common } from '../../utils/common.js'; -import { CollectionFieldsEnum, CollectionsEnum } from '../../models/database.model.js'; +import { CollectionsEnum } from '../../models/database.model.js'; const logger = Logger; const common = Common; const databaseService = Database; @@ -19,13 +19,11 @@ export const savePageSettings = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Page Settings', msg: 'Saving Page Settings..' }); // eslint-disable-next-line arrow-body-style return Promise.all(req.body.map((page) => databaseService.validateDocument(CollectionsEnum.PAGE_SETTINGS, page))).then((values) => { - return Promise.all(req.body.map((page) => databaseService.update(req.session.selectedNode, CollectionsEnum.PAGE_SETTINGS, page, CollectionFieldsEnum.PAGE_ID, page.pageId))). - then((values) => { - logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'PayRequest', msg: 'Payment List Decoded', data: values }); - res.status(201).json(values); - }). - catch((errRes) => { - const err = common.handleError(errRes, 'Page Settings', 'Page Settings Update Error', req.session.selectedNode); + return databaseService.insert(req.session.selectedNode, CollectionsEnum.PAGE_SETTINGS, req.body).then((insertRes) => { + logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Page Settings', msg: 'Page Settings Updated', data: insertRes }); + res.status(201).json(insertRes); + }).catch((insertErrRes) => { + const err = common.handleError(insertErrRes, 'Page Settings', 'Page Settings Update Error', req.session.selectedNode); throw new Error(JSON.stringify({ message: err.message, error: err.error })); }); }).catch((errRes) => { diff --git a/backend/utils/database.js b/backend/utils/database.js index 23a22b44..609c3e6e 100644 --- a/backend/utils/database.js +++ b/backend/utils/database.js @@ -64,15 +64,15 @@ export class DatabaseService { } }); } - insert(selectedNode, collectionName, newDocument) { + insert(selectedNode, collectionName, newCollection) { return new Promise((resolve, reject) => { try { if (!selectedNode || !selectedNode.index) { reject(new Error('Selected Node Config Not Found.')); } - this.nodeDatabase[selectedNode.index].data[collectionName].push(newDocument); - this.saveDatabase(+selectedNode.index); - resolve(newDocument); + this.nodeDatabase[selectedNode.index].data[collectionName] = newCollection; + this.saveDatabase(selectedNode, collectionName); + resolve(this.nodeDatabase[selectedNode.index].data[collectionName]); } catch (errRes) { reject(errRes); @@ -108,7 +108,7 @@ export class DatabaseService { } this.nodeDatabase[selectedNode.index].data[collectionName].push(updatedDocument); } - this.saveDatabase(+selectedNode.index); + this.saveDatabase(selectedNode, collectionName); resolve(updatedDocument); } catch (errRes) { @@ -147,7 +147,7 @@ export class DatabaseService { else { reject(new Error('Unable to delete, document not found.')); } - this.saveDatabase(+selectedNode.index); + this.saveDatabase(selectedNode, collectionName); resolve(documentFieldValue); } catch (errRes) { @@ -155,9 +155,10 @@ export class DatabaseService { } }); } - saveDatabase(nodeIndex) { + saveDatabase(selectedNode, collectionName) { + const nodeIndex = +selectedNode.index; try { - if (+nodeIndex < 1) { + if (nodeIndex < 1) { return true; } const selNode = this.nodeDatabase[nodeIndex] && this.nodeDatabase[nodeIndex].adapter && this.nodeDatabase[nodeIndex].adapter.selNode ? this.nodeDatabase[nodeIndex].adapter.selNode : null; @@ -165,8 +166,8 @@ export class DatabaseService { this.logger.log({ selectedNode: selNode, level: 'ERROR', fileName: 'Database', msg: 'Database Save Error: Selected Node Setup Not Found.' }); throw new Error('Database Save Error: Selected Node Setup Not Found.'); } - this.nodeDatabase[nodeIndex].adapter.saveData(this.nodeDatabase[nodeIndex].data); - this.logger.log({ selectedNode: this.nodeDatabase[nodeIndex].adapter.selNode, level: 'INFO', fileName: 'Database', msg: 'Database Saved' }); + this.nodeDatabase[nodeIndex].adapter.saveData(collectionName, this.nodeDatabase[selectedNode.index].data[collectionName]); + this.logger.log({ selectedNode: this.nodeDatabase[nodeIndex].adapter.selNode, level: 'INFO', fileName: 'Database', msg: 'Database Collection ' + collectionName + ' Saved' }); return true; } catch (err) { @@ -206,6 +207,8 @@ export class DatabaseAdapter { const newFileName = this.dbFilePath + sep + 'rtldb-' + selNode.ln_implementation + '-Offers.json'; try { this.common.createDirectory(this.dbFilePath); + const oldOffers = JSON.parse(fs.readFileSync(oldFileName, 'utf-8')); + fs.writeFileSync(oldFileName, JSON.stringify(oldOffers.Offers, null, 2)); fs.renameSync(oldFileName, newFileName); } catch (err) { @@ -224,7 +227,7 @@ export class DatabaseAdapter { const collectionFileName = this.dbFilePath + sep + 'rtldb-' + this.selNode.ln_implementation + '-' + collectionName + '.json'; try { if (!fs.existsSync(collectionFileName)) { - fs.writeFileSync(collectionFileName, '{}'); + fs.writeFileSync(collectionFileName, '[]'); } } catch (err) { @@ -242,17 +245,13 @@ export class DatabaseAdapter { getSelNode() { return this.selNode; } - saveData(data) { + saveData(collectionName, collectionData) { try { - if (data) { - for (const collectionName in data) { - if (data.hasOwnProperty(collectionName)) { - const collectionFileName = this.dbFilePath + sep + 'rtldb-' + this.selNode.ln_implementation + '-' + collectionName + '.json'; - const tempFile = collectionFileName + '.tmp'; - fs.writeFileSync(tempFile, JSON.stringify(data, null, 2)); - fs.renameSync(tempFile, collectionFileName); - } - } + if (collectionData) { + const collectionFileName = this.dbFilePath + sep + 'rtldb-' + this.selNode.ln_implementation + '-' + collectionName + '.json'; + const tempFile = collectionFileName + '.tmp'; + fs.writeFileSync(tempFile, JSON.stringify(collectionData, null, 2)); + fs.renameSync(tempFile, collectionFileName); } return true; } diff --git a/server/controllers/cln/offers.ts b/server/controllers/cln/offers.ts index 5b85834c..bf6c8ae0 100644 --- a/server/controllers/cln/offers.ts +++ b/server/controllers/cln/offers.ts @@ -13,7 +13,7 @@ export const listOfferBookmarks = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Offers', msg: 'Getting Offer Bookmarks..' }); databaseService.find(req.session.selectedNode, CollectionsEnum.OFFERS).then((offers: any) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Offers', msg: 'Offer Bookmarks Received', data: offers }); - res.status(200).json(offers.Offers); + res.status(200).json(offers); }).catch((errRes) => { const err = common.handleError(errRes, 'Offers', 'Offer Bookmarks Error', req.session.selectedNode); return res.status(err.statusCode).json({ message: err.message, error: err.error }); diff --git a/server/controllers/shared/pageSettings.ts b/server/controllers/shared/pageSettings.ts index 563db802..8e74bf6e 100644 --- a/server/controllers/shared/pageSettings.ts +++ b/server/controllers/shared/pageSettings.ts @@ -22,15 +22,13 @@ export const savePageSettings = (req, res, next) => { logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Page Settings', msg: 'Saving Page Settings..' }); // eslint-disable-next-line arrow-body-style return Promise.all(req.body.map((page) => databaseService.validateDocument(CollectionsEnum.PAGE_SETTINGS, page))).then((values) => { - return Promise.all(req.body.map((page) => databaseService.update(req.session.selectedNode, CollectionsEnum.PAGE_SETTINGS, page, CollectionFieldsEnum.PAGE_ID, page.pageId))). - then((values) => { - logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'PayRequest', msg: 'Payment List Decoded', data: values }); - res.status(201).json(values); - }). - catch((errRes) => { - const err = common.handleError(errRes, 'Page Settings', 'Page Settings Update Error', req.session.selectedNode); - throw new Error(JSON.stringify({ message: err.message, error: err.error })); - }); + return databaseService.insert(req.session.selectedNode, CollectionsEnum.PAGE_SETTINGS, req.body).then((insertRes) => { + logger.log({ selectedNode: req.session.selectedNode, level: 'INFO', fileName: 'Page Settings', msg: 'Page Settings Updated', data: insertRes }); + res.status(201).json(insertRes); + }).catch((insertErrRes) => { + const err = common.handleError(insertErrRes, 'Page Settings', 'Page Settings Update Error', req.session.selectedNode); + throw new Error(JSON.stringify({ message: err.message, error: err.error })); + }); }).catch((errRes) => { const err = common.handleError(errRes, 'Page Settings', 'Page Settings Validation Error', req.session.selectedNode); return res.status(err.statusCode).json({ message: err.message, error: err.error }); diff --git a/server/utils/database.ts b/server/utils/database.ts index 475353fb..e14a7a83 100644 --- a/server/utils/database.ts +++ b/server/utils/database.ts @@ -70,15 +70,15 @@ export class DatabaseService { }); } - insert(selectedNode: CommonSelectedNode, collectionName: CollectionsEnum, newDocument: any) { + insert(selectedNode: CommonSelectedNode, collectionName: CollectionsEnum, newCollection: any) { return new Promise((resolve, reject) => { try { if (!selectedNode || !selectedNode.index) { reject(new Error('Selected Node Config Not Found.')); } - this.nodeDatabase[selectedNode.index].data[collectionName].push(newDocument); - this.saveDatabase(+selectedNode.index); - resolve(newDocument); + this.nodeDatabase[selectedNode.index].data[collectionName] = newCollection; + this.saveDatabase(selectedNode, collectionName); + resolve(this.nodeDatabase[selectedNode.index].data[collectionName]); } catch (errRes) { reject(errRes); } @@ -113,7 +113,7 @@ export class DatabaseService { } this.nodeDatabase[selectedNode.index].data[collectionName].push(updatedDocument); } - this.saveDatabase(+selectedNode.index); + this.saveDatabase(selectedNode, collectionName); resolve(updatedDocument); } catch (errRes) { reject(errRes); @@ -150,7 +150,7 @@ export class DatabaseService { } else { reject(new Error('Unable to delete, document not found.')); } - this.saveDatabase(+selectedNode.index); + this.saveDatabase(selectedNode, collectionName); resolve(documentFieldValue); } catch (errRes) { reject(errRes); @@ -158,9 +158,10 @@ export class DatabaseService { }); } - saveDatabase(nodeIndex: number) { + saveDatabase(selectedNode: CommonSelectedNode, collectionName: CollectionsEnum) { + const nodeIndex = +selectedNode.index; try { - if (+nodeIndex < 1) { + if (nodeIndex < 1) { return true; } const selNode = this.nodeDatabase[nodeIndex] && this.nodeDatabase[nodeIndex].adapter && this.nodeDatabase[nodeIndex].adapter.selNode ? this.nodeDatabase[nodeIndex].adapter.selNode : null; @@ -168,8 +169,8 @@ export class DatabaseService { this.logger.log({ selectedNode: selNode, level: 'ERROR', fileName: 'Database', msg: 'Database Save Error: Selected Node Setup Not Found.' }); throw new Error('Database Save Error: Selected Node Setup Not Found.'); } - this.nodeDatabase[nodeIndex].adapter.saveData(this.nodeDatabase[nodeIndex].data); - this.logger.log({ selectedNode: this.nodeDatabase[nodeIndex].adapter.selNode, level: 'INFO', fileName: 'Database', msg: 'Database Saved' }); + this.nodeDatabase[nodeIndex].adapter.saveData(collectionName, this.nodeDatabase[selectedNode.index].data[collectionName]); + this.logger.log({ selectedNode: this.nodeDatabase[nodeIndex].adapter.selNode, level: 'INFO', fileName: 'Database', msg: 'Database Collection ' + collectionName + ' Saved' }); return true; } catch (err) { const selNode = this.nodeDatabase[nodeIndex] && this.nodeDatabase[nodeIndex].adapter && this.nodeDatabase[nodeIndex].adapter.selNode ? this.nodeDatabase[nodeIndex].adapter.selNode : null; @@ -209,6 +210,8 @@ export class DatabaseAdapter { const newFileName = this.dbFilePath + sep + 'rtldb-' + selNode.ln_implementation + '-Offers.json'; try { this.common.createDirectory(this.dbFilePath); + const oldOffers: any = JSON.parse(fs.readFileSync(oldFileName, 'utf-8')); + fs.writeFileSync(oldFileName, JSON.stringify(oldOffers.Offers, null, 2)); fs.renameSync(oldFileName, newFileName); } catch (err) { this.logger.log({ selectedNode: selNode, level: 'ERROR', fileName: 'Database', msg: 'Rename Old Database Error', error: err }); @@ -226,7 +229,7 @@ export class DatabaseAdapter { const collectionFileName = this.dbFilePath + sep + 'rtldb-' + this.selNode.ln_implementation + '-' + collectionName + '.json'; try { if (!fs.existsSync(collectionFileName)) { - fs.writeFileSync(collectionFileName, '{}'); + fs.writeFileSync(collectionFileName, '[]'); } } catch (err) { return new Error('Unable to Create Database File Error ' + JSON.stringify(err)); @@ -244,17 +247,13 @@ export class DatabaseAdapter { return this.selNode; } - saveData(data: any) { + saveData(collectionName: string, collectionData: any) { try { - if (data) { - for (const collectionName in data) { - if (data.hasOwnProperty(collectionName)) { - const collectionFileName = this.dbFilePath + sep + 'rtldb-' + this.selNode.ln_implementation + '-' + collectionName + '.json'; - const tempFile = collectionFileName + '.tmp'; - fs.writeFileSync(tempFile, JSON.stringify(data, null, 2)); - fs.renameSync(tempFile, collectionFileName); - } - } + if (collectionData) { + const collectionFileName = this.dbFilePath + sep + 'rtldb-' + this.selNode.ln_implementation + '-' + collectionName + '.json'; + const tempFile = collectionFileName + '.tmp'; + fs.writeFileSync(tempFile, JSON.stringify(collectionData, null, 2)); + fs.renameSync(tempFile, collectionFileName); } return true; } catch (err) { diff --git a/src/app/cln/graph/query-routes/query-routes.component.html b/src/app/cln/graph/query-routes/query-routes.component.html index db5fa183..0d634d3b 100644 --- a/src/app/cln/graph/query-routes/query-routes.component.html +++ b/src/app/cln/graph/query-routes/query-routes.component.html @@ -29,7 +29,7 @@ ID -
+
{{hop?.id}}
@@ -37,7 +37,7 @@ Alias -
+
{{hop?.alias}}
diff --git a/src/app/cln/liquidity-ads/liquidity-ads-list/liquidity-ads-list.component.html b/src/app/cln/liquidity-ads/liquidity-ads-list/liquidity-ads-list.component.html index f6ee814e..4319765a 100644 --- a/src/app/cln/liquidity-ads/liquidity-ads-list/liquidity-ads-list.component.html +++ b/src/app/cln/liquidity-ads/liquidity-ads-list/liquidity-ads-list.component.html @@ -62,15 +62,17 @@ - diff --git a/src/app/cln/peers-channels/channels/channels-tables/channel-open-table/channel-open-table.component.html b/src/app/cln/peers-channels/channels/channels-tables/channel-open-table/channel-open-table.component.html index b8706e2a..002153ea 100644 --- a/src/app/cln/peers-channels/channels/channels-tables/channel-open-table/channel-open-table.component.html +++ b/src/app/cln/peers-channels/channels/channels-tables/channel-open-table/channel-open-table.component.html @@ -18,7 +18,7 @@ @@ -26,7 +26,7 @@ @@ -34,7 +34,7 @@ @@ -42,7 +42,7 @@ @@ -50,7 +50,7 @@ diff --git a/src/app/cln/peers-channels/channels/channels-tables/channel-pending-table/channel-pending-table.component.html b/src/app/cln/peers-channels/channels/channels-tables/channel-pending-table/channel-pending-table.component.html index 6c0b8053..375a2adb 100644 --- a/src/app/cln/peers-channels/channels/channels-tables/channel-pending-table/channel-pending-table.component.html +++ b/src/app/cln/peers-channels/channels/channels-tables/channel-pending-table/channel-pending-table.component.html @@ -18,7 +18,7 @@ @@ -26,7 +26,7 @@ @@ -34,7 +34,7 @@ @@ -42,7 +42,7 @@ @@ -53,7 +53,7 @@ - + diff --git a/src/app/cln/peers-channels/peers/peers.component.html b/src/app/cln/peers-channels/peers/peers.component.html index 2002335e..8fe9bc6e 100644 --- a/src/app/cln/peers-channels/peers/peers.component.html +++ b/src/app/cln/peers-channels/peers/peers.component.html @@ -27,7 +27,7 @@ @@ -35,7 +35,7 @@ @@ -43,7 +43,7 @@ diff --git a/src/app/cln/routing/routing-peers/routing-peers.component.html b/src/app/cln/routing/routing-peers/routing-peers.component.html index ef022d04..93a58f3b 100644 --- a/src/app/cln/routing/routing-peers/routing-peers.component.html +++ b/src/app/cln/routing/routing-peers/routing-peers.component.html @@ -13,11 +13,19 @@
Alias - - {{lqNode?.alias}} - - - {{addrType === 'tor' ? 'Tor' : addrType === 'ipv' ? 'Clearnet' : addrType}} - - - + +
+ + {{lqNode?.alias}} + + + {{addrType === 'tor' ? 'Tor' : addrType === 'ipv' ? 'Clearnet' : addrType}} + + + +
Short Channel ID -
+
{{channel?.short_channel_id}}
Alias -
+
{{channel?.alias}}
Id -
+
{{channel?.id}}
Channel Id -
+
{{channel?.channel_id}}
Funding Transaction Id -
+
{{channel?.funding_txid}}
Alias -
+
{{channel?.alias}}
Id -
+
{{channel?.id}}
Channel Id -
+
{{channel?.channel_id}}
Funding Transaction Id -
+
{{channel?.funding_txid}}
State {{CLNChannelPendingState[channel?.state]}} {{CLNChannelPendingState[channel?.state]}} Local Reserve (Sats) Alias -
+
{{peer?.alias}}
ID -
+
{{peer?.id}}
Network Address -
+
{{addr}},
- + - + @@ -58,11 +66,19 @@
Channel ID{{rPeer.channel_id}} +
+ {{rPeer.channel_id}} +
+
Peer Alias{{rPeer.alias}} +
+ {{rPeer.alias}} +
+
Events
- + - + diff --git a/src/app/cln/store/cln.reducers.ts b/src/app/cln/store/cln.reducers.ts index b5f1daaf..c32b91b8 100644 --- a/src/app/cln/store/cln.reducers.ts +++ b/src/app/cln/store/cln.reducers.ts @@ -221,7 +221,7 @@ export const CLNReducer = createReducer(initCLNState, on(setPageSettings, (state, { payload }) => { const newPageSettings: PageSettings[] = []; CLN_DEFAULT_PAGE_SETTINGS.forEach((defaultPage) => { - const pageSetting = payload && Object.keys(payload).length > 0 ? payload.find((p) => p.pageId === defaultPage.pageId) : null; + const pageSetting = payload && payload.length && payload.length > 0 ? payload.find((p) => p.pageId === defaultPage.pageId) : null; if (pageSetting) { const tablesSettings = JSON.parse(JSON.stringify(pageSetting.tables)); pageSetting.tables = []; // To maintain settings order diff --git a/src/app/cln/transactions/offers/offer-bookmarks-table/offer-bookmarks-table.component.html b/src/app/cln/transactions/offers/offer-bookmarks-table/offer-bookmarks-table.component.html index 3f704ea0..c3bcf457 100644 --- a/src/app/cln/transactions/offers/offer-bookmarks-table/offer-bookmarks-table.component.html +++ b/src/app/cln/transactions/offers/offer-bookmarks-table/offer-bookmarks-table.component.html @@ -20,7 +20,7 @@ @@ -32,7 +32,7 @@ @@ -44,7 +44,7 @@ diff --git a/src/app/cln/transactions/offers/offers-table/offers-table.component.html b/src/app/cln/transactions/offers/offers-table/offers-table.component.html index 4858344c..53015fde 100644 --- a/src/app/cln/transactions/offers/offers-table/offers-table.component.html +++ b/src/app/cln/transactions/offers/offers-table/offers-table.component.html @@ -25,7 +25,7 @@ diff --git a/src/app/eclair/peers-channels/channels/channels-tables/channel-inactive-table/channel-inactive-table.component.html b/src/app/eclair/peers-channels/channels/channels-tables/channel-inactive-table/channel-inactive-table.component.html index 7e006744..bdf7aa77 100644 --- a/src/app/eclair/peers-channels/channels/channels-tables/channel-inactive-table/channel-inactive-table.component.html +++ b/src/app/eclair/peers-channels/channels/channels-tables/channel-inactive-table/channel-inactive-table.component.html @@ -26,7 +26,7 @@ @@ -42,7 +42,7 @@ diff --git a/src/app/eclair/peers-channels/channels/channels-tables/channel-open-table/channel-open-table.component.html b/src/app/eclair/peers-channels/channels/channels-tables/channel-open-table/channel-open-table.component.html index a9cd70e4..bd13df58 100644 --- a/src/app/eclair/peers-channels/channels/channels-tables/channel-open-table/channel-open-table.component.html +++ b/src/app/eclair/peers-channels/channels/channels-tables/channel-open-table/channel-open-table.component.html @@ -22,7 +22,7 @@ @@ -30,7 +30,7 @@ @@ -38,7 +38,7 @@ diff --git a/src/app/eclair/peers-channels/channels/channels-tables/channel-pending-table/channel-pending-table.component.html b/src/app/eclair/peers-channels/channels/channels-tables/channel-pending-table/channel-pending-table.component.html index b766207b..d5fdc514 100644 --- a/src/app/eclair/peers-channels/channels/channels-tables/channel-pending-table/channel-pending-table.component.html +++ b/src/app/eclair/peers-channels/channels/channels-tables/channel-pending-table/channel-pending-table.component.html @@ -22,7 +22,7 @@ @@ -34,7 +34,7 @@ diff --git a/src/app/eclair/routing/forwarding-history/forwarding-history.component.html b/src/app/eclair/routing/forwarding-history/forwarding-history.component.html index b5e72cff..1ae398fd 100644 --- a/src/app/eclair/routing/forwarding-history/forwarding-history.component.html +++ b/src/app/eclair/routing/forwarding-history/forwarding-history.component.html @@ -23,7 +23,11 @@ - + @@ -31,11 +35,19 @@ - + - + @@ -43,7 +55,11 @@ - + @@ -59,7 +75,11 @@ - +
Channel ID{{rPeer.channel_id}} +
+ {{rPeer.channel_id}} +
+
Peer Alias{{rPeer.alias}} +
+ {{rPeer.alias}} +
+
Events Title -
+
{{offersbookmark.title}}
Description -
+
{{offersbookmark.description}}
Invoice -
+
{{offersbookmark.bolt12}}
Offer ID -
+
{{offer.offer_id}} @@ -45,7 +45,7 @@
Invoice -
+
{{offer.bolt12}} diff --git a/src/app/cln/transactions/payments/lightning-payments.component.scss b/src/app/cln/transactions/payments/lightning-payments.component.scss index f37059a8..c6b13fdb 100644 --- a/src/app/cln/transactions/payments/lightning-payments.component.scss +++ b/src/app/cln/transactions/payments/lightning-payments.component.scss @@ -30,13 +30,16 @@ } } +.mat-column-group_status, .mat-column-group_created_at { + .mpp-row-span:not(:first-of-type) { + padding-left: 3rem; + } +} + .mpp-row-span { min-height: 4.2rem; place-content: center flex-start; align-items: center; - &:not(:first-of-type) { - padding-left: 3rem; - } &.ellipsis-parent { display: flex; } diff --git a/src/app/eclair/graph/query-routes/query-routes.component.html b/src/app/eclair/graph/query-routes/query-routes.component.html index 76859e0c..d8e6d6ab 100644 --- a/src/app/eclair/graph/query-routes/query-routes.component.html +++ b/src/app/eclair/graph/query-routes/query-routes.component.html @@ -44,7 +44,7 @@
ID - + {{hop?.nodeId}} Channel Id -
+
{{channel?.channelId}}
Node Id -
+
{{channel?.nodeId}}
Channel Id -
+
{{channel?.channelId}}
Alias -
+
{{channel?.alias}}
Node Id -
+
{{channel?.nodeId}}
Channel Id -
+
{{channel?.channelId}}
Node Id -
+
{{channel?.nodeId}}
In Channel Id{{fhEvent?.fromChannelId}} +
+ {{fhEvent?.fromChannelId}} +
+
In Channel Short Id In Channel{{fhEvent?.fromChannelAlias}} +
+ {{fhEvent?.fromChannelAlias}} +
+
Out Channel Id{{fhEvent?.toChannelId}} +
+ {{fhEvent?.toChannelId}} +
+
Out Channel Short Id Out Channel{{fhEvent?.toChannelAlias}} +
+ {{fhEvent?.toChannelAlias}} +
+
Amount In (Sats) Payment Hash{{fhEvent?.paymentHash}} +
+ {{fhEvent?.paymentHash}} +
+
diff --git a/src/app/eclair/routing/routing-peers/routing-peers.component.html b/src/app/eclair/routing/routing-peers/routing-peers.component.html index df6e49e1..e7fb087a 100644 --- a/src/app/eclair/routing/routing-peers/routing-peers.component.html +++ b/src/app/eclair/routing/routing-peers/routing-peers.component.html @@ -13,11 +13,19 @@ - + - + @@ -58,11 +66,19 @@
Channel ID{{rPeer.channelId}} +
+ {{rPeer?.channelId}} +
+
Peer Alias{{rPeer.alias}} +
+ {{rPeer?.alias}} +
+
Events
- + - + diff --git a/src/app/eclair/store/ecl.reducers.ts b/src/app/eclair/store/ecl.reducers.ts index 0d35ea04..07f1bf20 100644 --- a/src/app/eclair/store/ecl.reducers.ts +++ b/src/app/eclair/store/ecl.reducers.ts @@ -218,7 +218,7 @@ export const ECLReducer = createReducer(initECLState, on(setPageSettings, (state, { payload }) => { const newPageSettings: PageSettings[] = []; ECL_DEFAULT_PAGE_SETTINGS.forEach((defaultPage) => { - const pageSetting = payload && Object.keys(payload).length > 0 ? payload.find((p) => p.pageId === defaultPage.pageId) : null; + const pageSetting = payload && payload.length && payload.length > 0 ? payload.find((p) => p.pageId === defaultPage.pageId) : null; if (pageSetting) { const tablesSettings = JSON.parse(JSON.stringify(pageSetting.tables)); pageSetting.tables = []; // To maintain settings order diff --git a/src/app/eclair/transactions/payments/lightning-payments.component.html b/src/app/eclair/transactions/payments/lightning-payments.component.html index be4f6e02..7ba7a664 100644 --- a/src/app/eclair/transactions/payments/lightning-payments.component.html +++ b/src/app/eclair/transactions/payments/lightning-payments.component.html @@ -1,6 +1,6 @@ -
+
- + {{paymentDecodedHint}} Payment request is required. @@ -24,9 +24,9 @@
-
+
-
Channel ID{{rPeer.channelId}} +
+ {{rPeer?.channelId}} +
+
Peer Alias{{rPeer.alias}} +
+ {{rPeer?.alias}} +
+
Events
+
@@ -34,7 +34,7 @@ @@ -42,7 +42,7 @@ @@ -50,7 +50,7 @@ @@ -62,7 +62,7 @@ @@ -70,7 +70,7 @@ @@ -78,7 +78,7 @@ @@ -119,12 +119,12 @@
Date/Time {{payment?.firstPartTimestamp | date:'dd/MMM/y HH:mm'}}ID -
+
{{payment?.id}}
Destination Node Id -
+
{{payment?.recipientNodeId}}
Destination -
+
{{payment?.recipientNodeAlias}}
Description -
+
{{payment?.description}}
Payment Hash -
+
{{payment?.paymentHash}}
Preimage -
+
{{payment?.paymentPreimage}}
-
+
{{payment?.id}}
- + {{part.id}} @@ -133,12 +133,12 @@
-
+
{{payment?.recipientNodeId}}
- + {{part.toChannelId}} @@ -147,12 +147,12 @@
-
+
{{payment?.recipientNodeAlias}}
- + {{part.toChannelAlias}} @@ -171,12 +171,12 @@
-
+
{{payment?.description}}
- + Fee Paid: {{part.feesPaid | number:'1.0-0'}} (Sats) @@ -185,12 +185,12 @@
-
+
{{payment?.paymentHash}}
- + Fee Paid: {{part.feesPaid | number:'1.0-0'}} (Sats) @@ -199,12 +199,12 @@
-
+
{{payment?.paymentPreimage}}
- + Fee Paid: {{part.feesPaid | number:'1.0-0'}} (Sats) diff --git a/src/app/eclair/transactions/payments/lightning-payments.component.scss b/src/app/eclair/transactions/payments/lightning-payments.component.scss index 680b2c04..26e19a93 100644 --- a/src/app/eclair/transactions/payments/lightning-payments.component.scss +++ b/src/app/eclair/transactions/payments/lightning-payments.component.scss @@ -4,9 +4,8 @@ .mat-column-group_id, .mat-column-group_recipientNodeId, .mat-column-group_recipientNodeAlias, .mat-column-group_recipientAmount, .mat-column-group_description, .mat-column-group_paymentHash, .mat-column-group_paymentPreimage { - padding-left: 2rem; - flex: 1 1 12%; - width: 12%; + flex: 0 0 20%; + width: 20%; & .ellipsis-parent { display: flex; } @@ -31,13 +30,16 @@ } } +.mat-column-group_firstPartTimestamp { + .part-row-span:not(:first-of-type) { + padding-left: 3rem; + } +} + .part-row-span { min-height: 4.2rem; place-content: center flex-start; align-items: center; - &:not(:first-of-type) { - padding-left: 3rem; - } &.ellipsis-parent { display: flex; } diff --git a/src/app/eclair/transactions/payments/lightning-payments.component.ts b/src/app/eclair/transactions/payments/lightning-payments.component.ts index 765ab375..69747bf6 100644 --- a/src/app/eclair/transactions/payments/lightning-payments.component.ts +++ b/src/app/eclair/transactions/payments/lightning-payments.component.ts @@ -40,6 +40,7 @@ export class ECLLightningPaymentsComponent implements OnInit, AfterViewInit, OnD @ViewChild('sendPaymentForm', { static: false }) form; @ViewChild(MatSort, { static: false }) sort: MatSort | undefined; @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator | undefined; + public colWidth = '20rem'; public PAGE_ID = 'transactions'; public tableSetting: TableSetting = { tableId: 'payments', recordsPerPage: PAGE_SIZE, sortBy: 'firstPartTimestamp', sortOrder: SortOrderEnum.DESCENDING }; public faHistory = faHistory; @@ -93,6 +94,7 @@ export class ECLLightningPaymentsComponent implements OnInit, AfterViewInit, OnD this.partColumns = []; this.displayedColumns.map((col) => this.partColumns.push('group_' + col)); this.pageSize = this.tableSetting.recordsPerPage ? +this.tableSetting.recordsPerPage : PAGE_SIZE; + this.colWidth = this.displayedColumns.length ? ((this.commonService.getContainerSize().width / this.displayedColumns.length) / 10) + 'rem' : '20rem'; this.logger.info(this.displayedColumns); }); this.store.select(payments).pipe(takeUntil(this.unSubs[3])). @@ -103,7 +105,7 @@ export class ECLLightningPaymentsComponent implements OnInit, AfterViewInit, OnD this.errorMessage = !this.apiCallStatus.message ? '' : (typeof (this.apiCallStatus.message) === 'object') ? JSON.stringify(this.apiCallStatus.message) : this.apiCallStatus.message; } this.paymentJSONArr = (paymentsSeletor.payments && paymentsSeletor.payments.sent && paymentsSeletor.payments.sent.length > 0) ? paymentsSeletor.payments.sent : []; - if (this.paymentJSONArr.length > 0 && this.sort && this.paginator && this.displayedColumns.length > 0) { + if (this.paymentJSONArr.length > 0 && this.sort && this.paginator && this.displayedColumns.length > 0) { this.loadPaymentsTable(this.paymentJSONArr); } this.logger.info(paymentsSeletor); diff --git a/src/app/lnd/backup/channel-backup-table/channel-backup-table.component.html b/src/app/lnd/backup/channel-backup-table/channel-backup-table.component.html index 9d1e5a20..50e5f393 100644 --- a/src/app/lnd/backup/channel-backup-table/channel-backup-table.component.html +++ b/src/app/lnd/backup/channel-backup-table/channel-backup-table.component.html @@ -28,7 +28,11 @@ - +
Channel Point {{channel?.channel_point}} +
+ {{channel?.channel_point}} +
+
diff --git a/src/app/lnd/backup/channel-restore-table/channel-restore-table.component.html b/src/app/lnd/backup/channel-restore-table/channel-restore-table.component.html index ed372228..2f6d9fc4 100644 --- a/src/app/lnd/backup/channel-restore-table/channel-restore-table.component.html +++ b/src/app/lnd/backup/channel-restore-table/channel-restore-table.component.html @@ -23,7 +23,11 @@ - + - + - + - + diff --git a/src/app/lnd/on-chain/utxo-tables/on-chain-transaction-history/on-chain-transaction-history.component.html b/src/app/lnd/on-chain/utxo-tables/on-chain-transaction-history/on-chain-transaction-history.component.html index b64a42db..699974a1 100644 --- a/src/app/lnd/on-chain/utxo-tables/on-chain-transaction-history/on-chain-transaction-history.component.html +++ b/src/app/lnd/on-chain/utxo-tables/on-chain-transaction-history/on-chain-transaction-history.component.html @@ -14,15 +14,27 @@ - + - + - + diff --git a/src/app/lnd/on-chain/utxo-tables/utxos/utxos.component.ts b/src/app/lnd/on-chain/utxo-tables/utxos/utxos.component.ts index b3aaf31d..a021ff9f 100644 --- a/src/app/lnd/on-chain/utxo-tables/utxos/utxos.component.ts +++ b/src/app/lnd/on-chain/utxo-tables/utxos/utxos.component.ts @@ -60,8 +60,8 @@ export class OnChainUTXOsComponent implements OnInit, OnChanges, OnDestroy { } ngOnInit() { - this.router.routeReuseStrategy.shouldReuseRoute = () => false; - this.router.onSameUrlNavigation = 'reload'; + // this.router.routeReuseStrategy.shouldReuseRoute = () => false; + // this.router.onSameUrlNavigation = 'reload'; this.tableSetting.tableId = this.isDustUTXO ? 'dust_utxos' : 'utxos'; this.store.select(lndPageSettings).pipe(takeUntil(this.unSubs[0])). subscribe((settings: { pageSettings: PageSettings[], apiCallStatus: ApiCallStatusPayload }) => { diff --git a/src/app/lnd/peers-channels/channels/channels-tables/channel-active-htlcs-table/channel-active-htlcs-table.component.html b/src/app/lnd/peers-channels/channels/channels-tables/channel-active-htlcs-table/channel-active-htlcs-table.component.html index 71af1f88..4d87889f 100644 --- a/src/app/lnd/peers-channels/channels/channels-tables/channel-active-htlcs-table/channel-active-htlcs-table.component.html +++ b/src/app/lnd/peers-channels/channels/channels-tables/channel-active-htlcs-table/channel-active-htlcs-table.component.html @@ -15,11 +15,11 @@ Active HTLCs: {{channel?.pending_htlcs?.length}} - - + + {{htlc?.amount | number}} - + @@ -84,10 +84,10 @@ - - - - - + - + - + - + - + - + diff --git a/src/app/lnd/peers-channels/peers/peers.component.html b/src/app/lnd/peers-channels/peers/peers.component.html index da5dec79..2c4ba249 100644 --- a/src/app/lnd/peers-channels/peers/peers.component.html +++ b/src/app/lnd/peers-channels/peers/peers.component.html @@ -17,15 +17,27 @@
Channel Point {{channel?.channel_point}} +
+ {{channel?.channel_point}} +
+
diff --git a/src/app/lnd/graph/query-routes/query-routes.component.html b/src/app/lnd/graph/query-routes/query-routes.component.html index 437fe869..7511fbb7 100644 --- a/src/app/lnd/graph/query-routes/query-routes.component.html +++ b/src/app/lnd/graph/query-routes/query-routes.component.html @@ -32,15 +32,27 @@ Peer {{hop?.pubkey_alias}} +
+ {{hop?.pubkey_alias}} +
+
Peer Pubkey {{hop?.pub_key}} +
+ {{hop?.pub_key}} +
+
Channel {{hop?.chan_id}} +
+ {{hop?.chan_id}} +
+
TLV Payload Label {{transaction?.label}} +
+ {{transaction?.label}} +
+
Block Hash {{transaction?.block_hash}} +
+ {{transaction?.block_hash}} +
+
Transaction Hash {{transaction?.tx_hash}} +
+ {{transaction?.tx_hash}} +
+
Amount (Sats) + Hash Lock + {{' '}} @@ -97,7 +97,7 @@ +
@@ -105,7 +105,7 @@
+ diff --git a/src/app/lnd/peers-channels/channels/channels-tables/channel-active-htlcs-table/channel-active-htlcs-table.component.scss b/src/app/lnd/peers-channels/channels/channels-tables/channel-active-htlcs-table/channel-active-htlcs-table.component.scss index 64cc3ed4..09e475db 100644 --- a/src/app/lnd/peers-channels/channels/channels-tables/channel-active-htlcs-table/channel-active-htlcs-table.component.scss +++ b/src/app/lnd/peers-channels/channels/channels-tables/channel-active-htlcs-table/channel-active-htlcs-table.component.scss @@ -9,13 +9,17 @@ text-overflow: ellipsis; } +.mat-column-amount { + .htlc-row-span:not(:first-of-type) { + padding-left: 3rem; + padding-right: 2rem; + } +} + .htlc-row-span { min-height: 4.2rem; place-content: center flex-start; align-items: center; - &:not(:first-of-type) { - padding-left: 3rem; - } } .mat-column-actions { diff --git a/src/app/lnd/peers-channels/channels/channels-tables/channel-closed-table/channel-closed-table.component.html b/src/app/lnd/peers-channels/channels/channels-tables/channel-closed-table/channel-closed-table.component.html index 00e76d31..67f2203d 100644 --- a/src/app/lnd/peers-channels/channels/channels-tables/channel-closed-table/channel-closed-table.component.html +++ b/src/app/lnd/peers-channels/channels/channels-tables/channel-closed-table/channel-closed-table.component.html @@ -19,27 +19,51 @@ Peer {{channel.remote_alias}} +
+ {{channel?.remote_alias}} +
+
Pubkey {{channel.remote_pubkey}} +
+ {{channel?.remote_pubkey}} +
+
Channel Point {{channel.channel_point}} +
+ {{channel?.channel_point}} +
+
Channel Id {{channel.chan_id}} +
+ {{channel?.chan_id}} +
+
Closing Tx Hash {{channel.closing_tx_hash}} +
+ {{channel?.closing_tx_hash}} +
+
Chain Hash {{channel.chain_hash}} +
+ {{channel?.chain_hash}} +
+
Open Initiator
- + - + - + diff --git a/src/app/lnd/routing/forwarding-history/forwarding-history.component.html b/src/app/lnd/routing/forwarding-history/forwarding-history.component.html index 3465c992..a1a2cc28 100644 --- a/src/app/lnd/routing/forwarding-history/forwarding-history.component.html +++ b/src/app/lnd/routing/forwarding-history/forwarding-history.component.html @@ -15,19 +15,35 @@ - + - + - + - + diff --git a/src/app/lnd/routing/non-routing-peers/non-routing-peers.component.html b/src/app/lnd/routing/non-routing-peers/non-routing-peers.component.html index 7264b7b9..13f55cb1 100644 --- a/src/app/lnd/routing/non-routing-peers/non-routing-peers.component.html +++ b/src/app/lnd/routing/non-routing-peers/non-routing-peers.component.html @@ -12,19 +12,35 @@
Alias {{peer?.alias}} +
+ {{peer?.alias}} +
+
Public Key {{peer?.pub_key}} +
+ {{peer?.pub_key}} +
+
Address {{peer?.address}} +
+ {{peer?.address}} +
+
Sync Type Inbound Alias{{fhEvent.alias_in}} +
+ {{fhEvent?.alias_in}} +
+
Inbound Channel{{fhEvent.chan_id_in}} +
+ {{fhEvent?.chan_id_in}} +
+
Outbound Alias{{fhEvent.alias_out}} +
+ {{fhEvent?.alias_out}} +
+
Outbound Channel{{fhEvent.chan_id_out}} +
+ {{fhEvent?.chan_id_out}} +
+
Inbound Amount (Sats)
- + - + - + - + diff --git a/src/app/lnd/routing/routing-peers/routing-peers.component.html b/src/app/lnd/routing/routing-peers/routing-peers.component.html index 779c89a7..a13ac1e1 100644 --- a/src/app/lnd/routing/routing-peers/routing-peers.component.html +++ b/src/app/lnd/routing/routing-peers/routing-peers.component.html @@ -13,11 +13,19 @@
Channel ID{{nonRPeer.chan_id}} +
+ {{nonRPeer?.chan_id}} +
+
Peer Alias{{nonRPeer.remote_alias}} +
+ {{nonRPeer?.remote_alias}} +
+
Peer Pubkey{{nonRPeer.remote_pubkey}} +
+ {{nonRPeer?.remote_pubkey}} +
+
Channel Point {{nonRPeer.channel_point}} +
+ {{nonRPeer?.channel_point}} +
+
Uptime ({{timeUnit}})
- + - + @@ -62,11 +70,19 @@
Channel ID{{rPeer.chan_id}} +
+ {{rPeer?.chan_id}} +
+
Peer Alias{{rPeer.alias}} +
+ {{rPeer?.alias}} +
+
Events
- + - + diff --git a/src/app/lnd/store/lnd.reducers.ts b/src/app/lnd/store/lnd.reducers.ts index 8e4381cf..f35e1439 100644 --- a/src/app/lnd/store/lnd.reducers.ts +++ b/src/app/lnd/store/lnd.reducers.ts @@ -226,7 +226,7 @@ export const LNDReducer = createReducer(initLNDState, on(setPageSettings, (state, { payload }) => { const newPageSettings: PageSettings[] = []; LND_DEFAULT_PAGE_SETTINGS.forEach((defaultPage) => { - const pageSetting = payload && Object.keys(payload).length > 0 ? payload.find((p) => p.pageId === defaultPage.pageId) : null; + const pageSetting = payload && payload.length && payload.length > 0 ? payload.find((p) => p.pageId === defaultPage.pageId) : null; if (pageSetting) { const tablesSettings = JSON.parse(JSON.stringify(pageSetting.tables)); pageSetting.tables = []; // To maintain settings order diff --git a/src/app/lnd/transactions/payments/lightning-payments.component.scss b/src/app/lnd/transactions/payments/lightning-payments.component.scss index 5ac5845a..823110a0 100644 --- a/src/app/lnd/transactions/payments/lightning-payments.component.scss +++ b/src/app/lnd/transactions/payments/lightning-payments.component.scss @@ -30,13 +30,16 @@ } } +.mat-column-group_status, .mat-column-group_creation_date { + .htlc-row-span:not(:first-of-type) { + padding-left: 3rem; + } +} + .htlc-row-span { min-height: 4.2rem; place-content: center flex-start; align-items: center; - &:not(:first-of-type) { - padding-left: 3rem; - } &.ellipsis-parent { display: flex; } diff --git a/src/app/shared/components/node-config/page-settings/page-settings.component.ts b/src/app/shared/components/node-config/page-settings/page-settings.component.ts index 8b1e0875..20273af4 100644 --- a/src/app/shared/components/node-config/page-settings/page-settings.component.ts +++ b/src/app/shared/components/node-config/page-settings/page-settings.component.ts @@ -169,7 +169,7 @@ export class PageSettingsComponent implements OnInit, OnDestroy { } onUpdatePageSettings(): boolean | void { - if (this.pageSettings.reduce((pacc, page) => pacc || (page.tables.reduce((acc, table) => !(table.recordsPerPage && table.sortBy && table.sortOrder && table.columnSelection && table.columnSelection.length >= 2), false)), false)) { + if (this.pageSettings.reduce((pacc, page) => (pacc || (page.tables.reduce((acc, table) => !(table.recordsPerPage && table.sortBy && table.sortOrder && table.columnSelection && table.columnSelection.length >= 2), false))), false)) { return true; } this.errorMessage = ''; diff --git a/src/app/shared/services/consts-enums-functions.ts b/src/app/shared/services/consts-enums-functions.ts index 0ac796ef..3173b221 100644 --- a/src/app/shared/services/consts-enums-functions.ts +++ b/src/app/shared/services/consts-enums-functions.ts @@ -748,9 +748,9 @@ export const CLN_DEFAULT_PAGE_SETTINGS: PageSettings[] = [ columnSelection: ['alias', 'channel', 'direction', 'delay', 'msatoshi'] } ] }, { pageId: 'peerswap', tables: [ - { tableId: 'swaps', recordsPerPage: PAGE_SIZE, sortBy: '', sortOrder: SortOrderEnum.DESCENDING, - columnSelectionSM: [], - columnSelection: [] } + { tableId: 'swaps', recordsPerPage: PAGE_SIZE, sortBy: 'created_at', sortOrder: SortOrderEnum.DESCENDING, + columnSelectionSM: ['id', 'state', 'amount'], + columnSelection: ['id', 'alias', 'short_channel_id', 'created_at', 'state', 'amount'] } ] } ]; @@ -839,8 +839,8 @@ export const CLN_TABLES_DEF = { }, peerswap: { swaps: { - maxColumns: 5, - allowedColumns: [] + maxColumns: 6, + allowedColumns: ['id', 'alias', 'short_channel_id', 'created_at', 'state', 'amount'] } } };
Channel ID{{rPeer.chan_id}} +
+ {{rPeer?.chan_id}} +
+
Peer Alias{{rPeer.alias}} +
+ {{rPeer?.alias}} +
+
Events