diff --git a/squeaknode/admin/webapp/static/build/asset-manifest.json b/squeaknode/admin/webapp/static/build/asset-manifest.json
index 107af5dd..3d6fa767 100644
--- a/squeaknode/admin/webapp/static/build/asset-manifest.json
+++ b/squeaknode/admin/webapp/static/build/asset-manifest.json
@@ -3,21 +3,21 @@
"main.css": "/static/css/main.af20da16.chunk.css",
"main.js": "/static/js/main.da5b0c56.chunk.js",
"main.js.map": "/static/js/main.da5b0c56.chunk.js.map",
- "runtime-main.js": "/static/js/runtime-main.a0b0df69.js",
- "runtime-main.js.map": "/static/js/runtime-main.a0b0df69.js.map",
+ "runtime-main.js": "/static/js/runtime-main.0a9c59e0.js",
+ "runtime-main.js.map": "/static/js/runtime-main.0a9c59e0.js.map",
"static/js/2.efd8ed9d.chunk.js": "/static/js/2.efd8ed9d.chunk.js",
"static/js/2.efd8ed9d.chunk.js.map": "/static/js/2.efd8ed9d.chunk.js.map",
"static/css/3.1f6bb621.chunk.css": "/static/css/3.1f6bb621.chunk.css",
"static/js/3.92446fb0.chunk.js": "/static/js/3.92446fb0.chunk.js",
"static/js/3.92446fb0.chunk.js.map": "/static/js/3.92446fb0.chunk.js.map",
"static/css/4.6512f3a3.chunk.css": "/static/css/4.6512f3a3.chunk.css",
- "static/js/4.775f296d.chunk.js": "/static/js/4.775f296d.chunk.js",
- "static/js/4.775f296d.chunk.js.map": "/static/js/4.775f296d.chunk.js.map",
+ "static/js/4.ab2b1a69.chunk.js": "/static/js/4.ab2b1a69.chunk.js",
+ "static/js/4.ab2b1a69.chunk.js.map": "/static/js/4.ab2b1a69.chunk.js.map",
"static/css/5.3aaab79d.chunk.css": "/static/css/5.3aaab79d.chunk.css",
- "static/js/5.0785208d.chunk.js": "/static/js/5.0785208d.chunk.js",
- "static/js/5.0785208d.chunk.js.map": "/static/js/5.0785208d.chunk.js.map",
+ "static/js/5.9ca633c2.chunk.js": "/static/js/5.9ca633c2.chunk.js",
+ "static/js/5.9ca633c2.chunk.js.map": "/static/js/5.9ca633c2.chunk.js.map",
"index.html": "/index.html",
- "precache-manifest.bbdb9d29f3235a67924c44ba9e84e332.js": "/precache-manifest.bbdb9d29f3235a67924c44ba9e84e332.js",
+ "precache-manifest.e801dacbe9a2cb38e7d01a317dff5554.js": "/precache-manifest.e801dacbe9a2cb38e7d01a317dff5554.js",
"service-worker.js": "/service-worker.js",
"static/css/3.1f6bb621.chunk.css.map": "/static/css/3.1f6bb621.chunk.css.map",
"static/css/4.6512f3a3.chunk.css.map": "/static/css/4.6512f3a3.chunk.css.map",
@@ -27,7 +27,7 @@
"static/media/icon.a0c2d343.svg": "/static/media/icon.a0c2d343.svg"
},
"entrypoints": [
- "static/js/runtime-main.a0b0df69.js",
+ "static/js/runtime-main.0a9c59e0.js",
"static/js/2.efd8ed9d.chunk.js",
"static/css/main.af20da16.chunk.css",
"static/js/main.da5b0c56.chunk.js"
diff --git a/squeaknode/admin/webapp/static/build/index.html b/squeaknode/admin/webapp/static/build/index.html
index 90b2b924..b4e29461 100644
--- a/squeaknode/admin/webapp/static/build/index.html
+++ b/squeaknode/admin/webapp/static/build/index.html
@@ -1 +1 @@
-
Squeaknode You need to enable JavaScript to run this app.
\ No newline at end of file
+Squeaknode You need to enable JavaScript to run this app.
\ No newline at end of file
diff --git a/squeaknode/admin/webapp/static/build/precache-manifest.bbdb9d29f3235a67924c44ba9e84e332.js b/squeaknode/admin/webapp/static/build/precache-manifest.e801dacbe9a2cb38e7d01a317dff5554.js
similarity index 70%
rename from squeaknode/admin/webapp/static/build/precache-manifest.bbdb9d29f3235a67924c44ba9e84e332.js
rename to squeaknode/admin/webapp/static/build/precache-manifest.e801dacbe9a2cb38e7d01a317dff5554.js
index f3ad5e24..0ff3fb7b 100644
--- a/squeaknode/admin/webapp/static/build/precache-manifest.bbdb9d29f3235a67924c44ba9e84e332.js
+++ b/squeaknode/admin/webapp/static/build/precache-manifest.e801dacbe9a2cb38e7d01a317dff5554.js
@@ -1,6 +1,6 @@
self.__precacheManifest = (self.__precacheManifest || []).concat([
{
- "revision": "b70bcbaa4783469c46792dddbecb3a97",
+ "revision": "223f86a723d0cc60f3297c7a32f6fcb3",
"url": "/index.html"
},
{
@@ -8,11 +8,11 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([
"url": "/static/css/3.1f6bb621.chunk.css"
},
{
- "revision": "6f97efe1735f4b7218ee",
+ "revision": "6fc37c8992a6520f33af",
"url": "/static/css/4.6512f3a3.chunk.css"
},
{
- "revision": "4aca34bd7139a75f197e",
+ "revision": "8d3da06e86b113952a4b",
"url": "/static/css/5.3aaab79d.chunk.css"
},
{
@@ -32,20 +32,20 @@ self.__precacheManifest = (self.__precacheManifest || []).concat([
"url": "/static/js/3.92446fb0.chunk.js"
},
{
- "revision": "6f97efe1735f4b7218ee",
- "url": "/static/js/4.775f296d.chunk.js"
+ "revision": "6fc37c8992a6520f33af",
+ "url": "/static/js/4.ab2b1a69.chunk.js"
},
{
- "revision": "4aca34bd7139a75f197e",
- "url": "/static/js/5.0785208d.chunk.js"
+ "revision": "8d3da06e86b113952a4b",
+ "url": "/static/js/5.9ca633c2.chunk.js"
},
{
"revision": "0a82c9b808d9ac93b4db",
"url": "/static/js/main.da5b0c56.chunk.js"
},
{
- "revision": "2886ea7740cf42bc1534",
- "url": "/static/js/runtime-main.a0b0df69.js"
+ "revision": "2017a8d2759b77392f57",
+ "url": "/static/js/runtime-main.0a9c59e0.js"
},
{
"revision": "a0c2d343127a93b025409da6fd970700",
diff --git a/squeaknode/admin/webapp/static/build/service-worker.js b/squeaknode/admin/webapp/static/build/service-worker.js
index f1b1dc4d..9a970d37 100644
--- a/squeaknode/admin/webapp/static/build/service-worker.js
+++ b/squeaknode/admin/webapp/static/build/service-worker.js
@@ -14,7 +14,7 @@
importScripts("https://storage.googleapis.com/workbox-cdn/releases/4.3.1/workbox-sw.js");
importScripts(
- "/precache-manifest.bbdb9d29f3235a67924c44ba9e84e332.js"
+ "/precache-manifest.e801dacbe9a2cb38e7d01a317dff5554.js"
);
self.addEventListener('message', (event) => {
diff --git a/squeaknode/admin/webapp/static/build/static/js/4.775f296d.chunk.js b/squeaknode/admin/webapp/static/build/static/js/4.775f296d.chunk.js
deleted file mode 100644
index e5134397..00000000
--- a/squeaknode/admin/webapp/static/build/static/js/4.775f296d.chunk.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(this["webpackJsonptwitter-frontend"]=this["webpackJsonptwitter-frontend"]||[]).push([[4],{135:function(e,t,a){},137:function(e,t,a){"use strict";a.r(t);var n=a(9),c=a(0),l=a.n(c),r=(a(135),a(17),a(13)),s=(a(12),a(19),a(37),a(38),a(7)),m=a(4),o=a(27);t.default=Object(r.h)((function(e){var t=Object(c.useState)(!1),a=Object(n.a)(t,2),r=(a[0],a[1],Object(c.useState)("")),i=Object(n.a)(r,2),d=i[0],u=i[1],p=Object(c.useState)(""),E=Object(n.a)(p,2),b=(E[0],E[1],Object(c.useState)(!1)),v=Object(n.a)(b,2),f=v[0],N=v[1],O=Object(c.useState)(!1),h=Object(n.a)(O,2),j=h[0],w=h[1],g=Object(c.useState)(""),k=Object(n.a)(g,2),y=(k[0],k[1],Object(c.useState)(!1)),C=Object(n.a)(y,2),I=(C[0],C[1]),P=Object(c.useState)("Members"),S=Object(n.a)(P,2),T=(S[0],S[1],Object(c.useState)(!1)),D=Object(n.a)(T,2),x=(D[0],D[1],Object(c.useState)(!1)),A=Object(n.a)(x,2),B=A[0],J=A[1],L=Object(m.c)(o.d),M=Object(m.b)();Object(c.useEffect)((function(){window.scrollTo(0,0),M(Object(o.b)({network:e.match.params.network,host:e.match.params.host,port:e.match.params.port}))}),[]);var R=Object(c.useRef)(!0);Object(c.useEffect)((function(){R.current?R.current=!1:document.getElementsByTagName("body")[0].style.cssText=B&&"overflow-y: hidden; margin-right: 17px"}),[B]),Object(c.useEffect)((function(){return function(){return document.getElementsByTagName("body")[0].style.cssText=""}}),[]);var q=function(){J(!B),I(!1),setTimeout((function(){N(!f)}),20)},z=function(e,t){J(!B),setTimeout((function(){w(!j)}),20)},F=function(e){e.stopPropagation()};return l.a.createElement("div",null,l.a.createElement("div",{className:"profile-wrapper"},l.a.createElement("div",{className:"profile-header-wrapper"},l.a.createElement("div",{className:"profile-header-back"},l.a.createElement("div",{onClick:function(){return window.history.back()},className:"header-back-wrapper"},l.a.createElement(s.a,null))),l.a.createElement("div",{className:"profile-header-content"},l.a.createElement("div",{className:"profile-header-name"},e.match.params.host,":",e.match.params.port))),l.a.createElement("div",{className:"listp-details-wrap"},l.a.createElement("div",{className:"bookmarks-header-name"},L&&L.getPeerName()),l.a.createElement("div",{className:"list-owner-wrap"},l.a.createElement("div",null,e.match.params.host,":",e.match.params.port)),l.a.createElement("div",{className:"profile-options"},L&&l.a.createElement("div",{onClick:function(e){return q()},className:"peer-connect-button"},l.a.createElement("span",null,"Delete")),!L&&l.a.createElement("div",{onClick:function(e){return z("edit")},className:"profiles-create-button"},l.a.createElement("span",null,"Add Saved Peer"))),l.a.createElement("div",{className:"profile-options"},L&&l.a.createElement("div",{onClick:function(e){return L.getAutoconnect()?function(e,t){e.stopPropagation();var a={peerId:L.getPeerId()};M(Object(o.g)(a))}(e,L.getPeerId()):function(e,t){e.stopPropagation(),console.log(t),console.log(L.getPeerId());var a={peerId:L.getPeerId()};M(Object(o.h)(a))}(e,L.getPeerId())},className:L.getAutoconnect()?"enable-btn-wrap disable-switch":"enable-btn-wrap"},l.a.createElement("span",null,l.a.createElement("span",null,L.getAutoconnect()?"Enabled":"Disabled"))))),l.a.createElement("div",{className:"feed-wrapper"},l.a.createElement("div",{className:"feed-trending-card"},l.a.createElement("div",{className:"feed-card-trend"},l.a.createElement("div",null,"Number of downloads"),l.a.createElement("div",null,"TODO")),l.a.createElement("div",{className:"feed-card-trend"},l.a.createElement("div",null,"Number of purchases"),l.a.createElement("div",null,"TODO")),l.a.createElement("div",{className:"feed-card-trend"},l.a.createElement("div",null,"Last connection time"),l.a.createElement("div",null,"TODO"))))),l.a.createElement("div",{onClick:function(){return q()},style:{display:f?"block":"none"},className:"modal-edit"},l.a.createElement("div",{onClick:function(e){return F(e)},className:"modal-content"},l.a.createElement("div",{className:"modal-header"},l.a.createElement("div",{className:"modal-closeIcon"},l.a.createElement("div",{onClick:function(){return q()},className:"modal-closeIcon-wrap"},l.a.createElement(s.d,null))),l.a.createElement("p",{className:"modal-title"},"'Delete Peer'"),l.a.createElement("div",{className:"save-modal-wrapper"},l.a.createElement("div",{onClick:function(){var e={peerId:L.getPeerId()};M(Object(o.f)(e)),q()},className:"save-modal-btn"},"Delete"))))),l.a.createElement("div",{onClick:function(){return z()},style:{display:j?"block":"none"},className:"modal-edit"},l.a.createElement("div",{onClick:function(e){return F(e)},className:"modal-content"},l.a.createElement("div",{className:"modal-header"},l.a.createElement("div",{className:"modal-closeIcon"},l.a.createElement("div",{onClick:function(){return z()},className:"modal-closeIcon-wrap"},l.a.createElement(s.d,null))),l.a.createElement("p",{className:"modal-title"},"Save Peer"),l.a.createElement("div",{className:"save-modal-wrapper"},l.a.createElement("div",{onClick:function(){var t=e.match.params.host.replace(/^https?:\/\//,"");M(Object(o.i)({name:d,host:t,port:e.match.params.port,network:e.match.params.network})),z()},className:"save-modal-btn"},"Submit"))),l.a.createElement("div",{className:"modal-body"},l.a.createElement("form",{className:"edit-form"},l.a.createElement("div",{className:"edit-input-wrap"},l.a.createElement("div",{className:"edit-input-content"},l.a.createElement("label",null,"Name"),l.a.createElement("input",{onChange:function(e){return u(e.target.value)},type:"text",name:"name",className:"edit-input"}))))))))}))}}]);
-//# sourceMappingURL=4.775f296d.chunk.js.map
\ No newline at end of file
diff --git a/squeaknode/admin/webapp/static/build/static/js/4.775f296d.chunk.js.map b/squeaknode/admin/webapp/static/build/static/js/4.775f296d.chunk.js.map
deleted file mode 100644
index f32a1096..00000000
--- a/squeaknode/admin/webapp/static/build/static/js/4.775f296d.chunk.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["components/Peer/index.js"],"names":["withRouter","props","useState","editName","setName","deleteModalOpen","setDeleteModalOpen","savePeerModalOpen","setSavePeerModalOpen","setSaved","styleBody","setStyleBody","peer","useSelector","selectCurrentPeer","dispatch","useDispatch","useEffect","window","scrollTo","fetchPeer","network","match","params","host","port","isInitialMount","useRef","current","document","getElementsByTagName","style","cssText","toggleDeleteModal","setTimeout","toggleSavePeerModal","param","type","handleModalClick","e","stopPropagation","className","onClick","history","back","getPeerName","getAutoconnect","id","values","peerId","getPeerId","setPeerAutoconnectDisabled","setIsNotAutoconnect","console","log","setPeerAutoconnectEnabled","setIsAutoconnect","display","setDeletePeer","strippedHost","replace","setSavePeer","name","onChange","target","value"],"mappings":"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","file":"static/js/4.775f296d.chunk.js","sourcesContent":["import React , { useEffect, useState, useContext, useRef } from 'react'\r\nimport './style.scss'\r\nimport moment from 'moment'\r\nimport { withRouter, Link } from 'react-router-dom'\r\nimport Loader from '../Loader'\r\nimport SqueakCard from '../SqueakCard'\r\nimport {API_URL} from '../../config'\r\nimport axios from 'axios'\r\nimport {ICON_ARROWBACK, ICON_UPLOAD, ICON_CLOSE,ICON_SEARCH } from '../../Icons'\r\n\r\nimport { unwrapResult } from '@reduxjs/toolkit'\r\nimport { useSelector } from 'react-redux'\r\nimport { useDispatch } from 'react-redux'\r\n\r\nimport {\r\n fetchPeer,\r\n selectCurrentPeer,\r\n selectCurrentPeerStatus,\r\n setSavePeer,\r\n setDeletePeer,\r\n setPeerAutoconnectEnabled,\r\n setPeerAutoconnectDisabled,\r\n} from '../../features/peers/peersSlice'\r\n\r\n\r\nconst Peer = (props) => {\r\n\r\nconst [modalOpen, setModalOpen] = useState(false)\r\n\r\nconst [editName, setName] = useState('')\r\nconst [editDescription, setDescription] = useState('')\r\nconst [deleteModalOpen, setDeleteModalOpen] = useState(false)\r\nconst [savePeerModalOpen, setSavePeerModalOpen] = useState(false)\r\nconst [banner, setBanner] = useState('')\r\nconst [saved, setSaved] = useState(false)\r\nconst [tab, setTab] = useState('Members')\r\nconst [bannerLoading, setBannerLoading] = useState(false)\r\nconst [styleBody, setStyleBody] = useState(false)\r\n\r\nconst peer = useSelector(selectCurrentPeer);\r\nconst dispatch = useDispatch();\r\n\r\n\r\nuseEffect(() => {\r\n window.scrollTo(0, 0)\r\n dispatch(fetchPeer({\r\n network: props.match.params.network,\r\n host: props.match.params.host,\r\n port: props.match.params.port,\r\n }));\r\n}, [])\r\n\r\nconst isInitialMount = useRef(true);\r\nuseEffect(() => {\r\n if (isInitialMount.current){ isInitialMount.current = false }\r\n else {\r\n document.getElementsByTagName(\"body\")[0].style.cssText = styleBody && \"overflow-y: hidden; margin-right: 17px\"\r\n }\r\n}, [styleBody])\r\n\r\nuseEffect( () => () => document.getElementsByTagName(\"body\")[0].style.cssText = \"\", [] )\r\n\r\n\r\nconst deletePeer = () => {\r\n let values = {\r\n peerId: peer.getPeerId(),\r\n }\r\n dispatch(setDeletePeer(values));\r\n toggleDeleteModal();\r\n}\r\n\r\nfunction removeHttp(url) {\r\n return url.replace(/^https?:\\/\\//, '');\r\n}\r\n\r\nconst savePeer = () => {\r\n const strippedHost = removeHttp(props.match.params.host);\r\n dispatch(setSavePeer({\r\n name: editName,\r\n host: strippedHost,\r\n port: props.match.params.port,\r\n network: props.match.params.network,\r\n }));\r\n toggleSavePeerModal();\r\n}\r\n\r\nconst setIsAutoconnect = (e,id) => {\r\n e.stopPropagation()\r\n console.log(id);\r\n console.log(peer.getPeerId());\r\n let values = {\r\n peerId: peer.getPeerId(),\r\n }\r\n\r\n dispatch(setPeerAutoconnectEnabled(values));\r\n}\r\n\r\nconst setIsNotAutoconnect = (e,id) => {\r\n e.stopPropagation()\r\n let values = {\r\n peerId: peer.getPeerId(),\r\n }\r\n dispatch(setPeerAutoconnectDisabled(values));\r\n}\r\n\r\nconst toggleDeleteModal = () => {\r\n setStyleBody(!styleBody)\r\n setSaved(false)\r\n setTimeout(()=>{ setDeleteModalOpen(!deleteModalOpen) },20)\r\n}\r\n\r\nconst toggleSavePeerModal = (param, type) => {\r\n setStyleBody(!styleBody)\r\n setTimeout(()=>{ setSavePeerModalOpen(!savePeerModalOpen) },20)\r\n}\r\n\r\nconst handleModalClick = (e) => {\r\n e.stopPropagation()\r\n}\r\n\r\n\r\nreturn(\r\n \r\n\r\n
\r\n
\r\n
\r\n
window.history.back()} className=\"header-back-wrapper\">\r\n \r\n
\r\n
\r\n
\r\n
\r\n {props.match.params.host}:{props.match.params.port}\r\n
\r\n
\r\n
\r\n\r\n
\r\n
{peer && peer.getPeerName()}
\r\n
\r\n
{props.match.params.host}:{props.match.params.port}
\r\n
\r\n\r\n
\r\n {peer &&\r\n
toggleDeleteModal()}\r\n className='peer-connect-button'>\r\n Delete \r\n
\r\n }\r\n {!peer &&\r\n
toggleSavePeerModal('edit')}\r\n className='profiles-create-button'>\r\n Add Saved Peer \r\n
\r\n }\r\n
\r\n\r\n
\r\n {peer &&\r\n
\r\n peer.getAutoconnect() ?\r\n setIsNotAutoconnect(e,peer.getPeerId()) :\r\n setIsAutoconnect(e,peer.getPeerId())\r\n }\r\n className={peer.getAutoconnect() ? 'enable-btn-wrap disable-switch' : 'enable-btn-wrap'}>\r\n { peer.getAutoconnect() ? 'Enabled' : 'Disabled'} \r\n
\r\n }\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n
Number of downloads
\r\n
TODO
\r\n
\r\n
\r\n
Number of purchases
\r\n
TODO
\r\n
\r\n
\r\n
Last connection time
\r\n
TODO
\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n\r\n {/* Modal for delete profile */}\r\n
toggleDeleteModal()} style={{display: deleteModalOpen ? 'block' : 'none'}} className=\"modal-edit\">\r\n
handleModalClick(e)} className=\"modal-content\">\r\n
\r\n
\r\n
toggleDeleteModal()} className=\"modal-closeIcon-wrap\">\r\n \r\n
\r\n
\r\n
'Delete Peer'
\r\n
\r\n
\r\n Delete\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n {/* Modal for create save peer */}\r\n
toggleSavePeerModal()} style={{display: savePeerModalOpen ? 'block' : 'none'}} className=\"modal-edit\">\r\n
handleModalClick(e)} className=\"modal-content\">\r\n
\r\n
\r\n
toggleSavePeerModal()} className=\"modal-closeIcon-wrap\">\r\n \r\n
\r\n
\r\n
Save Peer
\r\n\r\n
\r\n
\r\n Submit\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n )\r\n}\r\n\r\nexport default withRouter(Peer)\r\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/squeaknode/admin/webapp/static/build/static/js/4.ab2b1a69.chunk.js b/squeaknode/admin/webapp/static/build/static/js/4.ab2b1a69.chunk.js
new file mode 100644
index 00000000..b1fdb5fe
--- /dev/null
+++ b/squeaknode/admin/webapp/static/build/static/js/4.ab2b1a69.chunk.js
@@ -0,0 +1,2 @@
+(this["webpackJsonptwitter-frontend"]=this["webpackJsonptwitter-frontend"]||[]).push([[4],{135:function(e,t,a){},137:function(e,t,a){"use strict";a.r(t);var n=a(9),l=a(0),c=a.n(l),r=(a(135),a(17),a(13)),m=(a(12),a(19),a(37),a(38),a(7)),o=a(4),s=a(27);t.default=Object(r.h)((function(e){var t=Object(l.useState)(!1),a=Object(n.a)(t,2),r=(a[0],a[1],Object(l.useState)(!1)),i=Object(n.a)(r,2),d=i[0],u=i[1],p=Object(l.useState)(""),E=Object(n.a)(p,2),f=E[0],v=E[1],N=Object(l.useState)(""),b=Object(n.a)(N,2),g=(b[0],b[1],Object(l.useState)(!1)),O=Object(n.a)(g,2),h=O[0],j=O[1],k=Object(l.useState)(!1),w=Object(n.a)(k,2),y=w[0],C=w[1],I=Object(l.useState)(!1),P=Object(n.a)(I,2),S=P[0],M=P[1],T=Object(l.useState)(""),x=Object(n.a)(T,2),B=(x[0],x[1],Object(l.useState)(!1)),D=Object(n.a)(B,2),A=(D[0],D[1]),R=Object(l.useState)("Members"),J=Object(n.a)(R,2),V=(J[0],J[1],Object(l.useState)(!1)),L=Object(n.a)(V,2),q=(L[0],L[1],Object(l.useState)(!1)),z=Object(n.a)(q,2),F=z[0],G=z[1],H=Object(o.c)(s.d),K=Object(o.b)();Object(l.useEffect)((function(){window.scrollTo(0,0),K(Object(s.b)({network:e.match.params.network,host:e.match.params.host,port:e.match.params.port}))}),[]);var Q=Object(l.useRef)(!0);Object(l.useEffect)((function(){Q.current?Q.current=!1:document.getElementsByTagName("body")[0].style.cssText=F&&"overflow-y: hidden; margin-right: 17px"}),[F]),Object(l.useEffect)((function(){return function(){return document.getElementsByTagName("body")[0].style.cssText=""}}),[]);var U=function(e,t){G(!F),A(!1),v(H.getPeerName()),setTimeout((function(){j(!h)}),20)},W=function(){G(!F),A(!1),setTimeout((function(){C(!y)}),20)},X=function(e,t){G(!F),setTimeout((function(){M(!S)}),20)},Y=function(e){e.stopPropagation()},Z=function(){u(!d)};return c.a.createElement("div",null,c.a.createElement("div",{className:"profile-wrapper"},c.a.createElement("div",{className:"profile-header-wrapper"},c.a.createElement("div",{className:"profile-header-back"},c.a.createElement("div",{onClick:function(){return window.history.back()},className:"header-back-wrapper"},c.a.createElement(m.a,null))),c.a.createElement("div",{className:"profile-header-content"},c.a.createElement("div",{className:"profile-header-name"},e.match.params.host,":",e.match.params.port))),c.a.createElement("div",{className:"profile-details-wrapper"},c.a.createElement("div",{className:"profile-options"},H&&c.a.createElement("div",{id:"profileMoreMenu",onClick:Z,className:"Nav-link"},c.a.createElement("div",{className:"Nav-item-hover"},c.a.createElement(m.w,null)),c.a.createElement("div",{onClick:function(){return Z()},style:{display:d?"block":"none"},className:"more-menu-background"},c.a.createElement("div",{className:"more-modal-wrapper"},d?c.a.createElement("div",{style:{top:document.getElementById("profileMoreMenu")&&"".concat(document.getElementById("profileMoreMenu").getBoundingClientRect().top-40,"px"),left:document.getElementById("profileMoreMenu")&&"".concat(document.getElementById("profileMoreMenu").getBoundingClientRect().left,"px"),height:"210px"},onClick:function(e){return function(e){e.stopPropagation()}(e)},className:"more-menu-content"},c.a.createElement("div",{onClick:W,className:"more-menu-item"},c.a.createElement("span",null,"Delete Profile")),c.a.createElement("div",{onClick:U,className:"more-menu-item"},c.a.createElement("span",null,"Edit Profile"))):null))),H&&c.a.createElement("div",{onClick:function(e){return H.getAutoconnect()?function(e,t){e.stopPropagation();var a={peerId:H.getPeerId()};K(Object(s.g)(a))}(e,H.getPeerId()):function(e,t){e.stopPropagation(),console.log(t),console.log(H.getPeerId());var a={peerId:H.getPeerId()};K(Object(s.h)(a))}(e,H.getPeerId())},className:H.getAutoconnect()?"enable-btn-wrap disable-switch":"enable-btn-wrap"},c.a.createElement("span",null,c.a.createElement("span",null,H.getAutoconnect()?"Enabled":"Disabled")))),c.a.createElement("div",{className:"profile-details-box"},c.a.createElement("div",{className:"profile-name"},H&&H.getPeerName()),c.a.createElement("div",{className:"profile-username"},e.match.params.host,":",e.match.params.port)),c.a.createElement("div",{className:"profile-options"},!H&&c.a.createElement("div",{onClick:function(e){return X("edit")},className:"profiles-create-button"},c.a.createElement("span",null,"Add Saved Peer")))),c.a.createElement("div",{className:"feed-wrapper"},c.a.createElement("div",{className:"feed-trending-card"},c.a.createElement("div",{className:"feed-card-trend"},c.a.createElement("div",null,"Number of downloads"),c.a.createElement("div",null,"TODO")),c.a.createElement("div",{className:"feed-card-trend"},c.a.createElement("div",null,"Number of purchases"),c.a.createElement("div",null,"TODO")),c.a.createElement("div",{className:"feed-card-trend"},c.a.createElement("div",null,"Last connection time"),c.a.createElement("div",null,"TODO"))))),c.a.createElement("div",{onClick:function(){return W()},style:{display:y?"block":"none"},className:"modal-edit"},c.a.createElement("div",{onClick:function(e){return Y(e)},className:"modal-content"},c.a.createElement("div",{className:"modal-header"},c.a.createElement("div",{className:"modal-closeIcon"},c.a.createElement("div",{onClick:function(){return W()},className:"modal-closeIcon-wrap"},c.a.createElement(m.d,null))),c.a.createElement("p",{className:"modal-title"},"'Delete Peer'"),c.a.createElement("div",{className:"save-modal-wrapper"},c.a.createElement("div",{onClick:function(){var e={peerId:H.getPeerId()};K(Object(s.f)(e)),W()},className:"save-modal-btn"},"Delete"))))),c.a.createElement("div",{onClick:function(){return X()},style:{display:S?"block":"none"},className:"modal-edit"},c.a.createElement("div",{onClick:function(e){return Y(e)},className:"modal-content"},c.a.createElement("div",{className:"modal-header"},c.a.createElement("div",{className:"modal-closeIcon"},c.a.createElement("div",{onClick:function(){return X()},className:"modal-closeIcon-wrap"},c.a.createElement(m.d,null))),c.a.createElement("p",{className:"modal-title"},"Save Peer"),c.a.createElement("div",{className:"save-modal-wrapper"},c.a.createElement("div",{onClick:function(){var t=e.match.params.host.replace(/^https?:\/\//,"");K(Object(s.i)({name:f,host:t,port:e.match.params.port,network:e.match.params.network})),X()},className:"save-modal-btn"},"Submit"))),c.a.createElement("div",{className:"modal-body"},c.a.createElement("form",{className:"edit-form"},c.a.createElement("div",{className:"edit-input-wrap"},c.a.createElement("div",{className:"edit-input-content"},c.a.createElement("label",null,"Name"),c.a.createElement("input",{onChange:function(e){return v(e.target.value)},type:"text",name:"name",className:"edit-input"}))))))),c.a.createElement("div",{onClick:function(){return U()},style:{display:h?"block":"none"},className:"modal-edit"},c.a.createElement("div",{onClick:function(e){return Y(e)},className:"modal-content"},c.a.createElement("div",{className:"modal-header"},c.a.createElement("div",{className:"modal-closeIcon"},c.a.createElement("div",{onClick:function(){return U()},className:"modal-closeIcon-wrap"},c.a.createElement(m.d,null))),c.a.createElement("p",{className:"modal-title"},"'Edit Profile'"),c.a.createElement("div",{className:"save-modal-wrapper"},c.a.createElement("div",{onClick:function(){H.getPeerId();alert("Rename peer not yet implemented!"),A(!0),U()},className:"save-modal-btn"},"Save"))),c.a.createElement("div",{className:"modal-body"},H?c.a.createElement("form",{className:"edit-form"},c.a.createElement("div",{className:"edit-input-wrap"},c.a.createElement("div",{className:"edit-input-content"},c.a.createElement("label",null,"Name"),c.a.createElement("input",{defaultValue:H.getPeerName(),onChange:function(e){return v(e.target.value)},type:"text",name:"name",className:"edit-input"})))):c.a.createElement("form",{className:"create-form"},c.a.createElement("div",{className:"create-input-wrap"},c.a.createElement("div",{className:"create-input-content"},c.a.createElement("label",null,"Name"),c.a.createElement("input",{defaultValue:"",onChange:function(e){return v(e.target.value)},type:"text",name:"name",className:"edit-input"}))))))))}))}}]);
+//# sourceMappingURL=4.ab2b1a69.chunk.js.map
\ No newline at end of file
diff --git a/squeaknode/admin/webapp/static/build/static/js/4.ab2b1a69.chunk.js.map b/squeaknode/admin/webapp/static/build/static/js/4.ab2b1a69.chunk.js.map
new file mode 100644
index 00000000..279d077d
--- /dev/null
+++ b/squeaknode/admin/webapp/static/build/static/js/4.ab2b1a69.chunk.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["components/Peer/index.js"],"names":["withRouter","props","useState","moreMenu","setMoreMenu","editName","setName","editModalOpen","setEditModalOpen","deleteModalOpen","setDeleteModalOpen","savePeerModalOpen","setSavePeerModalOpen","setSaved","styleBody","setStyleBody","peer","useSelector","selectCurrentPeer","dispatch","useDispatch","useEffect","window","scrollTo","fetchPeer","network","match","params","host","port","isInitialMount","useRef","current","document","getElementsByTagName","style","cssText","toggleEditModal","param","type","getPeerName","setTimeout","toggleDeleteModal","toggleSavePeerModal","handleModalClick","e","stopPropagation","openMore","className","onClick","history","back","id","display","top","getElementById","getBoundingClientRect","left","height","handleMenuClick","getAutoconnect","values","peerId","getPeerId","setPeerAutoconnectDisabled","disable","console","log","setPeerAutoconnectEnabled","enable","setDeletePeer","strippedHost","replace","setSavePeer","name","onChange","target","value","alert","defaultValue"],"mappings":"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","file":"static/js/4.ab2b1a69.chunk.js","sourcesContent":["import React , { useEffect, useState, useContext, useRef } from 'react'\r\nimport './style.scss'\r\nimport moment from 'moment'\r\nimport { withRouter, Link } from 'react-router-dom'\r\nimport Loader from '../Loader'\r\nimport SqueakCard from '../SqueakCard'\r\nimport {API_URL} from '../../config'\r\nimport axios from 'axios'\r\nimport {ICON_ARROWBACK, ICON_UPLOAD, ICON_CLOSE,ICON_SEARCH, ICON_SETTINGS } from '../../Icons'\r\n\r\nimport { unwrapResult } from '@reduxjs/toolkit'\r\nimport { useSelector } from 'react-redux'\r\nimport { useDispatch } from 'react-redux'\r\n\r\nimport {\r\n fetchPeer,\r\n selectCurrentPeer,\r\n selectCurrentPeerStatus,\r\n setSavePeer,\r\n setDeletePeer,\r\n setPeerAutoconnectEnabled,\r\n setPeerAutoconnectDisabled,\r\n} from '../../features/peers/peersSlice'\r\n\r\n\r\nconst Peer = (props) => {\r\n\r\n const [modalOpen, setModalOpen] = useState(false)\r\n const [moreMenu, setMoreMenu] = useState(false)\r\n const [editName, setName] = useState('')\r\n const [editDescription, setDescription] = useState('')\r\n const [editModalOpen, setEditModalOpen] = useState(false)\r\n const [deleteModalOpen, setDeleteModalOpen] = useState(false)\r\n const [savePeerModalOpen, setSavePeerModalOpen] = useState(false)\r\n const [banner, setBanner] = useState('')\r\n const [saved, setSaved] = useState(false)\r\n const [tab, setTab] = useState('Members')\r\n const [bannerLoading, setBannerLoading] = useState(false)\r\n const [styleBody, setStyleBody] = useState(false)\r\n\r\n const peer = useSelector(selectCurrentPeer);\r\n const dispatch = useDispatch();\r\n\r\n\r\n useEffect(() => {\r\n window.scrollTo(0, 0)\r\n dispatch(fetchPeer({\r\n network: props.match.params.network,\r\n host: props.match.params.host,\r\n port: props.match.params.port,\r\n }));\r\n }, [])\r\n\r\n const isInitialMount = useRef(true);\r\n useEffect(() => {\r\n if (isInitialMount.current){ isInitialMount.current = false }\r\n else {\r\n document.getElementsByTagName(\"body\")[0].style.cssText = styleBody && \"overflow-y: hidden; margin-right: 17px\"\r\n }\r\n }, [styleBody])\r\n\r\n useEffect( () => () => document.getElementsByTagName(\"body\")[0].style.cssText = \"\", [] )\r\n\r\n\r\n const deletePeer = () => {\r\n let values = {\r\n peerId: peer.getPeerId(),\r\n }\r\n dispatch(setDeletePeer(values));\r\n toggleDeleteModal();\r\n }\r\n\r\n function removeHttp(url) {\r\n return url.replace(/^https?:\\/\\//, '');\r\n }\r\n\r\n const savePeer = () => {\r\n const strippedHost = removeHttp(props.match.params.host);\r\n dispatch(setSavePeer({\r\n name: editName,\r\n host: strippedHost,\r\n port: props.match.params.port,\r\n network: props.match.params.network,\r\n }));\r\n toggleSavePeerModal();\r\n }\r\n\r\n const enable = (e,id) => {\r\n e.stopPropagation()\r\n console.log(id);\r\n console.log(peer.getPeerId());\r\n let values = {\r\n peerId: peer.getPeerId(),\r\n }\r\n\r\n dispatch(setPeerAutoconnectEnabled(values));\r\n }\r\n\r\n const disable = (e,id) => {\r\n e.stopPropagation()\r\n let values = {\r\n peerId: peer.getPeerId(),\r\n }\r\n dispatch(setPeerAutoconnectDisabled(values));\r\n }\r\n\r\n const editPeer = () => {\r\n let values = {\r\n peerId: peer.getPeerId(),\r\n name: editName,\r\n }\r\n // TODO: call rename action.\r\n alert('Rename peer not yet implemented!');\r\n // dispatch(setRenameProfile({\r\n // peerId: user.getPeerId(),\r\n // profileName: editName,\r\n // }));\r\n // TODO: chain action to update profile squeaks with the new name.\r\n setSaved(true)\r\n toggleEditModal()\r\n }\r\n\r\n const toggleEditModal = (param, type) => {\r\n setStyleBody(!styleBody)\r\n setSaved(false)\r\n setName(peer.getPeerName())\r\n setTimeout(()=>{ setEditModalOpen(!editModalOpen) },20)\r\n }\r\n\r\n\r\n const toggleDeleteModal = () => {\r\n setStyleBody(!styleBody)\r\n setSaved(false)\r\n setTimeout(()=>{ setDeleteModalOpen(!deleteModalOpen) },20)\r\n }\r\n\r\n const toggleSavePeerModal = (param, type) => {\r\n setStyleBody(!styleBody)\r\n setTimeout(()=>{ setSavePeerModalOpen(!savePeerModalOpen) },20)\r\n }\r\n\r\n const handleModalClick = (e) => {\r\n e.stopPropagation()\r\n }\r\n\r\n const openMore = () => { setMoreMenu(!moreMenu) }\r\n\r\n const handleMenuClick = (e) => { e.stopPropagation() }\r\n\r\n\r\n return(\r\n \r\n\r\n
\r\n
\r\n
\r\n
window.history.back()} className=\"header-back-wrapper\">\r\n \r\n
\r\n
\r\n
\r\n
\r\n {props.match.params.host}:{props.match.params.port}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n {peer &&\r\n \r\n }\r\n\r\n {peer &&\r\n
\r\n peer.getAutoconnect() ?\r\n disable(e,peer.getPeerId()) :\r\n enable(e,peer.getPeerId())\r\n }\r\n className={peer.getAutoconnect() ? 'enable-btn-wrap disable-switch' : 'enable-btn-wrap'}>\r\n { peer.getAutoconnect() ? 'Enabled' : 'Disabled'} \r\n
\r\n }\r\n
\r\n\r\n
\r\n
{peer && peer.getPeerName()}
\r\n
{props.match.params.host}:{props.match.params.port}
\r\n
\r\n\r\n
\r\n {!peer &&\r\n
toggleSavePeerModal('edit')}\r\n className='profiles-create-button'>\r\n Add Saved Peer \r\n
\r\n }\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n
\r\n
Number of downloads
\r\n
TODO
\r\n
\r\n
\r\n
Number of purchases
\r\n
TODO
\r\n
\r\n
\r\n
Last connection time
\r\n
TODO
\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n\r\n {/* Modal for delete peer */}\r\n
toggleDeleteModal()} style={{display: deleteModalOpen ? 'block' : 'none'}} className=\"modal-edit\">\r\n
handleModalClick(e)} className=\"modal-content\">\r\n
\r\n
\r\n
toggleDeleteModal()} className=\"modal-closeIcon-wrap\">\r\n \r\n
\r\n
\r\n
'Delete Peer'
\r\n
\r\n
\r\n Delete\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n {/* Modal for create save peer */}\r\n
toggleSavePeerModal()} style={{display: savePeerModalOpen ? 'block' : 'none'}} className=\"modal-edit\">\r\n
handleModalClick(e)} className=\"modal-content\">\r\n
\r\n
\r\n
toggleSavePeerModal()} className=\"modal-closeIcon-wrap\">\r\n \r\n
\r\n
\r\n
Save Peer
\r\n\r\n
\r\n
\r\n Submit\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n {/* Modal for edit profile */}\r\n
toggleEditModal()} style={{display: editModalOpen ? 'block' : 'none'}} className=\"modal-edit\">\r\n
handleModalClick(e)} className=\"modal-content\">\r\n
\r\n
\r\n
toggleEditModal()} className=\"modal-closeIcon-wrap\">\r\n \r\n
\r\n
\r\n
'Edit Profile'
\r\n
\r\n
\r\n
\r\n {peer ?\r\n
:\r\n
\r\n\r\n }\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n )\r\n }\r\n\r\n export default withRouter(Peer)\r\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/squeaknode/admin/webapp/static/build/static/js/5.0785208d.chunk.js b/squeaknode/admin/webapp/static/build/static/js/5.0785208d.chunk.js
deleted file mode 100644
index bc671c09..00000000
--- a/squeaknode/admin/webapp/static/build/static/js/5.0785208d.chunk.js
+++ /dev/null
@@ -1,2 +0,0 @@
-(this["webpackJsonptwitter-frontend"]=this["webpackJsonptwitter-frontend"]||[]).push([[5],{134:function(e,a,t){},136:function(e,a,t){"use strict";t.r(a);var n=t(9),l=t(0),c=t.n(l),r=(t(134),t(7)),i=t(13),m=t(20),o=t(12),s=(t(17),t(19)),u=(t(37),t(5)),d=t(4),p=t(14),f=t(11);a.default=Object(i.h)((function(e){var a=Object(l.useState)("Squeaks"),t=Object(n.a)(a,2),i=t[0],E=t[1],v=Object(l.useState)(!1),N=Object(n.a)(v,2),b=N[0],k=N[1],g=Object(l.useState)(""),y=Object(n.a)(g,2),O=y[0],j=y[1],C=Object(l.useState)(""),w=Object(n.a)(C,2),h=w[0],S=w[1],I=Object(l.useState)(!1),P=Object(n.a)(I,2),x=P[0],q=P[1],T=Object(l.useState)(!1),M=Object(n.a)(T,2),B=M[0],R=M[1],F=Object(l.useState)(!1),L=Object(n.a)(F,2),A=L[0],D=L[1],H=Object(l.useState)(!1),K=Object(n.a)(H,2),V=K[0],J=K[1],U=Object(l.useState)(!1),z=Object(n.a)(U,2),G=z[0],Q=z[1],W=Object(l.useState)(!1),X=Object(n.a)(W,2),Y=(X[0],X[1]),Z=Object(l.useState)("Sats Spent"),$=Object(n.a)(Z,2),_=$[0],ee=$[1],ae=Object(l.useState)(!1),te=Object(n.a)(ae,2),ne=te[0],le=te[1],ce=e.match.params.username,re=Object(d.c)(f.v),ie=Object(d.c)(f.r),me=Object(d.c)(f.w),oe=Object(d.c)(p.j),se=Object(d.b)();Object(l.useEffect)((function(){window.scrollTo(0,0),se(Object(p.e)(e.match.params.username)),ye(),q(!1),j("")}),[e.match.params.username]);var ue=Object(l.useRef)(!0);Object(l.useEffect)((function(){ue.current?ue.current=!1:document.getElementsByTagName("body")[0].style.cssText=ne&&"overflow-y: hidden; margin-right: 17px"}),[ne]),Object(l.useEffect)((function(){return function(){return document.getElementsByTagName("body")[0].style.cssText=""}}),[]);var de=function(e){E(e)},pe=function(e,a){le(!ne),Y(!1),j(oe.getProfileName()),setTimeout((function(){q(!x)}),20)},fe=function(){le(!ne),Y(!1),setTimeout((function(){R(!B)}),20)},Ee=function(){le(!ne),Y(!1),setTimeout((function(){D(!A)}),20)},ve=function(e,a){le(!ne),a&&ee(a),a&&ee(a),setTimeout((function(){J(!V)}),20)},Ne=function(e,a){le(!ne),Y(!1),setTimeout((function(){Q(!G)}),20)},be=function(e){e.stopPropagation()},ke=function(e){if(null!=e){var a=new FileReader;a.addEventListener("load",(function(){var e=a.result.split(",")[1];ge(e)}),!1),e&&a.readAsDataURL(e)}},ge=function(e){se(Object(p.s)({profileId:oe.getProfileId(),imageBase64:e})),Y(!0),pe()},ye=function(){se(Object(f.a)()),se(Object(f.f)({profilePubkey:e.match.params.username,limit:10,lastSqueak:null}))},Oe=function(){k(!b)};return c.a.createElement("div",null,c.a.createElement("div",null,c.a.createElement("div",{className:"profile-wrapper"},c.a.createElement("div",{className:"profile-header-wrapper"},c.a.createElement("div",{className:"profile-header-back"},c.a.createElement("div",{onClick:function(){return window.history.back()},className:"header-back-wrapper"},c.a.createElement(r.a,null))),c.a.createElement("div",{className:"profile-header-content"},c.a.createElement("div",{className:"profile-header-name"},ce))),c.a.createElement("div",{className:"profile-banner-wrapper"},c.a.createElement("img",{alt:""})),c.a.createElement("div",{className:"profile-details-wrapper"},c.a.createElement("div",{className:"profile-options"},c.a.createElement("div",{className:"profile-image-wrapper"},c.a.createElement("img",{src:oe?"".concat(Object(m.a)(oe)):null,alt:""})),oe&&c.a.createElement("div",{id:"profileMoreMenu",onClick:Oe,className:"Nav-link"},c.a.createElement("div",{className:"Nav-item-hover"},c.a.createElement(r.w,null)),c.a.createElement("div",{onClick:function(){return Oe()},style:{display:b?"block":"none"},className:"more-menu-background"},c.a.createElement("div",{className:"more-modal-wrapper"},b?c.a.createElement("div",{style:{top:document.getElementById("profileMoreMenu")&&"".concat(document.getElementById("profileMoreMenu").getBoundingClientRect().top-40,"px"),left:document.getElementById("profileMoreMenu")&&"".concat(document.getElementById("profileMoreMenu").getBoundingClientRect().left,"px"),height:"210px"},onClick:function(e){return function(e){e.stopPropagation()}(e)},className:"more-menu-content"},c.a.createElement("div",{onClick:fe,className:"more-menu-item"},c.a.createElement("span",null,"Delete Profile")),c.a.createElement("div",{onClick:pe,className:"more-menu-item"},c.a.createElement("span",null,"Edit Profile")),oe.getHasPrivateKey()&&c.a.createElement("div",{onClick:Ee,className:"more-menu-item"},c.a.createElement("span",null,"Export Private Key"))):null))),oe&&c.a.createElement("div",{onClick:function(e){return oe.getFollowing()?function(e,a){console.log(e),e.stopPropagation(),se(Object(p.u)(a))}(e,oe.getProfileId()):function(e,a){e.stopPropagation(),se(Object(p.q)(a))}(e,oe.getProfileId())},className:oe.getFollowing()?"unfollow-switch profile-edit-button":"profile-edit-button"},c.a.createElement("span",null,c.a.createElement("span",null,oe.getFollowing()?"Following":"Follow"))),!oe&&c.a.createElement("div",{onClick:function(e){return Ne("create")},className:"profiles-create-button"},c.a.createElement("span",null,"Add Contact Profile"))),c.a.createElement("div",{className:"profile-details-box"},c.a.createElement("div",{className:"profile-name"},oe?oe.getProfileName():""),c.a.createElement("div",{className:"profile-username"},"@",ce),c.a.createElement("div",{className:"profile-bio"},"\xa0"),c.a.createElement("div",{className:"profile-info-box"},"\xa0")),c.a.createElement("div",{className:"profile-social-box"},c.a.createElement("div",{onClick:function(){return ve(0,"Sats Spent")}},c.a.createElement("p",{className:"follow-num"}," 0 "),c.a.createElement("p",{className:"follow-text"}," sats spent ")),c.a.createElement("div",{onClick:function(){return ve(0,"Sats Earned")}},c.a.createElement("p",{className:"follow-num"}," 0 "),c.a.createElement("p",{className:"follow-text"}," sats earned ")))),c.a.createElement("div",{className:"profile-nav-menu"},c.a.createElement("div",{key:"squeaks",onClick:function(){return de("Squeaks")},className:"Squeaks"===i?"profile-nav-item activeTab":"profile-nav-item"},"Squeaks"),c.a.createElement("div",{key:"replies",onClick:function(){return de("Squeaks&Replies")},className:"Squeaks&Replies"===i?"profile-nav-item activeTab":"profile-nav-item"},"Squeaks & replies"),c.a.createElement("div",{key:"media",onClick:function(){return de("Media")},className:"Media"===i?"profile-nav-item activeTab":"profile-nav-item"},"Media"),c.a.createElement("div",{key:"likes",onClick:function(){return de("Likes")},className:"Likes"===i?"profile-nav-item activeTab":"profile-nav-item"},"Likes")),"Squeaks"===i?re.map((function(e){if(!e.getReplyTo())return c.a.createElement(s.a,{squeak:e,key:e.getSqueakHash(),id:e.getSqueakHash(),user:e.getAuthor()})})):"Squeaks&Replies"===i?re.map((function(e){return c.a.createElement(s.a,{squeak:e,key:e.getSqueakHash(),id:e.getSqueakHash(),user:e.getAuthor()})})):null,re.length>0&&c.a.createElement(c.a.Fragment,null,"loading"==me?c.a.createElement(o.a,null):c.a.createElement("div",{onClick:function(){return function(){var a;null==(a=re)||0===a.length||a.slice(-1)[0];se(Object(f.f)({profilePubkey:e.match.params.username,limit:10,lastSqueak:ie}))}()},className:"squeak-btn-side squeak-btn-active"},"Load more"))),c.a.createElement("div",{onClick:function(){return pe()},style:{display:x?"block":"none"},className:"modal-edit"},c.a.createElement("div",{onClick:function(e){return be(e)},className:"modal-content"},c.a.createElement("div",{className:"modal-header"},c.a.createElement("div",{className:"modal-closeIcon"},c.a.createElement("div",{onClick:function(){return pe()},className:"modal-closeIcon-wrap"},c.a.createElement(r.d,null))),c.a.createElement("p",{className:"modal-title"},"'Edit Profile'"),c.a.createElement("div",{className:"save-modal-wrapper"},c.a.createElement("div",{onClick:function(){se(Object(p.m)({profileId:oe.getProfileId()})),Y(!0),pe()},className:"save-modal-btn"},"Clear Image")),c.a.createElement("div",{className:"save-modal-wrapper"},c.a.createElement("div",{onClick:function(){oe.getProfileId();se(Object(p.t)({profileId:oe.getProfileId(),profileName:O})),Y(!0),pe()},className:"save-modal-btn"},"Save"))),c.a.createElement("div",{className:"modal-body"},c.a.createElement("div",{className:"modal-banner"}),c.a.createElement("div",{className:"modal-profile-pic"},c.a.createElement("div",{className:"modal-back-pic"},c.a.createElement("img",{src:oe?"".concat(Object(m.a)(oe)):null,alt:"profile"}),c.a.createElement("div",null,c.a.createElement(r.x,null),c.a.createElement("input",{onChange:function(){return function(){var e=document.getElementById("avatar").files[0];ke(e)}()},title:" ",id:"avatar",style:{opacity:"0"},type:"file"})))),oe?c.a.createElement("form",{className:"edit-form"},c.a.createElement("div",{className:"edit-input-wrap"},c.a.createElement("div",{className:"edit-input-content"},c.a.createElement("label",null,"Name"),c.a.createElement("input",{defaultValue:oe.getProfileName(),onChange:function(e){return j(e.target.value)},type:"text",name:"name",className:"edit-input"})))):c.a.createElement("form",{className:"create-form"},c.a.createElement("div",{className:"create-input-wrap"},c.a.createElement("div",{className:"create-input-content"},c.a.createElement("label",null,"Name"),c.a.createElement("input",{defaultValue:"",onChange:function(e){return j(e.target.value)},type:"text",name:"name",className:"edit-input"}))))))),c.a.createElement("div",{onClick:function(){return fe()},style:{display:B?"block":"none"},className:"modal-edit"},c.a.createElement("div",{onClick:function(e){return be(e)},className:"modal-content"},c.a.createElement("div",{className:"modal-header"},c.a.createElement("div",{className:"modal-closeIcon"},c.a.createElement("div",{onClick:function(){return fe()},className:"modal-closeIcon-wrap"},c.a.createElement(r.d,null))),c.a.createElement("p",{className:"modal-title"},"'Delete Profile'"),c.a.createElement("div",{className:"save-modal-wrapper"},c.a.createElement("div",{onClick:function(){var e={profileId:oe.getProfileId()};console.log("Delete user here"),se(Object(p.p)(e)),fe()},className:"save-modal-btn"},"Delete"))))),c.a.createElement("div",{onClick:function(){return Ee()},style:{display:A?"block":"none"},className:"modal-edit"},c.a.createElement("div",{onClick:function(e){return be(e)},className:"modal-content"},c.a.createElement("div",{className:"modal-header"},c.a.createElement("div",{className:"modal-closeIcon"},c.a.createElement("div",{onClick:function(){return Ee()},className:"modal-closeIcon-wrap"},c.a.createElement(r.d,null))),c.a.createElement("p",{className:"modal-title"},"'Export Private Key'"),c.a.createElement("div",{className:"save-modal-wrapper"},c.a.createElement("div",{onClick:function(){var e={profileId:oe.getProfileId()};se(Object(p.g)(e)).then(u.d).then((function(e){console.log(e),S(e)}))},className:"save-modal-btn"},"Export"))),c.a.createElement("div",{className:"modal-body"},c.a.createElement("form",{className:"edit-form"},c.a.createElement("div",{className:"edit-input-wrap"},c.a.createElement("div",{className:"edit-input-content"},c.a.createElement("label",null,"Private Key"),c.a.createElement("input",{defaultValue:h,readOnly:!0,type:"text",name:"name",className:"edit-input"}))))))),c.a.createElement("div",{onClick:function(){return ve()},style:{display:V?"block":"none"},className:"modal-edit"},c.a.createElement("div",{onClick:function(e){return be(e)},className:"modal-content"},c.a.createElement("div",{className:"modal-header no-b-border"},c.a.createElement("div",{className:"modal-closeIcon"},c.a.createElement("div",{onClick:function(){return pe()},className:"modal-closeIcon-wrap"},c.a.createElement(r.d,null))),c.a.createElement("p",{className:"modal-title"},null)),c.a.createElement("div",{className:"modal-body"},c.a.createElement("div",{className:"explore-nav-menu"},c.a.createElement("div",{onClick:function(){return ee("Sats Spent")},className:"Sats Spent"==_?"explore-nav-item activeTab":"explore-nav-item"},"Sats Spent"),c.a.createElement("div",{onClick:function(){return ee("Sats Earned")},className:"Sats Earned"==_?"explore-nav-item activeTab":"explore-nav-item"},"Sats Earned")),c.a.createElement("div",{className:"modal-scroll"})))),c.a.createElement("div",{onClick:function(){return Ne()},style:{display:G?"block":"none"},className:"modal-edit"},c.a.createElement("div",{onClick:function(e){return be(e)},className:"modal-content"},c.a.createElement("div",{className:"modal-header"},c.a.createElement("div",{className:"modal-closeIcon"},c.a.createElement("div",{onClick:function(){return Ne()},className:"modal-closeIcon-wrap"},c.a.createElement(r.d,null))),c.a.createElement("p",{className:"modal-title"},"Add Contact Profile"),c.a.createElement("div",{className:"save-modal-wrapper"},c.a.createElement("div",{onClick:function(){se(Object(p.n)({pubkey:ce,profileName:O})).then((function(){se(Object(p.e)(e.match.params.username))})),Ne()},className:"save-modal-btn"},"Submit"))),c.a.createElement("div",{className:"modal-body"},c.a.createElement("form",{className:"edit-form"},c.a.createElement("div",{className:"edit-input-wrap"},c.a.createElement("div",{className:"edit-input-content"},c.a.createElement("label",null,"Profile Name"),c.a.createElement("input",{defaultValue:"",onChange:function(e){return j(e.target.value)},type:"text",name:"name",className:"edit-input"}))),c.a.createElement("div",{className:"edit-input-wrap"},c.a.createElement("div",{className:"edit-input-content"},c.a.createElement("label",null,"Public Key"),c.a.createElement("input",{defaultValue:ce,readOnly:!0,type:"text",name:"name",className:"edit-input"})))))))))}))}}]);
-//# sourceMappingURL=5.0785208d.chunk.js.map
\ No newline at end of file
diff --git a/squeaknode/admin/webapp/static/build/static/js/5.0785208d.chunk.js.map b/squeaknode/admin/webapp/static/build/static/js/5.0785208d.chunk.js.map
deleted file mode 100644
index d1fd9bf3..00000000
--- a/squeaknode/admin/webapp/static/build/static/js/5.0785208d.chunk.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["components/Profile/index.js"],"names":["withRouter","props","useState","activeTab","setActiveTab","moreMenu","setMoreMenu","editName","setName","privateKey","setPrivateKey","editModalOpen","setEditModalOpen","deleteModalOpen","setDeleteModalOpen","exportModalOpen","setExportModalOpen","spendingModalOpen","setSpendingModalOpen","createModalOpen","setCreateModalOpen","setSaved","tab","setTab","styleBody","setStyleBody","userParam","match","params","username","profileSqueaks","useSelector","selectProfileSqueaks","lastUserSqueak","selectLastProfileSqueak","profileSqueaksStatus","selectProfileSqueaksStatus","user","selectCurrentProfile","dispatch","useDispatch","useEffect","window","scrollTo","fetchProfile","reloadSqueaks","isInitialMount","useRef","current","document","getElementsByTagName","style","cssText","changeTab","toggleEditModal","param","type","getProfileName","setTimeout","toggleDeleteModal","toggleExportModal","toggleSpendingModal","toggleCreateModal","handleModalClick","e","stopPropagation","uploadAvatar","file","reader","FileReader","addEventListener","imageBase64Stripped","result","split","uploadAvatarAsBase64","readAsDataURL","imageBase64","setProfileImage","profileId","getProfileId","clearProfileSqueaks","fetchProfileSqueaks","profilePubkey","limit","lastSqueak","openMore","className","onClick","history","back","alt","src","getProfileImageSrcString","id","display","top","getElementById","getBoundingClientRect","left","height","handleMenuClick","getHasPrivateKey","getFollowing","console","log","setUnfollowProfile","unfollowUser","setFollowProfile","followUser","key","map","t","getReplyTo","squeak","getSqueakHash","getAuthor","length","squeakLst","slice","getMoreSqueaks","setClearProfileImage","setRenameProfile","profileName","onChange","files","changeAvatar","title","opacity","defaultValue","target","value","name","values","setDeleteProfile","getProfilePrivateKey","then","unwrapResult","readOnly","setCreateContactProfile","pubkey"],"mappings":"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","file":"static/js/5.0785208d.chunk.js","sourcesContent":["import React , { useEffect, useState, useContext, useRef} from 'react'\r\nimport './style.scss'\r\nimport { ICON_ARROWBACK, ICON_MARKDOWN, ICON_DATE, ICON_CLOSE, ICON_UPLOAD, ICON_NEWMSG, ICON_SETTINGS, ICON_DARK } from '../../Icons'\r\nimport { withRouter, Link } from 'react-router-dom'\r\nimport { getProfileImageSrcString } from '../../squeakimages/images';\r\nimport Loader from '../Loader'\r\nimport moment from 'moment'\r\nimport SqueakCard from '../SqueakCard'\r\nimport {API_URL} from '../../config'\r\n\r\nimport { unwrapResult } from '@reduxjs/toolkit'\r\nimport { useSelector } from 'react-redux'\r\nimport { useDispatch } from 'react-redux'\r\n\r\nimport {\r\n fetchProfile,\r\n setFollowProfile,\r\n setUnfollowProfile,\r\n selectCurrentProfile,\r\n setDeleteProfile,\r\n setRenameProfile,\r\n setCreateContactProfile,\r\n setProfileImage,\r\n setClearProfileImage,\r\n getProfilePrivateKey,\r\n} from '../../features/profiles/profilesSlice'\r\nimport {\r\n fetchProfileSqueaks,\r\n selectProfileSqueaks,\r\n selectLastProfileSqueak,\r\n selectProfileSqueaksStatus,\r\n clearProfileSqueaks,\r\n} from '../../features/squeaks/squeaksSlice'\r\n\r\n\r\nconst Profile = (props) => {\r\n const [activeTab, setActiveTab] = useState('Squeaks')\r\n const [moreMenu, setMoreMenu] = useState(false)\r\n const [editName, setName] = useState('')\r\n const [privateKey, setPrivateKey] = useState('')\r\n const [editModalOpen, setEditModalOpen] = useState(false)\r\n const [deleteModalOpen, setDeleteModalOpen] = useState(false)\r\n const [exportModalOpen, setExportModalOpen] = useState(false)\r\n const [spendingModalOpen, setSpendingModalOpen] = useState(false)\r\n const [createModalOpen, setCreateModalOpen] = useState(false)\r\n const [saved, setSaved] = useState(false)\r\n const [tab, setTab] = useState('Sats Spent')\r\n const [styleBody, setStyleBody] = useState(false)\r\n const userParam = props.match.params.username\r\n\r\n const profileSqueaks = useSelector(selectProfileSqueaks);\r\n const lastUserSqueak = useSelector(selectLastProfileSqueak);\r\n const profileSqueaksStatus = useSelector(selectProfileSqueaksStatus);\r\n // const privateKey = 'TODO';\r\n\r\n const user = useSelector(selectCurrentProfile);\r\n const dispatch = useDispatch();\r\n\r\n\r\n\r\n useEffect(() => {\r\n window.scrollTo(0, 0)\r\n dispatch(fetchProfile(props.match.params.username));\r\n reloadSqueaks();\r\n //preventing edit modal from apprearing after clicking a user on memOpen\r\n setEditModalOpen(false)\r\n setName('')\r\n }, [props.match.params.username])\r\n\r\n const isInitialMount = useRef(true);\r\n useEffect(() => {\r\n if (isInitialMount.current){ isInitialMount.current = false }\r\n else {\r\n document.getElementsByTagName(\"body\")[0].style.cssText = styleBody && \"overflow-y: hidden; margin-right: 17px\"\r\n }\r\n }, [styleBody])\r\n\r\n useEffect( () => () => document.getElementsByTagName(\"body\")[0].style.cssText = \"\", [] )\r\n\r\n const changeTab = (tab) => {\r\n setActiveTab(tab)\r\n }\r\n\r\n const editProfile = () => {\r\n let values = {\r\n profileId: user.getProfileId(),\r\n name: editName,\r\n }\r\n dispatch(setRenameProfile({\r\n profileId: user.getProfileId(),\r\n profileName: editName,\r\n }));\r\n // TODO: chain action to update profile squeaks with the new name.\r\n setSaved(true)\r\n toggleEditModal()\r\n }\r\n\r\n const deleteProfile = () => {\r\n let values = {\r\n profileId: user.getProfileId(),\r\n }\r\n console.log('Delete user here');\r\n dispatch(setDeleteProfile(values));\r\n toggleDeleteModal();\r\n }\r\n\r\n\r\n const exportPrivateKey = () => {\r\n let values = {\r\n profileId: user.getProfileId(),\r\n }\r\n dispatch(getProfilePrivateKey(values))\r\n .then(unwrapResult)\r\n .then((privateKey) =>{\r\n console.log(privateKey);\r\n setPrivateKey(privateKey);\r\n });\r\n }\r\n\r\n const createContactProfile = () => {\r\n dispatch(setCreateContactProfile({\r\n pubkey: userParam,\r\n profileName: editName,\r\n }))\r\n .then(() => {\r\n dispatch(fetchProfile(props.match.params.username));\r\n });\r\n toggleCreateModal();\r\n }\r\n\r\n const toggleEditModal = (param, type) => {\r\n setStyleBody(!styleBody)\r\n setSaved(false)\r\n setName(user.getProfileName())\r\n setTimeout(()=>{ setEditModalOpen(!editModalOpen) },20)\r\n }\r\n\r\n const toggleDeleteModal = () => {\r\n setStyleBody(!styleBody)\r\n setSaved(false)\r\n setTimeout(()=>{ setDeleteModalOpen(!deleteModalOpen) },20)\r\n }\r\n\r\n const toggleExportModal = () => {\r\n setStyleBody(!styleBody)\r\n setSaved(false)\r\n setTimeout(()=>{ setExportModalOpen(!exportModalOpen) },20)\r\n }\r\n\r\n const toggleSpendingModal = (param, type) => {\r\n setStyleBody(!styleBody)\r\n if(type){setTab(type)}\r\n if(type){setTab(type)}\r\n setTimeout(()=>{ setSpendingModalOpen(!spendingModalOpen) },20)\r\n }\r\n\r\n const toggleCreateModal = (param, type) => {\r\n setStyleBody(!styleBody)\r\n setSaved(false)\r\n setTimeout(()=>{ setCreateModalOpen(!createModalOpen) },20)\r\n }\r\n\r\n const handleModalClick = (e) => {\r\n e.stopPropagation()\r\n }\r\n\r\n const followUser = (e,id) => {\r\n e.stopPropagation()\r\n dispatch(setFollowProfile(id));\r\n }\r\n\r\n const unfollowUser = (e,id) => {\r\n console.log(e);\r\n e.stopPropagation()\r\n dispatch(setUnfollowProfile(id));\r\n }\r\n\r\n const changeAvatar = () => {\r\n let file = document.getElementById('avatar').files[0];\r\n uploadAvatar(file);\r\n }\r\n\r\n const clearAvatar = () => {\r\n dispatch(setClearProfileImage({\r\n profileId: user.getProfileId(),\r\n }));\r\n setSaved(true)\r\n toggleEditModal()\r\n }\r\n\r\n const uploadAvatar = (file) => {\r\n if (file == null)\r\n return;\r\n const reader = new FileReader();\r\n reader.addEventListener('load', () => {\r\n // convert image file to base64 string\r\n // preview.src = reader.result;\r\n const imageBase64Stripped = reader.result.split(',')[1];\r\n uploadAvatarAsBase64(imageBase64Stripped);\r\n }, false);\r\n if (file) {\r\n reader.readAsDataURL(file);\r\n }\r\n };\r\n\r\n const uploadAvatarAsBase64 = (imageBase64) => {\r\n dispatch(setProfileImage({\r\n profileId: user.getProfileId(),\r\n imageBase64: imageBase64,\r\n }));\r\n setSaved(true)\r\n toggleEditModal()\r\n };\r\n\r\n const getLastSqueak = (squeakLst) => {\r\n if (squeakLst == null) {\r\n return null;\r\n } if (squeakLst.length === 0) {\r\n return null;\r\n }\r\n return squeakLst.slice(-1)[0];\r\n };\r\n\r\n const getMoreSqueaks = () => {\r\n let lastSqueak = getLastSqueak(profileSqueaks);\r\n dispatch(fetchProfileSqueaks({\r\n profilePubkey: props.match.params.username,\r\n limit: 10,\r\n lastSqueak: lastUserSqueak,\r\n }));\r\n }\r\n\r\n const reloadSqueaks = () => {\r\n dispatch(clearProfileSqueaks());\r\n dispatch(fetchProfileSqueaks({\r\n profilePubkey: props.match.params.username,\r\n limit: 10,\r\n lastSqueak: null,\r\n }));\r\n }\r\n\r\n const openMore = () => { setMoreMenu(!moreMenu) }\r\n\r\n const handleMenuClick = (e) => { e.stopPropagation() }\r\n\r\n\r\n return(\r\n \r\n
\r\n
\r\n
\r\n
\r\n
window.history.back()} className=\"header-back-wrapper\">\r\n \r\n
\r\n
\r\n
\r\n
\r\n {userParam}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n {user &&\r\n \r\n }\r\n\r\n {user &&\r\n
\r\n user.getFollowing() ?\r\n unfollowUser(e,user.getProfileId()) :\r\n followUser(e,user.getProfileId())\r\n }\r\n className={user.getFollowing() ? 'unfollow-switch profile-edit-button' : 'profile-edit-button'}>\r\n { user.getFollowing() ? 'Following' : 'Follow'} \r\n
\r\n }\r\n\r\n {!user &&\r\n
toggleCreateModal('create')}\r\n className='profiles-create-button'>\r\n Add Contact Profile \r\n
\r\n }\r\n
\r\n
\r\n
{user ? user.getProfileName() : ''}
\r\n
@{userParam}
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {/* TODO: Implement sats spent */}\r\n
toggleSpendingModal('members','Sats Spent')}>\r\n
0
\r\n
sats spent
\r\n
\r\n {/* TODO: Implement sats eaned */}\r\n
toggleSpendingModal('members', 'Sats Earned')}>\r\n
0
\r\n
sats earned
\r\n
\r\n
\r\n
\r\n
\r\n
changeTab('Squeaks')} className={activeTab ==='Squeaks' ? `profile-nav-item activeTab` : `profile-nav-item`}>\r\n Squeaks\r\n
\r\n
changeTab('Squeaks&Replies')} className={activeTab ==='Squeaks&Replies' ? `profile-nav-item activeTab` : `profile-nav-item`}>\r\n Squeaks & replies\r\n
\r\n
changeTab('Media')} className={activeTab ==='Media' ? `profile-nav-item activeTab` : `profile-nav-item`}>\r\n Media\r\n
\r\n
changeTab('Likes')} className={activeTab ==='Likes' ? `profile-nav-item activeTab` : `profile-nav-item`}>\r\n Likes\r\n
\r\n
\r\n {activeTab === 'Squeaks' ?\r\n profileSqueaks.map(t=>{\r\n if(!t.getReplyTo())\r\n return
\r\n }) : activeTab === 'Squeaks&Replies' ?\r\n profileSqueaks.map(t=>{\r\n return
\r\n }) :\r\n activeTab === 'Likes' ?\r\n null: activeTab === 'Media' ?\r\n null: null}\r\n {/* TODO: fix get loading state by doing this: https://medium.com/stashaway-engineering/react-redux-tips-better-way-to-handle-loading-flags-in-your-reducers-afda42a804c6 */}\r\n {profileSqueaks.length > 0 &&\r\n <>\r\n {profileSqueaksStatus == 'loading' ?\r\n
:\r\n
getMoreSqueaks()} className='squeak-btn-side squeak-btn-active'>\r\n Load more\r\n
}\r\n >\r\n }\r\n\r\n
\r\n\r\n {/* Modal for edit profile */}\r\n
toggleEditModal()} style={{display: editModalOpen ? 'block' : 'none'}} className=\"modal-edit\">\r\n
handleModalClick(e)} className=\"modal-content\">\r\n
\r\n
\r\n
toggleEditModal()} className=\"modal-closeIcon-wrap\">\r\n \r\n
\r\n
\r\n
'Edit Profile'
\r\n
\r\n
\r\n Clear Image\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n changeAvatar()} title=\" \" id=\"avatar\" style={{opacity:'0'}} type=\"file\"/>\r\n
\r\n
\r\n
\r\n {user ?\r\n
:\r\n
\r\n\r\n }\r\n
\r\n
\r\n
\r\n\r\n\r\n {/* Modal for delete profile */}\r\n
toggleDeleteModal()} style={{display: deleteModalOpen ? 'block' : 'none'}} className=\"modal-edit\">\r\n
handleModalClick(e)} className=\"modal-content\">\r\n
\r\n
\r\n
toggleDeleteModal()} className=\"modal-closeIcon-wrap\">\r\n \r\n
\r\n
\r\n
'Delete Profile'
\r\n
\r\n
\r\n Delete\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n {/* Modal for export profile */}\r\n
toggleExportModal()} style={{display: exportModalOpen ? 'block' : 'none'}} className=\"modal-edit\">\r\n
handleModalClick(e)} className=\"modal-content\">\r\n
\r\n
\r\n
toggleExportModal()} className=\"modal-closeIcon-wrap\">\r\n \r\n
\r\n
\r\n
'Export Private Key'
\r\n
\r\n
\r\n Export\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n\r\n\r\n {/* Modal for sats spent and earned */}\r\n
toggleSpendingModal()} style={{display: spendingModalOpen ? 'block' : 'none'}} className=\"modal-edit\">\r\n
handleModalClick(e)} className=\"modal-content\">\r\n
\r\n
\r\n
toggleEditModal()} className=\"modal-closeIcon-wrap\">\r\n \r\n
\r\n
\r\n
{null}
\r\n
\r\n
\r\n
\r\n
setTab('Sats Spent')} className={tab =='Sats Spent' ? `explore-nav-item activeTab` : `explore-nav-item`}>\r\n Sats Spent\r\n
\r\n
setTab('Sats Earned')} className={tab =='Sats Earned' ? `explore-nav-item activeTab` : `explore-nav-item`}>\r\n Sats Earned\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n {/* Modal for create signing profile */}\r\n
toggleCreateModal()} style={{display: createModalOpen ? 'block' : 'none'}} className=\"modal-edit\">\r\n
handleModalClick(e)} className=\"modal-content\">\r\n
\r\n
\r\n
toggleCreateModal()} className=\"modal-closeIcon-wrap\">\r\n \r\n
\r\n
\r\n
Add Contact Profile
\r\n\r\n
\r\n
\r\n Submit\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default withRouter(Profile)\r\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/squeaknode/admin/webapp/static/build/static/js/5.9ca633c2.chunk.js b/squeaknode/admin/webapp/static/build/static/js/5.9ca633c2.chunk.js
new file mode 100644
index 00000000..8340919d
--- /dev/null
+++ b/squeaknode/admin/webapp/static/build/static/js/5.9ca633c2.chunk.js
@@ -0,0 +1,2 @@
+(this["webpackJsonptwitter-frontend"]=this["webpackJsonptwitter-frontend"]||[]).push([[5],{134:function(e,a,t){},136:function(e,a,t){"use strict";t.r(a);var n=t(9),l=t(0),c=t.n(l),r=(t(134),t(7)),i=t(13),m=t(20),o=t(12),s=(t(17),t(19)),u=(t(37),t(5)),d=t(4),p=t(14),f=t(11);a.default=Object(i.h)((function(e){var a=Object(l.useState)("Squeaks"),t=Object(n.a)(a,2),i=t[0],E=t[1],v=Object(l.useState)(!1),N=Object(n.a)(v,2),b=N[0],k=N[1],g=Object(l.useState)(""),y=Object(n.a)(g,2),O=y[0],j=y[1],C=Object(l.useState)(""),w=Object(n.a)(C,2),h=w[0],S=w[1],I=Object(l.useState)(!1),P=Object(n.a)(I,2),x=P[0],q=P[1],T=Object(l.useState)(!1),M=Object(n.a)(T,2),B=M[0],R=M[1],F=Object(l.useState)(!1),L=Object(n.a)(F,2),A=L[0],D=L[1],H=Object(l.useState)(!1),K=Object(n.a)(H,2),V=K[0],J=K[1],U=Object(l.useState)(!1),z=Object(n.a)(U,2),G=z[0],Q=z[1],W=Object(l.useState)(!1),X=Object(n.a)(W,2),Y=(X[0],X[1]),Z=Object(l.useState)("Sats Spent"),$=Object(n.a)(Z,2),_=$[0],ee=$[1],ae=Object(l.useState)(!1),te=Object(n.a)(ae,2),ne=te[0],le=te[1],ce=e.match.params.username,re=Object(d.c)(f.v),ie=Object(d.c)(f.r),me=Object(d.c)(f.w),oe=Object(d.c)(p.j),se=Object(d.b)();Object(l.useEffect)((function(){window.scrollTo(0,0),se(Object(p.e)(e.match.params.username)),ye(),q(!1),j("")}),[e.match.params.username]);var ue=Object(l.useRef)(!0);Object(l.useEffect)((function(){ue.current?ue.current=!1:document.getElementsByTagName("body")[0].style.cssText=ne&&"overflow-y: hidden; margin-right: 17px"}),[ne]),Object(l.useEffect)((function(){return function(){return document.getElementsByTagName("body")[0].style.cssText=""}}),[]);var de=function(e){E(e)},pe=function(e,a){le(!ne),Y(!1),j(oe.getProfileName()),setTimeout((function(){q(!x)}),20)},fe=function(){le(!ne),Y(!1),setTimeout((function(){R(!B)}),20)},Ee=function(){le(!ne),Y(!1),setTimeout((function(){D(!A)}),20)},ve=function(e,a){le(!ne),a&&ee(a),a&&ee(a),setTimeout((function(){J(!V)}),20)},Ne=function(e,a){le(!ne),Y(!1),setTimeout((function(){Q(!G)}),20)},be=function(e){e.stopPropagation()},ke=function(e){if(null!=e){var a=new FileReader;a.addEventListener("load",(function(){var e=a.result.split(",")[1];ge(e)}),!1),e&&a.readAsDataURL(e)}},ge=function(e){se(Object(p.s)({profileId:oe.getProfileId(),imageBase64:e})),Y(!0),pe()},ye=function(){se(Object(f.a)()),se(Object(f.f)({profilePubkey:e.match.params.username,limit:10,lastSqueak:null}))},Oe=function(){k(!b)};return c.a.createElement("div",null,c.a.createElement("div",null,c.a.createElement("div",{className:"profile-wrapper"},c.a.createElement("div",{className:"profile-header-wrapper"},c.a.createElement("div",{className:"profile-header-back"},c.a.createElement("div",{onClick:function(){return window.history.back()},className:"header-back-wrapper"},c.a.createElement(r.a,null))),c.a.createElement("div",{className:"profile-header-content"},c.a.createElement("div",{className:"profile-header-name"},ce))),c.a.createElement("div",{className:"profile-banner-wrapper"},c.a.createElement("img",{alt:""})),c.a.createElement("div",{className:"profile-details-wrapper"},c.a.createElement("div",{className:"profile-options"},c.a.createElement("div",{className:"profile-image-wrapper"},c.a.createElement("img",{src:oe?"".concat(Object(m.a)(oe)):null,alt:""})),oe&&c.a.createElement("div",{id:"profileMoreMenu",onClick:Oe,className:"Nav-link"},c.a.createElement("div",{className:"Nav-item-hover"},c.a.createElement(r.w,null)),c.a.createElement("div",{onClick:function(){return Oe()},style:{display:b?"block":"none"},className:"more-menu-background"},c.a.createElement("div",{className:"more-modal-wrapper"},b?c.a.createElement("div",{style:{top:document.getElementById("profileMoreMenu")&&"".concat(document.getElementById("profileMoreMenu").getBoundingClientRect().top-40,"px"),left:document.getElementById("profileMoreMenu")&&"".concat(document.getElementById("profileMoreMenu").getBoundingClientRect().left,"px"),height:"210px"},onClick:function(e){return function(e){e.stopPropagation()}(e)},className:"more-menu-content"},c.a.createElement("div",{onClick:fe,className:"more-menu-item"},c.a.createElement("span",null,"Delete Profile")),c.a.createElement("div",{onClick:pe,className:"more-menu-item"},c.a.createElement("span",null,"Edit Profile")),oe.getHasPrivateKey()&&c.a.createElement("div",{onClick:Ee,className:"more-menu-item"},c.a.createElement("span",null,"Export Private Key"))):null))),oe&&c.a.createElement("div",{onClick:function(e){return oe.getFollowing()?function(e,a){console.log(e),e.stopPropagation(),se(Object(p.u)(a))}(e,oe.getProfileId()):function(e,a){e.stopPropagation(),se(Object(p.q)(a))}(e,oe.getProfileId())},className:oe.getFollowing()?"unfollow-switch profile-edit-button":"profile-edit-button"},c.a.createElement("span",null,c.a.createElement("span",null,oe.getFollowing()?"Following":"Follow"))),!oe&&c.a.createElement("div",{onClick:function(e){return Ne("create")},className:"profiles-create-button"},c.a.createElement("span",null,"Add Contact Profile"))),c.a.createElement("div",{className:"profile-details-box"},c.a.createElement("div",{className:"profile-name"},oe?oe.getProfileName():""),c.a.createElement("div",{className:"profile-username"},"@",ce),c.a.createElement("div",{className:"profile-info-box"},"\xa0")),c.a.createElement("div",{className:"profile-social-box"},c.a.createElement("div",{onClick:function(){return ve(0,"Sats Spent")}},c.a.createElement("p",{className:"follow-num"}," 0 "),c.a.createElement("p",{className:"follow-text"}," sats spent ")),c.a.createElement("div",{onClick:function(){return ve(0,"Sats Earned")}},c.a.createElement("p",{className:"follow-num"}," 0 "),c.a.createElement("p",{className:"follow-text"}," sats earned ")))),c.a.createElement("div",{className:"profile-nav-menu"},c.a.createElement("div",{key:"squeaks",onClick:function(){return de("Squeaks")},className:"Squeaks"===i?"profile-nav-item activeTab":"profile-nav-item"},"Squeaks"),c.a.createElement("div",{key:"replies",onClick:function(){return de("Squeaks&Replies")},className:"Squeaks&Replies"===i?"profile-nav-item activeTab":"profile-nav-item"},"Squeaks & replies"),c.a.createElement("div",{key:"media",onClick:function(){return de("Media")},className:"Media"===i?"profile-nav-item activeTab":"profile-nav-item"},"Media"),c.a.createElement("div",{key:"likes",onClick:function(){return de("Likes")},className:"Likes"===i?"profile-nav-item activeTab":"profile-nav-item"},"Likes")),"Squeaks"===i?re.map((function(e){if(!e.getReplyTo())return c.a.createElement(s.a,{squeak:e,key:e.getSqueakHash(),id:e.getSqueakHash(),user:e.getAuthor()})})):"Squeaks&Replies"===i?re.map((function(e){return c.a.createElement(s.a,{squeak:e,key:e.getSqueakHash(),id:e.getSqueakHash(),user:e.getAuthor()})})):null,re.length>0&&c.a.createElement(c.a.Fragment,null,"loading"==me?c.a.createElement(o.a,null):c.a.createElement("div",{onClick:function(){return function(){var a;null==(a=re)||0===a.length||a.slice(-1)[0];se(Object(f.f)({profilePubkey:e.match.params.username,limit:10,lastSqueak:ie}))}()},className:"squeak-btn-side squeak-btn-active"},"Load more"))),c.a.createElement("div",{onClick:function(){return pe()},style:{display:x?"block":"none"},className:"modal-edit"},c.a.createElement("div",{onClick:function(e){return be(e)},className:"modal-content"},c.a.createElement("div",{className:"modal-header"},c.a.createElement("div",{className:"modal-closeIcon"},c.a.createElement("div",{onClick:function(){return pe()},className:"modal-closeIcon-wrap"},c.a.createElement(r.d,null))),c.a.createElement("p",{className:"modal-title"},"'Edit Profile'"),c.a.createElement("div",{className:"save-modal-wrapper"},c.a.createElement("div",{onClick:function(){se(Object(p.m)({profileId:oe.getProfileId()})),Y(!0),pe()},className:"save-modal-btn"},"Clear Image")),c.a.createElement("div",{className:"save-modal-wrapper"},c.a.createElement("div",{onClick:function(){oe.getProfileId();se(Object(p.t)({profileId:oe.getProfileId(),profileName:O})),Y(!0),pe()},className:"save-modal-btn"},"Save"))),c.a.createElement("div",{className:"modal-body"},c.a.createElement("div",{className:"modal-banner"}),c.a.createElement("div",{className:"modal-profile-pic"},c.a.createElement("div",{className:"modal-back-pic"},c.a.createElement("img",{src:oe?"".concat(Object(m.a)(oe)):null,alt:"profile"}),c.a.createElement("div",null,c.a.createElement(r.x,null),c.a.createElement("input",{onChange:function(){return function(){var e=document.getElementById("avatar").files[0];ke(e)}()},title:" ",id:"avatar",style:{opacity:"0"},type:"file"})))),oe?c.a.createElement("form",{className:"edit-form"},c.a.createElement("div",{className:"edit-input-wrap"},c.a.createElement("div",{className:"edit-input-content"},c.a.createElement("label",null,"Name"),c.a.createElement("input",{defaultValue:oe.getProfileName(),onChange:function(e){return j(e.target.value)},type:"text",name:"name",className:"edit-input"})))):c.a.createElement("form",{className:"create-form"},c.a.createElement("div",{className:"create-input-wrap"},c.a.createElement("div",{className:"create-input-content"},c.a.createElement("label",null,"Name"),c.a.createElement("input",{defaultValue:"",onChange:function(e){return j(e.target.value)},type:"text",name:"name",className:"edit-input"}))))))),c.a.createElement("div",{onClick:function(){return fe()},style:{display:B?"block":"none"},className:"modal-edit"},c.a.createElement("div",{onClick:function(e){return be(e)},className:"modal-content"},c.a.createElement("div",{className:"modal-header"},c.a.createElement("div",{className:"modal-closeIcon"},c.a.createElement("div",{onClick:function(){return fe()},className:"modal-closeIcon-wrap"},c.a.createElement(r.d,null))),c.a.createElement("p",{className:"modal-title"},"'Delete Profile'"),c.a.createElement("div",{className:"save-modal-wrapper"},c.a.createElement("div",{onClick:function(){var e={profileId:oe.getProfileId()};console.log("Delete user here"),se(Object(p.p)(e)),fe()},className:"save-modal-btn"},"Delete"))))),c.a.createElement("div",{onClick:function(){return Ee()},style:{display:A?"block":"none"},className:"modal-edit"},c.a.createElement("div",{onClick:function(e){return be(e)},className:"modal-content"},c.a.createElement("div",{className:"modal-header"},c.a.createElement("div",{className:"modal-closeIcon"},c.a.createElement("div",{onClick:function(){return Ee()},className:"modal-closeIcon-wrap"},c.a.createElement(r.d,null))),c.a.createElement("p",{className:"modal-title"},"'Export Private Key'"),c.a.createElement("div",{className:"save-modal-wrapper"},c.a.createElement("div",{onClick:function(){var e={profileId:oe.getProfileId()};se(Object(p.g)(e)).then(u.d).then((function(e){console.log(e),S(e)}))},className:"save-modal-btn"},"Export"))),c.a.createElement("div",{className:"modal-body"},c.a.createElement("form",{className:"edit-form"},c.a.createElement("div",{className:"edit-input-wrap"},c.a.createElement("div",{className:"edit-input-content"},c.a.createElement("label",null,"Private Key"),c.a.createElement("input",{defaultValue:h,readOnly:!0,type:"text",name:"name",className:"edit-input"}))))))),c.a.createElement("div",{onClick:function(){return ve()},style:{display:V?"block":"none"},className:"modal-edit"},c.a.createElement("div",{onClick:function(e){return be(e)},className:"modal-content"},c.a.createElement("div",{className:"modal-header no-b-border"},c.a.createElement("div",{className:"modal-closeIcon"},c.a.createElement("div",{onClick:function(){return pe()},className:"modal-closeIcon-wrap"},c.a.createElement(r.d,null))),c.a.createElement("p",{className:"modal-title"},null)),c.a.createElement("div",{className:"modal-body"},c.a.createElement("div",{className:"explore-nav-menu"},c.a.createElement("div",{onClick:function(){return ee("Sats Spent")},className:"Sats Spent"==_?"explore-nav-item activeTab":"explore-nav-item"},"Sats Spent"),c.a.createElement("div",{onClick:function(){return ee("Sats Earned")},className:"Sats Earned"==_?"explore-nav-item activeTab":"explore-nav-item"},"Sats Earned")),c.a.createElement("div",{className:"modal-scroll"})))),c.a.createElement("div",{onClick:function(){return Ne()},style:{display:G?"block":"none"},className:"modal-edit"},c.a.createElement("div",{onClick:function(e){return be(e)},className:"modal-content"},c.a.createElement("div",{className:"modal-header"},c.a.createElement("div",{className:"modal-closeIcon"},c.a.createElement("div",{onClick:function(){return Ne()},className:"modal-closeIcon-wrap"},c.a.createElement(r.d,null))),c.a.createElement("p",{className:"modal-title"},"Add Contact Profile"),c.a.createElement("div",{className:"save-modal-wrapper"},c.a.createElement("div",{onClick:function(){se(Object(p.n)({pubkey:ce,profileName:O})).then((function(){se(Object(p.e)(e.match.params.username))})),Ne()},className:"save-modal-btn"},"Submit"))),c.a.createElement("div",{className:"modal-body"},c.a.createElement("form",{className:"edit-form"},c.a.createElement("div",{className:"edit-input-wrap"},c.a.createElement("div",{className:"edit-input-content"},c.a.createElement("label",null,"Profile Name"),c.a.createElement("input",{defaultValue:"",onChange:function(e){return j(e.target.value)},type:"text",name:"name",className:"edit-input"}))),c.a.createElement("div",{className:"edit-input-wrap"},c.a.createElement("div",{className:"edit-input-content"},c.a.createElement("label",null,"Public Key"),c.a.createElement("input",{defaultValue:ce,readOnly:!0,type:"text",name:"name",className:"edit-input"})))))))))}))}}]);
+//# sourceMappingURL=5.9ca633c2.chunk.js.map
\ No newline at end of file
diff --git a/squeaknode/admin/webapp/static/build/static/js/5.9ca633c2.chunk.js.map b/squeaknode/admin/webapp/static/build/static/js/5.9ca633c2.chunk.js.map
new file mode 100644
index 00000000..5d0795cf
--- /dev/null
+++ b/squeaknode/admin/webapp/static/build/static/js/5.9ca633c2.chunk.js.map
@@ -0,0 +1 @@
+{"version":3,"sources":["components/Profile/index.js"],"names":["withRouter","props","useState","activeTab","setActiveTab","moreMenu","setMoreMenu","editName","setName","privateKey","setPrivateKey","editModalOpen","setEditModalOpen","deleteModalOpen","setDeleteModalOpen","exportModalOpen","setExportModalOpen","spendingModalOpen","setSpendingModalOpen","createModalOpen","setCreateModalOpen","setSaved","tab","setTab","styleBody","setStyleBody","userParam","match","params","username","profileSqueaks","useSelector","selectProfileSqueaks","lastUserSqueak","selectLastProfileSqueak","profileSqueaksStatus","selectProfileSqueaksStatus","user","selectCurrentProfile","dispatch","useDispatch","useEffect","window","scrollTo","fetchProfile","reloadSqueaks","isInitialMount","useRef","current","document","getElementsByTagName","style","cssText","changeTab","toggleEditModal","param","type","getProfileName","setTimeout","toggleDeleteModal","toggleExportModal","toggleSpendingModal","toggleCreateModal","handleModalClick","e","stopPropagation","uploadAvatar","file","reader","FileReader","addEventListener","imageBase64Stripped","result","split","uploadAvatarAsBase64","readAsDataURL","imageBase64","setProfileImage","profileId","getProfileId","clearProfileSqueaks","fetchProfileSqueaks","profilePubkey","limit","lastSqueak","openMore","className","onClick","history","back","alt","src","getProfileImageSrcString","id","display","top","getElementById","getBoundingClientRect","left","height","handleMenuClick","getHasPrivateKey","getFollowing","console","log","setUnfollowProfile","unfollowUser","setFollowProfile","followUser","key","map","t","getReplyTo","squeak","getSqueakHash","getAuthor","length","squeakLst","slice","getMoreSqueaks","setClearProfileImage","setRenameProfile","profileName","onChange","files","changeAvatar","title","opacity","defaultValue","target","value","name","values","setDeleteProfile","getProfilePrivateKey","then","unwrapResult","readOnly","setCreateContactProfile","pubkey"],"mappings":"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","file":"static/js/5.9ca633c2.chunk.js","sourcesContent":["import React , { useEffect, useState, useContext, useRef} from 'react'\r\nimport './style.scss'\r\nimport { ICON_ARROWBACK, ICON_MARKDOWN, ICON_DATE, ICON_CLOSE, ICON_UPLOAD, ICON_NEWMSG, ICON_SETTINGS, ICON_DARK } from '../../Icons'\r\nimport { withRouter, Link } from 'react-router-dom'\r\nimport { getProfileImageSrcString } from '../../squeakimages/images';\r\nimport Loader from '../Loader'\r\nimport moment from 'moment'\r\nimport SqueakCard from '../SqueakCard'\r\nimport {API_URL} from '../../config'\r\n\r\nimport { unwrapResult } from '@reduxjs/toolkit'\r\nimport { useSelector } from 'react-redux'\r\nimport { useDispatch } from 'react-redux'\r\n\r\nimport {\r\n fetchProfile,\r\n setFollowProfile,\r\n setUnfollowProfile,\r\n selectCurrentProfile,\r\n setDeleteProfile,\r\n setRenameProfile,\r\n setCreateContactProfile,\r\n setProfileImage,\r\n setClearProfileImage,\r\n getProfilePrivateKey,\r\n} from '../../features/profiles/profilesSlice'\r\nimport {\r\n fetchProfileSqueaks,\r\n selectProfileSqueaks,\r\n selectLastProfileSqueak,\r\n selectProfileSqueaksStatus,\r\n clearProfileSqueaks,\r\n} from '../../features/squeaks/squeaksSlice'\r\n\r\n\r\nconst Profile = (props) => {\r\n const [activeTab, setActiveTab] = useState('Squeaks')\r\n const [moreMenu, setMoreMenu] = useState(false)\r\n const [editName, setName] = useState('')\r\n const [privateKey, setPrivateKey] = useState('')\r\n const [editModalOpen, setEditModalOpen] = useState(false)\r\n const [deleteModalOpen, setDeleteModalOpen] = useState(false)\r\n const [exportModalOpen, setExportModalOpen] = useState(false)\r\n const [spendingModalOpen, setSpendingModalOpen] = useState(false)\r\n const [createModalOpen, setCreateModalOpen] = useState(false)\r\n const [saved, setSaved] = useState(false)\r\n const [tab, setTab] = useState('Sats Spent')\r\n const [styleBody, setStyleBody] = useState(false)\r\n const userParam = props.match.params.username\r\n\r\n const profileSqueaks = useSelector(selectProfileSqueaks);\r\n const lastUserSqueak = useSelector(selectLastProfileSqueak);\r\n const profileSqueaksStatus = useSelector(selectProfileSqueaksStatus);\r\n // const privateKey = 'TODO';\r\n\r\n const user = useSelector(selectCurrentProfile);\r\n const dispatch = useDispatch();\r\n\r\n\r\n\r\n useEffect(() => {\r\n window.scrollTo(0, 0)\r\n dispatch(fetchProfile(props.match.params.username));\r\n reloadSqueaks();\r\n //preventing edit modal from apprearing after clicking a user on memOpen\r\n setEditModalOpen(false)\r\n setName('')\r\n }, [props.match.params.username])\r\n\r\n const isInitialMount = useRef(true);\r\n useEffect(() => {\r\n if (isInitialMount.current){ isInitialMount.current = false }\r\n else {\r\n document.getElementsByTagName(\"body\")[0].style.cssText = styleBody && \"overflow-y: hidden; margin-right: 17px\"\r\n }\r\n }, [styleBody])\r\n\r\n useEffect( () => () => document.getElementsByTagName(\"body\")[0].style.cssText = \"\", [] )\r\n\r\n const changeTab = (tab) => {\r\n setActiveTab(tab)\r\n }\r\n\r\n const editProfile = () => {\r\n let values = {\r\n profileId: user.getProfileId(),\r\n name: editName,\r\n }\r\n dispatch(setRenameProfile({\r\n profileId: user.getProfileId(),\r\n profileName: editName,\r\n }));\r\n // TODO: chain action to update profile squeaks with the new name.\r\n setSaved(true)\r\n toggleEditModal()\r\n }\r\n\r\n const deleteProfile = () => {\r\n let values = {\r\n profileId: user.getProfileId(),\r\n }\r\n console.log('Delete user here');\r\n dispatch(setDeleteProfile(values));\r\n toggleDeleteModal();\r\n }\r\n\r\n\r\n const exportPrivateKey = () => {\r\n let values = {\r\n profileId: user.getProfileId(),\r\n }\r\n dispatch(getProfilePrivateKey(values))\r\n .then(unwrapResult)\r\n .then((privateKey) =>{\r\n console.log(privateKey);\r\n setPrivateKey(privateKey);\r\n });\r\n }\r\n\r\n const createContactProfile = () => {\r\n dispatch(setCreateContactProfile({\r\n pubkey: userParam,\r\n profileName: editName,\r\n }))\r\n .then(() => {\r\n dispatch(fetchProfile(props.match.params.username));\r\n });\r\n toggleCreateModal();\r\n }\r\n\r\n const toggleEditModal = (param, type) => {\r\n setStyleBody(!styleBody)\r\n setSaved(false)\r\n setName(user.getProfileName())\r\n setTimeout(()=>{ setEditModalOpen(!editModalOpen) },20)\r\n }\r\n\r\n const toggleDeleteModal = () => {\r\n setStyleBody(!styleBody)\r\n setSaved(false)\r\n setTimeout(()=>{ setDeleteModalOpen(!deleteModalOpen) },20)\r\n }\r\n\r\n const toggleExportModal = () => {\r\n setStyleBody(!styleBody)\r\n setSaved(false)\r\n setTimeout(()=>{ setExportModalOpen(!exportModalOpen) },20)\r\n }\r\n\r\n const toggleSpendingModal = (param, type) => {\r\n setStyleBody(!styleBody)\r\n if(type){setTab(type)}\r\n if(type){setTab(type)}\r\n setTimeout(()=>{ setSpendingModalOpen(!spendingModalOpen) },20)\r\n }\r\n\r\n const toggleCreateModal = (param, type) => {\r\n setStyleBody(!styleBody)\r\n setSaved(false)\r\n setTimeout(()=>{ setCreateModalOpen(!createModalOpen) },20)\r\n }\r\n\r\n const handleModalClick = (e) => {\r\n e.stopPropagation()\r\n }\r\n\r\n const followUser = (e,id) => {\r\n e.stopPropagation()\r\n dispatch(setFollowProfile(id));\r\n }\r\n\r\n const unfollowUser = (e,id) => {\r\n console.log(e);\r\n e.stopPropagation()\r\n dispatch(setUnfollowProfile(id));\r\n }\r\n\r\n const changeAvatar = () => {\r\n let file = document.getElementById('avatar').files[0];\r\n uploadAvatar(file);\r\n }\r\n\r\n const clearAvatar = () => {\r\n dispatch(setClearProfileImage({\r\n profileId: user.getProfileId(),\r\n }));\r\n setSaved(true)\r\n toggleEditModal()\r\n }\r\n\r\n const uploadAvatar = (file) => {\r\n if (file == null)\r\n return;\r\n const reader = new FileReader();\r\n reader.addEventListener('load', () => {\r\n // convert image file to base64 string\r\n // preview.src = reader.result;\r\n const imageBase64Stripped = reader.result.split(',')[1];\r\n uploadAvatarAsBase64(imageBase64Stripped);\r\n }, false);\r\n if (file) {\r\n reader.readAsDataURL(file);\r\n }\r\n };\r\n\r\n const uploadAvatarAsBase64 = (imageBase64) => {\r\n dispatch(setProfileImage({\r\n profileId: user.getProfileId(),\r\n imageBase64: imageBase64,\r\n }));\r\n setSaved(true)\r\n toggleEditModal()\r\n };\r\n\r\n const getLastSqueak = (squeakLst) => {\r\n if (squeakLst == null) {\r\n return null;\r\n } if (squeakLst.length === 0) {\r\n return null;\r\n }\r\n return squeakLst.slice(-1)[0];\r\n };\r\n\r\n const getMoreSqueaks = () => {\r\n let lastSqueak = getLastSqueak(profileSqueaks);\r\n dispatch(fetchProfileSqueaks({\r\n profilePubkey: props.match.params.username,\r\n limit: 10,\r\n lastSqueak: lastUserSqueak,\r\n }));\r\n }\r\n\r\n const reloadSqueaks = () => {\r\n dispatch(clearProfileSqueaks());\r\n dispatch(fetchProfileSqueaks({\r\n profilePubkey: props.match.params.username,\r\n limit: 10,\r\n lastSqueak: null,\r\n }));\r\n }\r\n\r\n const openMore = () => { setMoreMenu(!moreMenu) }\r\n\r\n const handleMenuClick = (e) => { e.stopPropagation() }\r\n\r\n\r\n return(\r\n \r\n
\r\n
\r\n
\r\n
\r\n
window.history.back()} className=\"header-back-wrapper\">\r\n \r\n
\r\n
\r\n
\r\n
\r\n {userParam}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n {user &&\r\n \r\n }\r\n\r\n {user &&\r\n
\r\n user.getFollowing() ?\r\n unfollowUser(e,user.getProfileId()) :\r\n followUser(e,user.getProfileId())\r\n }\r\n className={user.getFollowing() ? 'unfollow-switch profile-edit-button' : 'profile-edit-button'}>\r\n { user.getFollowing() ? 'Following' : 'Follow'} \r\n
\r\n }\r\n\r\n {!user &&\r\n
toggleCreateModal('create')}\r\n className='profiles-create-button'>\r\n Add Contact Profile \r\n
\r\n }\r\n
\r\n
\r\n
{user ? user.getProfileName() : ''}
\r\n
@{userParam}
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {/* TODO: Implement sats spent */}\r\n
toggleSpendingModal('members','Sats Spent')}>\r\n
0
\r\n
sats spent
\r\n
\r\n {/* TODO: Implement sats eaned */}\r\n
toggleSpendingModal('members', 'Sats Earned')}>\r\n
0
\r\n
sats earned
\r\n
\r\n
\r\n
\r\n
\r\n
changeTab('Squeaks')} className={activeTab ==='Squeaks' ? `profile-nav-item activeTab` : `profile-nav-item`}>\r\n Squeaks\r\n
\r\n
changeTab('Squeaks&Replies')} className={activeTab ==='Squeaks&Replies' ? `profile-nav-item activeTab` : `profile-nav-item`}>\r\n Squeaks & replies\r\n
\r\n
changeTab('Media')} className={activeTab ==='Media' ? `profile-nav-item activeTab` : `profile-nav-item`}>\r\n Media\r\n
\r\n
changeTab('Likes')} className={activeTab ==='Likes' ? `profile-nav-item activeTab` : `profile-nav-item`}>\r\n Likes\r\n
\r\n
\r\n {activeTab === 'Squeaks' ?\r\n profileSqueaks.map(t=>{\r\n if(!t.getReplyTo())\r\n return
\r\n }) : activeTab === 'Squeaks&Replies' ?\r\n profileSqueaks.map(t=>{\r\n return
\r\n }) :\r\n activeTab === 'Likes' ?\r\n null: activeTab === 'Media' ?\r\n null: null}\r\n {/* TODO: fix get loading state by doing this: https://medium.com/stashaway-engineering/react-redux-tips-better-way-to-handle-loading-flags-in-your-reducers-afda42a804c6 */}\r\n {profileSqueaks.length > 0 &&\r\n <>\r\n {profileSqueaksStatus == 'loading' ?\r\n
:\r\n
getMoreSqueaks()} className='squeak-btn-side squeak-btn-active'>\r\n Load more\r\n
}\r\n >\r\n }\r\n\r\n
\r\n\r\n {/* Modal for edit profile */}\r\n
toggleEditModal()} style={{display: editModalOpen ? 'block' : 'none'}} className=\"modal-edit\">\r\n
handleModalClick(e)} className=\"modal-content\">\r\n
\r\n
\r\n
toggleEditModal()} className=\"modal-closeIcon-wrap\">\r\n \r\n
\r\n
\r\n
'Edit Profile'
\r\n
\r\n
\r\n Clear Image\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n changeAvatar()} title=\" \" id=\"avatar\" style={{opacity:'0'}} type=\"file\"/>\r\n
\r\n
\r\n
\r\n {user ?\r\n
:\r\n
\r\n\r\n }\r\n
\r\n
\r\n
\r\n\r\n\r\n {/* Modal for delete profile */}\r\n
toggleDeleteModal()} style={{display: deleteModalOpen ? 'block' : 'none'}} className=\"modal-edit\">\r\n
handleModalClick(e)} className=\"modal-content\">\r\n
\r\n
\r\n
toggleDeleteModal()} className=\"modal-closeIcon-wrap\">\r\n \r\n
\r\n
\r\n
'Delete Profile'
\r\n
\r\n
\r\n Delete\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n {/* Modal for export profile */}\r\n
toggleExportModal()} style={{display: exportModalOpen ? 'block' : 'none'}} className=\"modal-edit\">\r\n
handleModalClick(e)} className=\"modal-content\">\r\n
\r\n
\r\n
toggleExportModal()} className=\"modal-closeIcon-wrap\">\r\n \r\n
\r\n
\r\n
'Export Private Key'
\r\n
\r\n
\r\n Export\r\n
\r\n
\r\n
\r\n\r\n
\r\n\r\n
\r\n
\r\n\r\n\r\n {/* Modal for sats spent and earned */}\r\n
toggleSpendingModal()} style={{display: spendingModalOpen ? 'block' : 'none'}} className=\"modal-edit\">\r\n
handleModalClick(e)} className=\"modal-content\">\r\n
\r\n
\r\n
toggleEditModal()} className=\"modal-closeIcon-wrap\">\r\n \r\n
\r\n
\r\n
{null}
\r\n
\r\n
\r\n
\r\n
setTab('Sats Spent')} className={tab =='Sats Spent' ? `explore-nav-item activeTab` : `explore-nav-item`}>\r\n Sats Spent\r\n
\r\n
setTab('Sats Earned')} className={tab =='Sats Earned' ? `explore-nav-item activeTab` : `explore-nav-item`}>\r\n Sats Earned\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n {/* Modal for create signing profile */}\r\n
toggleCreateModal()} style={{display: createModalOpen ? 'block' : 'none'}} className=\"modal-edit\">\r\n
handleModalClick(e)} className=\"modal-content\">\r\n
\r\n
\r\n
toggleCreateModal()} className=\"modal-closeIcon-wrap\">\r\n \r\n
\r\n
\r\n
Add Contact Profile
\r\n\r\n
\r\n
\r\n Submit\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n )\r\n }\r\n\r\n export default withRouter(Profile)\r\n"],"sourceRoot":""}
\ No newline at end of file
diff --git a/squeaknode/admin/webapp/static/build/static/js/runtime-main.a0b0df69.js b/squeaknode/admin/webapp/static/build/static/js/runtime-main.0a9c59e0.js
similarity index 65%
rename from squeaknode/admin/webapp/static/build/static/js/runtime-main.a0b0df69.js
rename to squeaknode/admin/webapp/static/build/static/js/runtime-main.0a9c59e0.js
index 96e05029..e0fedb5a 100644
--- a/squeaknode/admin/webapp/static/build/static/js/runtime-main.a0b0df69.js
+++ b/squeaknode/admin/webapp/static/build/static/js/runtime-main.0a9c59e0.js
@@ -1,2 +1,2 @@
-!function(e){function t(t){for(var n,o,i=t[0],c=t[1],l=t[2],f=0,d=[];f