From 9418a86453b82d3f05e13e08754158648bd56e63 Mon Sep 17 00:00:00 2001 From: Daniel Chew Date: Thu, 2 Mar 2023 20:41:23 +0900 Subject: [PATCH 1/4] add delete product feature --- .../components/tabs/General.tsx | 61 ++++++++++++++++--- .../components/tabs/Proposals.tsx | 2 +- 2 files changed, 55 insertions(+), 8 deletions(-) diff --git a/governance/xc_admin/packages/xc_admin_frontend/components/tabs/General.tsx b/governance/xc_admin/packages/xc_admin_frontend/components/tabs/General.tsx index 25ef7c0905..ec6ae0918e 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/components/tabs/General.tsx +++ b/governance/xc_admin/packages/xc_admin_frontend/components/tabs/General.tsx @@ -197,6 +197,17 @@ const General = () => { changes[symbol].new = { ...fileDataParsed[symbol] } } }) + // check if any existing symbols are not in uploaded json + Object.keys(data).forEach((symbol) => { + if (!fileDataParsed[symbol]) { + changes[symbol] = { prev: {} } + changes[symbol].prev = { ...data[symbol] } + changes[symbol].prev.metadata = { + ...changes[symbol].prev.metadata, + symbol, + } + } + }) setDataChanges(changes) openModal() } @@ -342,6 +353,19 @@ const General = () => { .instruction() ) } + } else if (!newChanges) { + // if new is undefined, it means that the symbol is deleted + // create delete product account instruction + instructions.push( + await pythProgramClient.methods + .delProduct() + .accounts({ + fundingAccount, + mappingAccount: rawConfig.mappingAccounts[0].address, + productAccount: new PublicKey(prev.address), + }) + .instruction() + ) } else { // check if metadata has changed if ( @@ -580,6 +604,19 @@ const General = () => { ) } + const OldPriceFeedsRows = ({ priceFeedData }: { priceFeedData: any }) => { + return ( + <> + + Symbol + + {priceFeedData.metadata.symbol} + + + + ) + } + const ModalContent = ({ changes }: { changes: any }) => { return ( <> @@ -590,12 +627,16 @@ const General = () => { const { prev, new: newChanges } = changes[key] const addNewPriceFeed = prev === undefined && newChanges !== undefined - const diff = addNewPriceFeed - ? [] - : Object.keys(prev).filter( - (k) => - JSON.stringify(prev[k]) !== JSON.stringify(newChanges[k]) - ) + const deleteOldPriceFeed = + prev !== undefined && newChanges === undefined + const diff = + addNewPriceFeed || deleteOldPriceFeed + ? [] + : Object.keys(prev).filter( + (k) => + JSON.stringify(prev[k]) !== + JSON.stringify(newChanges[k]) + ) return ( @@ -603,11 +644,17 @@ const General = () => { className="base16 py-4 pl-6 pr-2 font-bold lg:pl-6" colSpan={2} > - {addNewPriceFeed ? 'Add New Price Feed' : key} + {addNewPriceFeed + ? 'Add New Price Feed' + : deleteOldPriceFeed + ? 'Delete Old Price Feed' + : key} {addNewPriceFeed ? ( + ) : deleteOldPriceFeed ? ( + ) : ( diff.map((k) => k === 'metadata' ? ( diff --git a/governance/xc_admin/packages/xc_admin_frontend/components/tabs/Proposals.tsx b/governance/xc_admin/packages/xc_admin_frontend/components/tabs/Proposals.tsx index 50e8802541..524863ee83 100644 --- a/governance/xc_admin/packages/xc_admin_frontend/components/tabs/Proposals.tsx +++ b/governance/xc_admin/packages/xc_admin_frontend/components/tabs/Proposals.tsx @@ -402,7 +402,7 @@ const Proposal = ({ ) : proposalStatus === 'executeReady' ? ( -
+