-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path.eslintcache
1 lines (1 loc) · 634 KB
/
.eslintcache
1
[{"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/index.js":"1","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/App.js":"2","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/index.js":"3","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUserSessionAction.js":"4","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/service/skynet-api.js":"5","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/router/SnRouter.js":"6","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/theme/Theme.js":"7","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Navbar/Nav.js":"8","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Utils/SnLoader.js":"9","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Sidebar/Sidebar.js":"10","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnLoaderReducer.js":"11","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUserProfileReducer.js":"12","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUserProfileEpic.js":"13","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUserPreferencesReducer.js":"14","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAllPublishAppReducer.js":"15","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnSelectedHostedAppReducer.js":"16","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAllPublishAppEpic.js":"17","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnPublishAppReducer.js":"18","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnPublishAppEpic.js":"19","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnInstalledAppEpic.js":"20","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAppStatsReducer.js":"21","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAppStatsEpic.js":"22","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAppCommentsReducer.js":"23","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnShowHostingLinksReducer.js":"24","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnInstalledAppReducer.js":"25","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUploadListReducer.js":"26","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUserPreferencesEpic.js":"27","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAppCommentsEpic.js":"28","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnStorageEpic.js":"29","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnDomainReducer.js":"30","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUserSessionReducer.js":"31","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnDomainEpic.js":"32","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnStorageReducer.js":"33","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/SnActionConstants.js":"34","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/service/SnIndexedDB.js":"35","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Navbar/LandingPageNavbar.js":"36","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Navbar/Navbar.js":"37","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/utils/SnConstants.js":"38","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/Apps.js":"39","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/AppStore.js":"40","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/OtherPages/NoApps.js":"41","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/InstalledApps.js":"42","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/SubmitApp/EditPublishApp.js":"43","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/SubmitNewSite.js":"44","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/SubmitApp/SubmitApp.js":"45","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/OtherPages/UnderDevelopment.js":"46","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/DeploySite.js":"47","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/StorageGateway.js":"48","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/ErrorPage/Error.js":"49","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Domain/Domains.js":"50","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/AddNewSite.js":"51","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Domain/NoDomain.js":"52","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/Hosting.js":"53","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/EditSite.js":"54","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppDetails/AppDetailsPage.js":"55","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Setting/Settings.js":"56","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/DescoverDev/DescoverDev.js":"57","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Auth/Login.js":"58","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/assets/jss/sidebar/SidebarStyle.js":"59","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnLoaderAction.js":"60","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUserProfileAction.js":"61","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnPublishAppAction.js":"62","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnInstalledAppAction.js":"63","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAllPublishAppAction.js":"64","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAppStatsAction.js":"65","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAppCommentsAction.js":"66","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnStorageAction.js":"67","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUserPreferencesAction.js":"68","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/service/SnSkappService.js":"69","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnMyFollowerAction.js":"70","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Utils/SnDisclaimer.js":"71","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnMyFollowingAction.js":"72","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Setting/globalPrefrences.js":"73","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Setting/Profile.js":"74","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/DescoverDev/DevTable.js":"75","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/hooks/useWindowDimensions.js":"76","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppDetails/AppInfo.js":"77","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppDetails/AppDetailsHeader.js":"78","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/utils/SnNewObject.js":"79","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUploadListAction.js":"80","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/service/SnFormikUtilService.js":"81","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Utils/SnFormikControlls.js":"82","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Modals/SnInfoModal.js":"83","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/uploadUtil/SnUpload.js":"84","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/AddNewSiteStyles.js":"85","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/Switch.js":"86","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/service/SnSkynet.js":"87","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/service/SnSkyMQEventEmitter.js":"88","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/DescoverDev/UserCard.js":"89","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/Spiner.js":"90","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppDetails/AppComments.js":"91","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/service/SnEncryption.js":"92","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppDetails/CommentForm.js":"93","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppDetails/AppComment.js":"94","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/uploadUtil/UploadFile.js":"95","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/utils/SnUtility.js":"96","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/uploadUtil/LoadingSpinner.js":"97","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/index.js":"98","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Deco7.js":"99","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Deco6.js":"100","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Deco8.js":"101","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Deco4.js":"102","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Deco5.js":"103","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Deco3.js":"104","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Deco2.js":"105","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Deco1.js":"106","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Folder.js":"107","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/DownArrow.js":"108","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Built.js":"109","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/FooterCube.js":"110","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/FooterOrb.js":"111","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Copy.js":"112","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/FileError.js":"113","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Loading.js":"114","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/FileCheck.js":"115","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/File.js":"116","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Skynet.js":"117","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/LogoSolid.js":"118","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/SmallOrb.js":"119","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Pyramid.js":"120","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Cylinder.js":"121","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Arrow.js":"122","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Discord.js":"123","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Twitter.js":"124","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/DoubleRight.js":"125","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Github.js":"126","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Download.js":"127","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Logo.js":"128","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/AddNewSiteBtn.js":"129","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/HostingItem.js":"130","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/SubmitBtn.js":"131","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/ListFilter.js":"132","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/UtilitiesItem.js":"133","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Domain/AddNewDomain.js":"134","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnDomainAction.js":"135","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Domain/AddNewDomainTXT.js":"136","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Domain/DomainTable.js":"137","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/assets/jss/no-apps/NoAppsStyle.js":"138","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/AddEditStorage.js":"139","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/StorageTable.js":"140","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/hooks/useLoadHostedAppFromUrl.js":"141","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/hooks/useShowHostingLinks.js":"142","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/assets/jss/error-page/ErrorPageStyle.js":"143","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/assets/jss/app-details/SubmitAppStyles.js":"144","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/AppsList.js":"145","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/SelectItem.js":"146","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/AppCard.js":"147","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAggregatedAppStatsAction.js":"148","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/assets/jss/apps/AppListStyle.js":"149","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/service/dac/userprofile-api.js":"150","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Footer/Footer.js":"151","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/SelectedAppsHeader.js":"152","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/slickarrows/SlickNextArrow.js":"153","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/slickarrows/SlickPrevArrow.js":"154","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/CustomPagination.js":"155","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnSelectedHostedAppAction.js":"156","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/assets/jss/hosting/AddNewSiteBtnStyle.js":"157","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/assets/jss/hosting/HostingItemStyle.js":"158","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnShowHostingLinksAction.js":"159","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/ShareApp/ShareApp.js":"160","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/assets/jss/apps/AppCardStyle.js":"161"},{"size":311,"mtime":1618700054713,"results":"162","hashOfConfig":"163"},{"size":1446,"mtime":1621206745399,"results":"164","hashOfConfig":"163"},{"size":3835,"mtime":1620877102969,"results":"165","hashOfConfig":"163"},{"size":252,"mtime":1619927265252,"results":"166","hashOfConfig":"163"},{"size":7872,"mtime":1621213129106,"results":"167","hashOfConfig":"163"},{"size":3691,"mtime":1620735456579,"results":"168","hashOfConfig":"163"},{"size":400,"mtime":1620735456584,"results":"169","hashOfConfig":"163"},{"size":774,"mtime":1620735456562,"results":"170","hashOfConfig":"163"},{"size":603,"mtime":1619926927160,"results":"171","hashOfConfig":"163"},{"size":15379,"mtime":1621060586574,"results":"172","hashOfConfig":"163"},{"size":239,"mtime":1618700054718,"results":"173","hashOfConfig":"163"},{"size":500,"mtime":1618700054729,"results":"174","hashOfConfig":"163"},{"size":849,"mtime":1619927265251,"results":"175","hashOfConfig":"163"},{"size":508,"mtime":1619927265250,"results":"176","hashOfConfig":"163"},{"size":328,"mtime":1618700054716,"results":"177","hashOfConfig":"163"},{"size":449,"mtime":1618700054725,"results":"178","hashOfConfig":"163"},{"size":1212,"mtime":1619926927162,"results":"179","hashOfConfig":"163"},{"size":323,"mtime":1618700054721,"results":"180","hashOfConfig":"163"},{"size":2026,"mtime":1618700054721,"results":"181","hashOfConfig":"163"},{"size":2809,"mtime":1619926927163,"results":"182","hashOfConfig":"163"},{"size":223,"mtime":1618700054717,"results":"183","hashOfConfig":"163"},{"size":1571,"mtime":1618700054717,"results":"184","hashOfConfig":"163"},{"size":337,"mtime":1618700054716,"results":"185","hashOfConfig":"163"},{"size":264,"mtime":1618700054726,"results":"186","hashOfConfig":"163"},{"size":504,"mtime":1619926927163,"results":"187","hashOfConfig":"163"},{"size":270,"mtime":1618700054727,"results":"188","hashOfConfig":"163"},{"size":582,"mtime":1619927265250,"results":"189","hashOfConfig":"163"},{"size":1813,"mtime":1618700054716,"results":"190","hashOfConfig":"163"},{"size":2838,"mtime":1620877102967,"results":"191","hashOfConfig":"163"},{"size":287,"mtime":1620877102966,"results":"192","hashOfConfig":"163"},{"size":289,"mtime":1619927265252,"results":"193","hashOfConfig":"163"},{"size":2821,"mtime":1620877102965,"results":"194","hashOfConfig":"163"},{"size":288,"mtime":1620877102968,"results":"195","hashOfConfig":"163"},{"size":6331,"mtime":1620877102964,"results":"196","hashOfConfig":"163"},{"size":6801,"mtime":1618700054732,"results":"197","hashOfConfig":"163"},{"size":14082,"mtime":1620735456562,"results":"198","hashOfConfig":"163"},{"size":19336,"mtime":1620735456563,"results":"199","hashOfConfig":"163"},{"size":6504,"mtime":1620735456586,"results":"200","hashOfConfig":"163"},{"size":8726,"mtime":1620735456543,"results":"201","hashOfConfig":"163"},{"size":18991,"mtime":1621320045826,"results":"202","hashOfConfig":"163"},{"size":2014,"mtime":1620735456564,"results":"203","hashOfConfig":"163"},{"size":9619,"mtime":1620735456544,"results":"204","hashOfConfig":"163"},{"size":41446,"mtime":1620735456569,"results":"205","hashOfConfig":"163"},{"size":6180,"mtime":1618700054698,"results":"206","hashOfConfig":"163"},{"size":42611,"mtime":1620735456570,"results":"207","hashOfConfig":"163"},{"size":1092,"mtime":1620539478061,"results":"208","hashOfConfig":"163"},{"size":15284,"mtime":1620735456557,"results":"209","hashOfConfig":"163"},{"size":10583,"mtime":1620877102961,"results":"210","hashOfConfig":"163"},{"size":1133,"mtime":1620735456552,"results":"211","hashOfConfig":"163"},{"size":11730,"mtime":1621197551509,"results":"212","hashOfConfig":"163"},{"size":25695,"mtime":1621197553681,"results":"213","hashOfConfig":"163"},{"size":1389,"mtime":1620735456552,"results":"214","hashOfConfig":"163"},{"size":14236,"mtime":1620735456559,"results":"215","hashOfConfig":"163"},{"size":28106,"mtime":1621197556170,"results":"216","hashOfConfig":"163"},{"size":1244,"mtime":1620877710211,"results":"217","hashOfConfig":"163"},{"size":3230,"mtime":1620539478063,"results":"218","hashOfConfig":"163"},{"size":7843,"mtime":1621315391464,"results":"219","hashOfConfig":"163"},{"size":6273,"mtime":1621206791968,"results":"220","hashOfConfig":"163"},{"size":1998,"mtime":1620735456535,"results":"221","hashOfConfig":"163"},{"size":188,"mtime":1618700054717,"results":"222","hashOfConfig":"163"},{"size":1224,"mtime":1619927265251,"results":"223","hashOfConfig":"163"},{"size":496,"mtime":1618700054720,"results":"224","hashOfConfig":"163"},{"size":751,"mtime":1619926927162,"results":"225","hashOfConfig":"163"},{"size":410,"mtime":1619926927162,"results":"226","hashOfConfig":"163"},{"size":450,"mtime":1618700054716,"results":"227","hashOfConfig":"163"},{"size":485,"mtime":1618700054716,"results":"228","hashOfConfig":"163"},{"size":768,"mtime":1620877102967,"results":"229","hashOfConfig":"163"},{"size":1151,"mtime":1619927265250,"results":"230","hashOfConfig":"163"},{"size":45591,"mtime":1621318277796,"results":"231","hashOfConfig":"163"},{"size":429,"mtime":1618700054718,"results":"232","hashOfConfig":"163"},{"size":943,"mtime":1618700054707,"results":"233","hashOfConfig":"163"},{"size":438,"mtime":1618700054719,"results":"234","hashOfConfig":"163"},{"size":7930,"mtime":1620539478065,"results":"235","hashOfConfig":"163"},{"size":25459,"mtime":1620735456565,"results":"236","hashOfConfig":"163"},{"size":14045,"mtime":1621190885806,"results":"237","hashOfConfig":"163"},{"size":924,"mtime":1618700054712,"results":"238","hashOfConfig":"163"},{"size":8724,"mtime":1620877710213,"results":"239","hashOfConfig":"163"},{"size":9281,"mtime":1621218552873,"results":"240","hashOfConfig":"163"},{"size":611,"mtime":1620735456587,"results":"241","hashOfConfig":"163"},{"size":188,"mtime":1618700054726,"results":"242","hashOfConfig":"163"},{"size":402,"mtime":1618700054732,"results":"243","hashOfConfig":"163"},{"size":10929,"mtime":1620877102963,"results":"244","hashOfConfig":"163"},{"size":3415,"mtime":1619926927145,"results":"245","hashOfConfig":"163"},{"size":10751,"mtime":1620735456585,"results":"246","hashOfConfig":"163"},{"size":17126,"mtime":1620735456556,"results":"247","hashOfConfig":"163"},{"size":2164,"mtime":1618700054699,"results":"248","hashOfConfig":"163"},{"size":15632,"mtime":1621207575521,"results":"249","hashOfConfig":"163"},{"size":5089,"mtime":1619927265255,"results":"250","hashOfConfig":"163"},{"size":7295,"mtime":1620877710218,"results":"251","hashOfConfig":"163"},{"size":330,"mtime":1619926927136,"results":"252","hashOfConfig":"163"},{"size":1541,"mtime":1620877710209,"results":"253","hashOfConfig":"163"},{"size":11387,"mtime":1618700054731,"results":"254","hashOfConfig":"163"},{"size":3926,"mtime":1620877710213,"results":"255","hashOfConfig":"163"},{"size":3116,"mtime":1620877710208,"results":"256","hashOfConfig":"163"},{"size":2644,"mtime":1620735456585,"results":"257","hashOfConfig":"163"},{"size":4381,"mtime":1620735456587,"results":"258","hashOfConfig":"163"},{"size":223,"mtime":1618700054743,"results":"259","hashOfConfig":"163"},{"size":1298,"mtime":1618700054742,"results":"260","hashOfConfig":"163"},{"size":575,"mtime":1618700054737,"results":"261","hashOfConfig":"163"},{"size":699,"mtime":1618700054737,"results":"262","hashOfConfig":"163"},{"size":877,"mtime":1618700054737,"results":"263","hashOfConfig":"163"},{"size":874,"mtime":1618700054736,"results":"264","hashOfConfig":"163"},{"size":2011,"mtime":1618700054737,"results":"265","hashOfConfig":"163"},{"size":823,"mtime":1618700054736,"results":"266","hashOfConfig":"163"},{"size":788,"mtime":1618700054736,"results":"267","hashOfConfig":"163"},{"size":892,"mtime":1618700054736,"results":"268","hashOfConfig":"163"},{"size":411,"mtime":1618700054739,"results":"269","hashOfConfig":"163"},{"size":379,"mtime":1618700054738,"results":"270","hashOfConfig":"163"},{"size":9454,"mtime":1618700054735,"results":"271","hashOfConfig":"163"},{"size":621,"mtime":1618700054740,"results":"272","hashOfConfig":"163"},{"size":703,"mtime":1618700054740,"results":"273","hashOfConfig":"163"},{"size":411,"mtime":1618700054735,"results":"274","hashOfConfig":"163"},{"size":482,"mtime":1618700054739,"results":"275","hashOfConfig":"163"},{"size":379,"mtime":1618700054741,"results":"276","hashOfConfig":"163"},{"size":482,"mtime":1618700054739,"results":"277","hashOfConfig":"163"},{"size":460,"mtime":1618700054739,"results":"278","hashOfConfig":"163"},{"size":2438,"mtime":1618700054742,"results":"279","hashOfConfig":"163"},{"size":588,"mtime":1618700054741,"results":"280","hashOfConfig":"163"},{"size":584,"mtime":1618700054742,"results":"281","hashOfConfig":"163"},{"size":605,"mtime":1618700054741,"results":"282","hashOfConfig":"163"},{"size":637,"mtime":1618700054735,"results":"283","hashOfConfig":"163"},{"size":403,"mtime":1618700054735,"results":"284","hashOfConfig":"163"},{"size":1647,"mtime":1618700054738,"results":"285","hashOfConfig":"163"},{"size":1011,"mtime":1618700054742,"results":"286","hashOfConfig":"163"},{"size":507,"mtime":1618700054738,"results":"287","hashOfConfig":"163"},{"size":1153,"mtime":1618700054740,"results":"288","hashOfConfig":"163"},{"size":843,"mtime":1618700054739,"results":"289","hashOfConfig":"163"},{"size":645,"mtime":1618700054741,"results":"290","hashOfConfig":"163"},{"size":456,"mtime":1620735456555,"results":"291","hashOfConfig":"163"},{"size":4456,"mtime":1620735456559,"results":"292","hashOfConfig":"163"},{"size":1419,"mtime":1618700054676,"results":"293","hashOfConfig":"163"},{"size":6897,"mtime":1621320056081,"results":"294","hashOfConfig":"163"},{"size":9716,"mtime":1620735456546,"results":"295","hashOfConfig":"163"},{"size":6703,"mtime":1620735456549,"results":"296","hashOfConfig":"163"},{"size":754,"mtime":1620877102964,"results":"297","hashOfConfig":"163"},{"size":14749,"mtime":1621197560304,"results":"298","hashOfConfig":"163"},{"size":12552,"mtime":1620877102952,"results":"299","hashOfConfig":"163"},{"size":2034,"mtime":1620735456534,"results":"300","hashOfConfig":"163"},{"size":13350,"mtime":1620877102955,"results":"301","hashOfConfig":"163"},{"size":8873,"mtime":1620877102962,"results":"302","hashOfConfig":"163"},{"size":837,"mtime":1618700054712,"results":"303","hashOfConfig":"163"},{"size":430,"mtime":1618700054712,"results":"304","hashOfConfig":"163"},{"size":1430,"mtime":1620735456533,"results":"305","hashOfConfig":"163"},{"size":26126,"mtime":1620735456531,"results":"306","hashOfConfig":"163"},{"size":2350,"mtime":1620735456544,"results":"307","hashOfConfig":"163"},{"size":1657,"mtime":1618700054675,"results":"308","hashOfConfig":"163"},{"size":23336,"mtime":1621097895162,"results":"309","hashOfConfig":"163"},{"size":545,"mtime":1619927265249,"results":"310","hashOfConfig":"163"},{"size":195,"mtime":1618700054653,"results":"311","hashOfConfig":"163"},{"size":1809,"mtime":1619927265256,"results":"312","hashOfConfig":"163"},{"size":3212,"mtime":1620877102954,"results":"313","hashOfConfig":"163"},{"size":3471,"mtime":1618700054676,"results":"314","hashOfConfig":"163"},{"size":352,"mtime":1618700054711,"results":"315","hashOfConfig":"163"},{"size":345,"mtime":1618700054711,"results":"316","hashOfConfig":"163"},{"size":2478,"mtime":1618700054674,"results":"317","hashOfConfig":"163"},{"size":373,"mtime":1618700054725,"results":"318","hashOfConfig":"163"},{"size":867,"mtime":1620735456534,"results":"319","hashOfConfig":"163"},{"size":2933,"mtime":1619926927126,"results":"320","hashOfConfig":"163"},{"size":216,"mtime":1618700054726,"results":"321","hashOfConfig":"163"},{"size":5151,"mtime":1620735456567,"results":"322","hashOfConfig":"163"},{"size":6296,"mtime":1620735456533,"results":"323","hashOfConfig":"163"},{"filePath":"324","messages":"325","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},"7db664",{"filePath":"327","messages":"328","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"329","messages":"330","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"331","messages":"332","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"333","usedDeprecatedRules":"326"},{"filePath":"334","messages":"335","errorCount":0,"warningCount":7,"fixableErrorCount":0,"fixableWarningCount":0,"source":"336","usedDeprecatedRules":"326"},{"filePath":"337","messages":"338","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"339","usedDeprecatedRules":"326"},{"filePath":"340","messages":"341","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"342","usedDeprecatedRules":"326"},{"filePath":"343","messages":"344","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"345","messages":"346","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"347","messages":"348","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"349","usedDeprecatedRules":"326"},{"filePath":"350","messages":"351","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"352","usedDeprecatedRules":"326"},{"filePath":"353","messages":"354","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"355","usedDeprecatedRules":"326"},{"filePath":"356","messages":"357","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"358","messages":"359","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"360","usedDeprecatedRules":"326"},{"filePath":"361","messages":"362","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"363","usedDeprecatedRules":"326"},{"filePath":"364","messages":"365","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"366","usedDeprecatedRules":"326"},{"filePath":"367","messages":"368","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":1,"source":"369","usedDeprecatedRules":"326"},{"filePath":"370","messages":"371","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"372","usedDeprecatedRules":"326"},{"filePath":"373","messages":"374","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":2,"source":"375","usedDeprecatedRules":"326"},{"filePath":"376","messages":"377","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":3,"source":"378","usedDeprecatedRules":"326"},{"filePath":"379","messages":"380","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"381","usedDeprecatedRules":"326"},{"filePath":"382","messages":"383","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":1,"source":"384","usedDeprecatedRules":"326"},{"filePath":"385","messages":"386","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"387","usedDeprecatedRules":"326"},{"filePath":"388","messages":"389","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"390","usedDeprecatedRules":"326"},{"filePath":"391","messages":"392","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"393","usedDeprecatedRules":"326"},{"filePath":"394","messages":"395","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"396","usedDeprecatedRules":"326"},{"filePath":"397","messages":"398","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"399","messages":"400","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":2,"source":"401","usedDeprecatedRules":"326"},{"filePath":"402","messages":"403","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":1,"source":"404","usedDeprecatedRules":"326"},{"filePath":"405","messages":"406","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"407","usedDeprecatedRules":"326"},{"filePath":"408","messages":"409","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"410","usedDeprecatedRules":"326"},{"filePath":"411","messages":"412","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":1,"source":"413","usedDeprecatedRules":"326"},{"filePath":"414","messages":"415","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"416","usedDeprecatedRules":"326"},{"filePath":"417","messages":"418","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"419","messages":"420","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"421","messages":"422","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"423","usedDeprecatedRules":"326"},{"filePath":"424","messages":"425","errorCount":0,"warningCount":9,"fixableErrorCount":0,"fixableWarningCount":0,"source":"426","usedDeprecatedRules":"326"},{"filePath":"427","messages":"428","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"429","messages":"430","errorCount":0,"warningCount":9,"fixableErrorCount":0,"fixableWarningCount":0,"source":"431","usedDeprecatedRules":"326"},{"filePath":"432","messages":"433","errorCount":0,"warningCount":14,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"434","messages":"435","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"436","usedDeprecatedRules":"326"},{"filePath":"437","messages":"438","errorCount":0,"warningCount":12,"fixableErrorCount":0,"fixableWarningCount":0,"source":"439","usedDeprecatedRules":"326"},{"filePath":"440","messages":"441","errorCount":0,"warningCount":13,"fixableErrorCount":0,"fixableWarningCount":0,"source":"442","usedDeprecatedRules":"326"},{"filePath":"443","messages":"444","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"445","messages":"446","errorCount":0,"warningCount":18,"fixableErrorCount":0,"fixableWarningCount":0,"source":"447","usedDeprecatedRules":"326"},{"filePath":"448","messages":"449","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"450","messages":"451","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"452","usedDeprecatedRules":"326"},{"filePath":"453","messages":"454","errorCount":0,"warningCount":6,"fixableErrorCount":0,"fixableWarningCount":0,"source":"455","usedDeprecatedRules":"326"},{"filePath":"456","messages":"457","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"458","usedDeprecatedRules":"326"},{"filePath":"459","messages":"460","errorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"461","usedDeprecatedRules":"326"},{"filePath":"462","messages":"463","errorCount":0,"warningCount":17,"fixableErrorCount":0,"fixableWarningCount":0,"source":"464","usedDeprecatedRules":"326"},{"filePath":"465","messages":"466","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"467","usedDeprecatedRules":"326"},{"filePath":"468","messages":"469","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"470","usedDeprecatedRules":"326"},{"filePath":"471","messages":"472","errorCount":0,"warningCount":19,"fixableErrorCount":0,"fixableWarningCount":0,"source":"473","usedDeprecatedRules":"326"},{"filePath":"474","messages":"475","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"476","messages":"477","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"478","messages":"479","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"480","messages":"481","errorCount":0,"warningCount":13,"fixableErrorCount":0,"fixableWarningCount":0,"source":"482","usedDeprecatedRules":"326"},{"filePath":"483","messages":"484","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"485","messages":"486","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"487","messages":"488","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"489","usedDeprecatedRules":"326"},{"filePath":"490","messages":"491","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"492","usedDeprecatedRules":"326"},{"filePath":"493","messages":"494","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"495","messages":"496","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"497","messages":"498","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"499","messages":"500","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"501","messages":"502","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"503","messages":"504","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"505","usedDeprecatedRules":"326"},{"filePath":"506","messages":"507","errorCount":0,"warningCount":20,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"508","messages":"509","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"510","messages":"511","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"512","messages":"513","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"514","messages":"515","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"516","usedDeprecatedRules":"326"},{"filePath":"517","messages":"518","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"519","usedDeprecatedRules":"326"},{"filePath":"520","messages":"521","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"522","messages":"523","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"524","messages":"525","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"526","messages":"527","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"528","usedDeprecatedRules":"326"},{"filePath":"529","messages":"530","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"531","messages":"532","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"533","messages":"534","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"535","messages":"536","errorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"537","usedDeprecatedRules":"326"},{"filePath":"538","messages":"539","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"540","messages":"541","errorCount":0,"warningCount":11,"fixableErrorCount":0,"fixableWarningCount":0,"source":"542","usedDeprecatedRules":"326"},{"filePath":"543","messages":"544","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"545","messages":"546","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"547","messages":"548","errorCount":0,"warningCount":25,"fixableErrorCount":0,"fixableWarningCount":0,"source":"549","usedDeprecatedRules":"326"},{"filePath":"550","messages":"551","errorCount":0,"warningCount":8,"fixableErrorCount":0,"fixableWarningCount":0,"source":"552","usedDeprecatedRules":"326"},{"filePath":"553","messages":"554","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"555","messages":"556","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"557","messages":"558","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"559","messages":"560","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"561","usedDeprecatedRules":"326"},{"filePath":"562","messages":"563","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"564","messages":"565","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"566","messages":"567","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"568","messages":"569","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"570","usedDeprecatedRules":"326"},{"filePath":"571","messages":"572","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"573","messages":"574","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"575","messages":"576","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"577","messages":"578","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"579","messages":"580","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"581","messages":"582","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"583","messages":"584","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"585","messages":"586","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"587","messages":"588","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"589","messages":"590","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"591","messages":"592","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"593","messages":"594","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"595","messages":"596","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"597","messages":"598","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"599","messages":"600","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"601","messages":"602","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"603","messages":"604","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"605","messages":"606","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"607","messages":"608","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"609","messages":"610","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"611","messages":"612","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"613","messages":"614","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"615","messages":"616","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"617","messages":"618","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"619","messages":"620","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"621","messages":"622","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"623","messages":"624","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"625","messages":"626","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"627","messages":"628","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"629","messages":"630","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"631","messages":"632","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"633","messages":"634","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"635","messages":"636","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"637","messages":"638","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"639","usedDeprecatedRules":"326"},{"filePath":"640","messages":"641","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"642","messages":"643","errorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"644","messages":"645","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"646","messages":"647","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"648","usedDeprecatedRules":"326"},{"filePath":"649","messages":"650","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"651","messages":"652","errorCount":0,"warningCount":11,"fixableErrorCount":0,"fixableWarningCount":0,"source":"653","usedDeprecatedRules":"326"},{"filePath":"654","messages":"655","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"656","usedDeprecatedRules":"326"},{"filePath":"657","messages":"658","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"659","messages":"660","errorCount":0,"warningCount":7,"fixableErrorCount":0,"fixableWarningCount":0,"source":"661","usedDeprecatedRules":"326"},{"filePath":"662","messages":"663","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"664","usedDeprecatedRules":"326"},{"filePath":"665","messages":"666","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"667","usedDeprecatedRules":"326"},{"filePath":"668","messages":"669","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"670","usedDeprecatedRules":"326"},{"filePath":"671","messages":"672","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"673","messages":"674","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"675","messages":"676","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"677","usedDeprecatedRules":"326"},{"filePath":"678","messages":"679","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"680","messages":"681","errorCount":0,"warningCount":10,"fixableErrorCount":0,"fixableWarningCount":0,"source":"682","usedDeprecatedRules":"326"},{"filePath":"683","messages":"684","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"685","messages":"686","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"687","messages":"688","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"689","messages":"690","errorCount":0,"warningCount":7,"fixableErrorCount":0,"fixableWarningCount":0,"source":"691","usedDeprecatedRules":"326"},{"filePath":"692","messages":"693","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"694","messages":"695","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"696","messages":"697","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"698","messages":"699","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"700","messages":"701","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"702","messages":"703","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"704","messages":"705","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"706","messages":"707","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"708","messages":"709","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},{"filePath":"710","messages":"711","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"326"},"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/index.js",[],["712","713"],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/App.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/index.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUserSessionAction.js",["714"],"import {\n BROWSER_STORAGE,\n} from \"../../utils/SnConstants\"\nimport { ACT_TY_SET_USER_SESSION } from \"../SnActionConstants\"\n\nexport const setUserSession = (userSession) => {\n return {\n type: ACT_TY_SET_USER_SESSION,\n payload: userSession,\n }\n}\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/service/skynet-api.js",["715","716","717","718","719","720","721"],"import { SkynetClient } from \"skynet-js\";\nimport { ContentRecordDAC } from \"@skynetlabs/content-record-library\";\nimport { UserProfileDAC } from '@skynethub/userprofile-library';\nimport { SkappDAC } from '@skynethub/skapp-library';\nimport { SocialDAC } from \"social-dac-library\";\nimport { FeedDAC } from \"feed-dac-library\";\nimport {\n getJSONfromIDB,\n setJSONinIDB,\n IDB_STORE_SKAPP,\n IDB_STORE_SKYDB_CACHE,\n} from \"./SnIndexedDB\"\nimport store from \"../redux\"\nimport { setUserSession } from \"../redux/action-reducers-epic/SnUserSessionAction\"\n\nconst client = new SkynetClient(\"https://siasky.net\");\nconst hostApp = \"localhost\";\n\n//const client = new SkynetClient();\n//const hostApp = \"skapp-alpha.hns\";\n//const hostApp = \"awesomeskynet.hns\";\n\n\n\nexport const initMySky = async () => {\n\n let userSession = null\n let loggedIn = false\n try {\n // Initialize MySky.\n //const mySky = await client.loadMySky(hostApp, { dev: true, debug: true });\n const mySky = await client.loadMySky(hostApp,{ debug: true });\n //const mySky = await client.loadMySky(hostApp);\n const contentDAC = new ContentRecordDAC();\n const userProfileDAC = new UserProfileDAC();\n const socialDAC = new SocialDAC();\n const feedDAC = new FeedDAC();\n const skappDAC = new SkappDAC();\n await mySky.loadDacs(contentDAC, userProfileDAC, feedDAC,socialDAC, skappDAC);\n //await mySky.loadDacs(userProfileDAC);\n // Add additional needed permissions before checkLogin.\n // Can be Permissions object or list of Permissions objects\n //await mySky.addPermissions(new Permission(\"requestor.hns\", \"domain.hns/path\", PermCategory.Hidden, PermType.Write));\n // Try to login silently, requesting permissions for hostApp HNS.\n loggedIn = await mySky.checkLogin();// check if user is already logged-In\n console.log(\"checkLogin : loggedIn status: \" + loggedIn);\n let portalUrl = await client.portalUrl();\n userSession = { mySky, dacs: { contentDAC, userProfileDAC, feedDAC, socialDAC, skappDAC} };\n //userSession = { mySky, dacs: { userProfileDAC } };\n // if not logged-in\n if (loggedIn) {\n let userID = await mySky.userID();\n userSession = { ...userSession, userID, portalUrl };\n }\n else\n {\n userSession = { ...userSession,portalUrl};\n }\n } catch (e) {\n console.error(e);\n return { loggedIn, userSession };\n }\n return { loggedIn, userSession };\n}\n\nexport const skylinkToUrl = (skyLink) => {\n let link = \"\";\n try {\n if (skyLink.indexOf(\"http://\") === 0 || skyLink.indexOf(\"https://\") === 0) {\n link = skyLink;\n } else if (skyLink.indexOf(\"sia://\") === 0) {\n link = skyLink.replace(\"sia://\", \"\"); \n } else if (skyLink.indexOf(\"sia:\") === 0) {\n link = skyLink.replace(\"sia:\", \"\");\n }\n else\n {\n link = skyLink;\n }\n link = getPortalUrl() + link;\n return link;\n }\n catch (error) {\n console.log(\"skylinkToUrl() : error: \" + error);\n return link;\n }\n };\nexport const getPortalUrl = () => {\n // let portalUrl = null;\n // try {\n // const state = store.getState();\n // portalUrl = state.userSession.portalUrl + \"/\";\n // } catch (e) {\n // return portalUrl;\n // }\n // return portalUrl;\n return \"https://siasky.dev/\"\n };\n\nexport const getUserSession = async () => {\n let session = null;\n try {\n const state = store.getState();\n session = await state.userSession;\n }\n catch (e) {\n return session\n }\n return session\n}\n\n\nexport const getUserID = async () => {\n const userSession = await getUserSession();\n return userSession?.userID ?? null\n}\n\nexport const getMySky = async () => {\n const userSession = await getUserSession();\n return userSession?.mySky ?? null\n}\nexport const getContentDAC = async () => {\n const userSession = await getUserSession();\n return userSession?.dacs?.contentDAC ?? null;\n}\nexport const getSkappDAC = async () => {\n const userSession = await getUserSession();\n return userSession?.dacs?.skappDAC ?? null;\n}\nexport const getProfileDAC = async () => {\n const userSession = await getUserSession();\n return userSession?.dacs?.userProfileDAC ?? null;\n}\n\nexport const getFeedDAC = async () => {\n const userSession = await getUserSession();\n return userSession?.dacs?.feedDAC ?? null;\n}\nexport const getSocialDAC = async () => {\n const userSession = await getUserSession();\n return userSession?.dacs?.socialDAC ?? null;\n}\nexport const testUserProfile = async (contentRecord) => {\n // PREF_PATH: `${DATA_DOMAIN}/${skapp}/preferences.json`,\n // PROFILE_PATH: `${DATA_DOMAIN}/${skapp}/userprofile.json`,\n // INDEX_PROFILE: `${DATA_DOMAIN}/userprofileIndex.json`,\n // INDEX_PREFERENCE: `${DATA_DOMAIN}/preferencesIndex.json`\n try {\n //const contentRecord = getUserSession().dacs.userProfileDAC;\n let profp = await contentRecord.getProfile();// path -> skyuser.hns/index_profile.json\n console.log(\"original Profile\", profp);\n let profile = {\n username: \"c3po\",\n aboutMe: \"is a droid programmed for etiquette and protocol, built by the heroic Jedi Anakin Skywalker, and a constant companion to astromech R2-D2\",\n location: \"Tatooine\",\n topics: ['War', 'Games']\n }\n console.log('In the method');\n await contentRecord.setProfile(profile);// Path -> skyuser.hns/localhost/user-profile.json \n let prof = await contentRecord.getProfile();\n console.log(\"Updated Profile\", prof);\n let pref = {\n darkmode: true,\n portal: \"siasky.net\"\n }\n await contentRecord.setPreference(pref);\n let prefr = await contentRecord.getPreference();\n console.log(\"preferance\", prefr);\n let proHist = await contentRecord.getProfileHistory();\n console.log(\"profileHistory\", proHist);\n let prefHist = await contentRecord.getPreferenceHistory();\n console.log(\"getPreferanceHistory\", prefHist);\n } catch (error) {\n console.log(`error with CR DAC: ${error.message}`);\n }\n}\n\nexport const getFile_MySky = async (dataKey, options) => {\n let result = null;\n try {\n // Below condition means, we are fetching other user's data\n if (options?.userID) {\n result = await client.file.getJSON(options.userID, dataKey);\n }\n else {\n let mySky = await getMySky();\n result = await mySky.getJSON(dataKey);\n }\n // TODO: decrypt method\n return result;\n } catch (error) {\n // setErrorMessage(error.message);\n console.log(`error.message ${error.message}`)\n return null;\n }\n}\n\n// sets JSON file in MySky\nexport const putFile_MySky = async (dataKey, content, options) => {\n try {\n // get previous skylink \n // create linked list to track history\n if (options?.historyflag == true) {\n content.prevSkylink = getFile_MySky(dataKey)?.dataLink ?? null;\n }\n // set new data in SkyDB with\n let status = false\n // encrypt it\n if (options?.encrypt == true) {\n //const cypherContent = await encryptData(privateKey, publicKey, JSON.stringify(content))\n //status = await skynetClient.db.setJSON(privateKey, dataKey, cypherContent)\n } else {\n let mySky = await getMySky();\n const result = await mySky.setJSON(dataKey, content)\n }\n await setJSONinIDB(dataKey, content, { store: IDB_STORE_SKAPP })\n return true\n } catch (error) {\n // setErrorMessage(error.message);\n console.log(`error.message ${error.message}`)\n return false\n }\n}\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/router/SnRouter.js",["722","723","724"],"import Apps from '../components/AppsComp/Apps'\nimport SubmitApp from '../components/SubmitApp/SubmitApp'\nimport EditPublishApp from '../components/SubmitApp/EditPublishApp'\nimport Error from '../components/ErrorPage/Error'\nimport NoApps from '../components/OtherPages/NoApps'\nimport InstalledApps from '../components/AppsComp/InstalledApps'\nimport Hosting from '../components/Hosting/Hosting'\nimport SubmitNewSite from '../components/Hosting/SubmitNewSite'\nimport NoDomain from '../components/Domain/NoDomain'\nimport Domains from '../components/Domain/Domains'\nimport StorageGateway from '../components/Hosting/StorageGateway'\nimport Settings from '../components/Setting/Settings'\nimport AppDetailsPage from '../components/AppDetails/AppDetailsPage'\nimport DeploySite from '../components/Hosting/DeploySite'\nimport DescoverDev from '../components/DescoverDev/DescoverDev'\nimport AppStore from '../components/AppsComp/AppStore'\nimport Login from '../components/Auth/Login'\nimport EditSite from '../components/Hosting/EditSite'\nimport {\n Switch,\n Route,\n Redirect,\n} from \"react-router-dom\";\nimport { APPSTORE_PROVIDER_MASTER_PUBKEY } from \"../utils/SnConstants\";\nimport AddNewSite from '../components/Hosting/AddNewSite'\nimport UnderDevelopment from '../components/OtherPages/UnderDevelopment';\n// const SnRouter = (props) => (\nconst SnRouter = ({ toggle }) => (\n <Switch>\n <Route exact path='/'>\n <AppStore toggle={toggle} />\n </Route>\n <Route exact path='/descoverdev'>\n <DescoverDev toggle={toggle} />\n </Route>\n <Route exact path='/login'>\n <Login toggle={toggle} />\n </Route>\n <Route exact path='/appdetail/:appId'>\n <AppDetailsPage toggle={toggle} />\n </Route>\n <Route path='/submitapp/:appId?'>\n <SubmitApp toggle={toggle} />\n </Route>\n <Route path='/editpublishapp/:appId'>\n <EditPublishApp toggle={toggle} />\n </Route>\n <Route exact path='/error'>\n <Error toggle={toggle} />\n </Route>\n <Route exact path='/underdevelopment'>\n <UnderDevelopment />\n </Route>\n <Route exact path='/activitylog'>\n <UnderDevelopment />\n </Route>\n <Route exact path='/stats'>\n <UnderDevelopment />\n </Route>\n <Route exact path='/noapp'>\n <NoApps toggle={toggle} />\n </Route>\n <Route exact path='/installedapps'>\n <InstalledApps toggle={toggle} />\n </Route>\n <Route exact path='/hosting'>\n <Hosting toggle={toggle} />\n </Route>\n <Route exact path='/submitsite'>\n <AddNewSite toggle={toggle} />\n </Route>\n <Route exact path='/editsite/:appId'>\n <EditSite toggle={toggle} />\n </Route>\n <Route exact path='/domains'>\n <Domains toggle={toggle} />\n </Route>\n {/* <Route exact path='/addnewdomain'>\n <AddNewDomain />\n </Route>\n <Route exact path='/adddomaintxt'>\n <AddNewDomainTXT />\n </Route> */}\n <Route exact path='/nodomain'>\n <NoDomain toggle={toggle} />\n </Route>\n <Route exact path='/storagegateway'>\n <StorageGateway toggle={toggle} />\n </Route>\n <Route exact path='/usersettings'>\n <Settings toggle={toggle} />\n </Route>\n <Route exact path='/deploysite/:appId?'>\n <DeploySite toggle={toggle} />\n </Route>\n <Route exact path='/apps'>\n <Apps toggle={toggle} />\n </Route>\n </Switch>\n\n)\nexport default SnRouter","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/theme/Theme.js",["725"],"// import React from 'react'\nimport { red } from \"@material-ui/core/colors\";\nimport { createMuiTheme } from \"@material-ui/core/styles\";\n\nexport const skappTheme = createMuiTheme({\n typography: {\n htmlFontSize: 16,\n fontFamily: \"'Nunito', sans-serif\",\n body1: {\n\n lineHeight: '1.25'\n },\n palette: {\n type: 'light',\n },\n },\n },\n);\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Navbar/Nav.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Utils/SnLoader.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Sidebar/Sidebar.js",["726","727"],"import React,{useEffect} from \"react\"\nimport PerfectScrollbar from \"react-perfect-scrollbar\"\nimport \"react-perfect-scrollbar/dist/css/styles.css\"\nimport { makeStyles } from \"@material-ui/core/styles\"\nimport ListSubheader from \"@material-ui/core/ListSubheader\"\nimport List from \"@material-ui/core/List\"\nimport ListItem from \"@material-ui/core/ListItem\"\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\"\nimport ListItemText from \"@material-ui/core/ListItemText\"\nimport Collapse from \"@material-ui/core/Collapse\"\nimport { useLocation } from 'react-router-dom'\n// Custom Icons Imports\nimport { ReactComponent as DashboardIcon } from \"../../assets/img/icons/dashboardIcon.svg\"\nimport { ReactComponent as SubmitAppIcon } from \"../../assets/img/icons/submitIcon.svg\"\nimport { ReactComponent as MyAppIcon } from \"../../assets/img/icons/grayMyApps.svg\"\nimport { ReactComponent as MyAppPinIcon } from \"../../assets/img/icons/Pin.svg\"\nimport { ReactComponent as HostingIcon } from \"../../assets/img/icons/Cloud, Sync, Synchronize.6.svg\"\nimport { ReactComponent as DeployIcon } from \"../../assets/img/icons/deployIcon.svg\"\nimport { ReactComponent as FilesIcon } from \"../../assets/img/icons/filesIcon.svg\"\nimport { ReactComponent as DomainIcon } from \"../../assets/img/icons/domainIcon.svg\"\nimport { ReactComponent as StorageIcon } from \"../../assets/img/icons/StorageIcon.svg\"\nimport { ReactComponent as StatsIcon } from \"../../assets/img/icons/statsIcon.svg\"\nimport { ReactComponent as ActivityLogIcon } from \"../../assets/img/icons/starOutlinedIcon.svg\"\nimport { ReactComponent as KnowlBaseIcon } from \"../../assets/img/icons/knowledgeBaseIcon.svg\"\nimport { ReactComponent as ProductUpdateIcon } from \"../../assets/img/icons/productUpdateIcon.svg\"\nimport { ReactComponent as SettingNavLogIcon } from \"../../assets/img/icons/settingNavIcon.svg\"\nimport { ReactComponent as PersonIcon } from '../../assets/img/icons/interface-essential-311.svg'\nimport { ExpandLess, ExpandMore } from \"@material-ui/icons\"\n// sidebar styles\nimport style from \"../../assets/jss/sidebar/SidebarStyle\"\nimport { NavLink } from \"react-router-dom\"\nimport { useSelector } from \"react-redux\"\nimport {getPublishedAppsCount} from \"../../service/SnSkappService\"\nconst useStyles = makeStyles(style)\n\nconst Sidebar = ({ style, toggle }) => {\n const classes = useStyles()\n const [open, setOpen] = React.useState(true)\n const [noOfpublishApps, setNoOfpublishApps] = React.useState(0)\n\n const snShowHostingLinks = useSelector(state => state.snShowHostingLinks)\n let userSession = useSelector((state) => state.userSession)\n const handleClick = () => {\n setOpen(!open)\n }\n useEffect(async () => {\n const noOfpublishApps = await getPublishedAppsCount();\n setNoOfpublishApps(noOfpublishApps);\n }, [userSession]);\n\n let location = useLocation()\n\n let sidebar = (\n <>\n {toggle ? <div className={`${toggle ? classes.darkSidebar : classes.lightSidebar} darkSidebar`} style={style}>\n <PerfectScrollbar>\n <List\n component=\"nav\"\n aria-labelledby=\"nested-list-subheader\"\n className={classes.root}\n >\n <NavLink exact to=\"/\">\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <DashboardIcon />\n </ListItemIcon>\n <ListItemText primary=\"Apps Discovery\" />\n </ListItem>\n </NavLink>\n <NavLink exact to='/descoverdev'>\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <PersonIcon />\n </ListItemIcon>\n <ListItemText primary=\"Developers Discovery\" />\n </ListItem>\n </NavLink>\n <NavLink exact to=\"/hosting\">\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <HostingIcon />\n </ListItemIcon>\n <ListItemText primary=\"App Hosting\" />\n {snShowHostingLinks ? (\n <ExpandLess className={classes.dropArrow} />\n ) : (\n <ExpandMore className={classes.dropArrow} />\n )}\n </ListItem>\n </NavLink>\n <Collapse in={snShowHostingLinks} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n <NavLink to=\"/deploysite\">\n <ListItem button className={classes.nested}>\n <ListItemIcon className={classes.listIcon}>\n <DeployIcon />\n </ListItemIcon>\n <ListItemText primary=\"Deploy\" />\n </ListItem>\n </NavLink>\n <ListItem button className={classes.nested}>\n <ListItemIcon className={classes.listIcon}>\n <FilesIcon />\n </ListItemIcon>\n <ListItemText primary=\"Files\" />\n </ListItem>\n </List>\n </Collapse>\n <NavLink to=\"/submitapp\">\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <SubmitAppIcon />\n </ListItemIcon>\n <ListItemText primary=\"Publish App\" />\n </ListItem>\n </NavLink>\n <NavLink exact to=\"/apps\">\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <MyAppIcon />\n </ListItemIcon>\n <ListItemText primary={\"My Apps (Published) \" + noOfpublishApps} />\n </ListItem>\n </NavLink>\n <NavLink exact to=\"/installedapps\">\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <MyAppPinIcon />\n </ListItemIcon>\n <ListItemText primary=\"My Apps (Pinned)\" />\n </ListItem>\n </NavLink>\n <NavLink exact to=\"/nodomain\">\n <ListItem button >\n <ListItemIcon className={classes.listIcon}>\n <DomainIcon />\n </ListItemIcon>\n <ListItemText primary=\"Domain Manager\" />\n </ListItem>\n </NavLink>\n <NavLink exact to=\"/storagegateway\">\n <ListItem button >\n <ListItemIcon className={classes.listIcon}>\n <StorageIcon />\n </ListItemIcon>\n <ListItemText primary=\"Storage Manager\" />\n </ListItem>\n </NavLink>\n <NavLink exact to=\"/stats\">\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <StatsIcon />\n </ListItemIcon>\n <ListItemText primary=\"Usage Stats\" />\n </ListItem>\n </NavLink>\n <NavLink exact to=\"/activitylog\">\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <ActivityLogIcon />\n </ListItemIcon>\n <ListItemText primary=\"Activity Log\" />\n </ListItem>\n </NavLink>\n </List>\n {/* Other Information section */}\n <List\n subheader={\n <ListSubheader component=\"div\" id=\"nested-list-subheader\">\n Other Information\n </ListSubheader>\n }\n component=\"nav\"\n aria-labelledby=\"nested-list-subheader\"\n className={classes.root}\n >\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <KnowlBaseIcon />\n </ListItemIcon>\n <ListItemText primary=\"Knowledge Base\" />\n </ListItem>\n\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <ProductUpdateIcon />\n </ListItemIcon>\n <ListItemText primary=\"Product Updates\" />\n </ListItem>\n </List>\n {/* Settings section */}\n <List\n subheader={\n <ListSubheader component=\"div\" id=\"nested-list-subheader\">\n Settings\n </ListSubheader>\n }\n component=\"nav\"\n aria-labelledby=\"nested-list-subheader\"\n className={classes.root}\n >\n <NavLink exact to=\"/usersettings\">\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <SettingNavLogIcon />\n </ListItemIcon>\n <ListItemText primary=\"Settings\" />\n </ListItem>\n </NavLink>\n </List>\n <div className={classes.promoCard}>\n <h3 className={classes.promoTitle}>Promo Title</h3>\n <p className={classes.promoText}>Explore our marketing solutions</p>\n </div>\n </PerfectScrollbar>\n </div> : <div className={`${toggle ? classes.darkSidebar : classes.lightSidebar} lightSidebar`} style={style}>\n <PerfectScrollbar>\n <List\n component=\"nav\"\n aria-labelledby=\"nested-list-subheader\"\n className={classes.root}\n >\n <NavLink exact to=\"/\">\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <DashboardIcon />\n </ListItemIcon>\n <ListItemText primary=\"Apps Discovery\" />\n </ListItem>\n </NavLink>\n <NavLink exact to='/descoverdev'>\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <PersonIcon />\n </ListItemIcon>\n <ListItemText primary=\"Developers Discovery\" />\n </ListItem>\n </NavLink>\n <NavLink exact to=\"/hosting\">\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <HostingIcon />\n </ListItemIcon>\n <ListItemText primary=\"App Hosting\" />\n {snShowHostingLinks ? (\n <ExpandLess className={classes.dropArrow} />\n ) : (\n <ExpandMore className={classes.dropArrow} />\n )}\n </ListItem>\n </NavLink>\n <Collapse in={snShowHostingLinks} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n <NavLink to=\"/deploysite\">\n <ListItem button className={classes.nested}>\n <ListItemIcon className={classes.listIcon}>\n <DeployIcon />\n </ListItemIcon>\n <ListItemText primary=\"Deploy\" />\n </ListItem>\n </NavLink>\n <ListItem button className={classes.nested}>\n <ListItemIcon className={classes.listIcon}>\n <FilesIcon />\n </ListItemIcon>\n <ListItemText primary=\"Files\" />\n </ListItem>\n </List>\n </Collapse>\n <NavLink to=\"/submitapp\">\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <SubmitAppIcon />\n </ListItemIcon>\n <ListItemText primary=\"Publish App\" />\n </ListItem>\n </NavLink>\n <NavLink exact to=\"/apps\">\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <MyAppIcon />\n </ListItemIcon>\n <ListItemText primary={\"My Apps (Published) \" + noOfpublishApps} />\n </ListItem>\n </NavLink>\n <NavLink exact to=\"/installedapps\">\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <MyAppPinIcon />\n </ListItemIcon>\n <ListItemText primary=\"My Apps (Pinned)\" />\n </ListItem>\n </NavLink>\n <NavLink exact to=\"/nodomain\">\n <ListItem button >\n <ListItemIcon className={classes.listIcon}>\n <DomainIcon />\n </ListItemIcon>\n <ListItemText primary=\"Domain Manager\" />\n </ListItem>\n </NavLink>\n <NavLink exact to=\"/storagegateway\">\n <ListItem button >\n <ListItemIcon className={classes.listIcon}>\n <StorageIcon />\n </ListItemIcon>\n <ListItemText primary=\"Storage Manager\" />\n </ListItem>\n </NavLink>\n <NavLink exact to=\"/stats\">\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <StatsIcon />\n </ListItemIcon>\n <ListItemText primary=\"Usage Stats\" />\n </ListItem>\n </NavLink>\n <NavLink exact to=\"/activitylog\">\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <ActivityLogIcon />\n </ListItemIcon>\n <ListItemText primary=\"Activity Log\" />\n </ListItem>\n </NavLink>\n </List>\n {/* Other Information section */}\n <List\n subheader={\n <ListSubheader component=\"div\" id=\"nested-list-subheader\">\n Other Information\n </ListSubheader>\n }\n component=\"nav\"\n aria-labelledby=\"nested-list-subheader\"\n className={classes.root}\n >\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <KnowlBaseIcon />\n </ListItemIcon>\n <ListItemText primary=\"Knowledge Base\" />\n </ListItem>\n\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <ProductUpdateIcon />\n </ListItemIcon>\n <ListItemText primary=\"Product Updates\" />\n </ListItem>\n </List>\n {/* Settings section */}\n <List\n subheader={\n <ListSubheader component=\"div\" id=\"nested-list-subheader\">\n Settings\n </ListSubheader>\n }\n component=\"nav\"\n aria-labelledby=\"nested-list-subheader\"\n className={classes.root}\n >\n <NavLink exact to=\"/usersettings\">\n <ListItem button>\n <ListItemIcon className={classes.listIcon}>\n <SettingNavLogIcon />\n </ListItemIcon>\n <ListItemText primary=\"Settings\" />\n </ListItem>\n </NavLink>\n </List>\n <div className={classes.promoCard}>\n <h3 className={classes.promoTitle}>Promo Title</h3>\n <p className={classes.promoText}>Explore our marketing solutions</p>\n </div>\n </PerfectScrollbar>\n </div>\n }\n </>\n )\n if (!userSession || location.pathname === '/login') {\n sidebar = null\n }\n return (\n\n sidebar\n )\n}\n\nexport default Sidebar\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnLoaderReducer.js",["728"],"import { ACT_TY_CHANGE_LOADER_STATE } from \"../SnActionConstants\"\n\nexport default (state = false, action) => {\n switch (action.type) {\n case ACT_TY_CHANGE_LOADER_STATE:\n return action.payload\n default:\n return state\n }\n}\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUserProfileReducer.js",["729"],"import { ACT_TY_SET_USER_PROFILE } from \"../SnActionConstants\"\nimport { STORAGE_USER_APP_PROFILE_KEY, BROWSER_STORAGE } from \"../../utils/SnConstants\"\n\nexport default (state = null, action) => {\n switch (action.type) {\n case ACT_TY_SET_USER_PROFILE:\n return action.payload\n default:\n if (state == null) {\n state = BROWSER_STORAGE.getItem(STORAGE_USER_APP_PROFILE_KEY)\n if (state != null) {\n state = JSON.parse(state)\n }\n }\n return state\n }\n}\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUserProfileEpic.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUserPreferencesReducer.js",["730"],"import { ACT_TY_SET_USER_PREFERENCES } from \"../SnActionConstants\"\nimport { STORAGE_USER_PREFERENCES_KEY, BROWSER_STORAGE } from \"../../utils/SnConstants\"\n\nexport default (state = null, action) => {\n switch (action.type) {\n case ACT_TY_SET_USER_PREFERENCES:\n return action.payload\n default:\n if (state == null) {\n state = BROWSER_STORAGE.getItem(STORAGE_USER_PREFERENCES_KEY)\n if (state != null) {\n state = JSON.parse(state)\n }\n }\n return state\n }\n}\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAllPublishAppReducer.js",["731","732"],"import {ACT_TY_SET_ALL_PUBLISHED_APPS, ACT_TY_SET_APP_COMMENTS} from \"../SnActionConstants\";\n\nexport default (state = [], action) => {\n switch (action.type) {\n case ACT_TY_SET_ALL_PUBLISHED_APPS:\n //return {...state, publishedAppsStore : action.payload}\n return action.payload\n default:\n return state\n }\n}","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnSelectedHostedAppReducer.js",["733"],"import { ACT_TY_SET_SELECTED_HOSTED_APP } from \"../SnActionConstants\";\nimport { STORAGE_SELECTED_HOSTED_APP_KEY, BROWSER_STORAGE } from \"../../utils/SnConstants\";\n\nexport default (state = null, action) => {\n switch (action.type) {\n case ACT_TY_SET_SELECTED_HOSTED_APP:\n return action.payload\n default:\n if (state == null) {\n state = BROWSER_STORAGE.getItem(STORAGE_SELECTED_HOSTED_APP_KEY);\n }\n return state;\n }\n}\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAllPublishAppEpic.js",["734"],"import { ofType } from \"redux-observable\"\nimport { switchMap, map } from \"rxjs/operators\"\nimport { from } from \"rxjs\"\nimport { setLoaderDisplay } from \"./SnLoaderAction\"\nimport {\n EPIC_TY_GET_ALL_PUBLISHED_APPS,\n} from \"../SnActionConstants\"\nimport { getAllPublishedApps } from \"../../service/SnSkappService\"\nimport { setAllPublishedAppsStore } from \"./SnAllPublishAppAction\"\n// app stats actions\nimport store from \"..\"\nexport const snGetAllPublishedAppsEpic = (action$) =>\n action$.\n pipe(ofType(EPIC_TY_GET_ALL_PUBLISHED_APPS),\n // do we need to change this to mergemap ? we dont want subscription to be overwritten\n switchMap((action) => {\n console.log(\"sortby\", action.sortBy)\n store.dispatch(setLoaderDisplay(true))\n return from(getAllPublishedApps(action.sortBy.sortOn, action.sortBy.orderBy, action.sortBy.n))\n .pipe(\n map((res) => {\n store.dispatch(setLoaderDisplay(false))\n // Update Redux Store\n return setAllPublishedAppsStore(res)\n })\n )\n }))\n\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnPublishAppReducer.js",["735"],"import {ACT_TY_SET_MY_PUBLISHED_APPS} from \"../SnActionConstants\";\nlet initState = {\n publishedAppsStore: []\n};\nexport default (state = initState, action) => {\n switch (action.type) {\n case ACT_TY_SET_MY_PUBLISHED_APPS:\n return {...state, publishedAppsStore : action.payload}\n default:\n return state\n }\n}","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnPublishAppEpic.js",["736","737"],"import { ofType } from \"redux-observable\"\nimport { switchMap, map } from \"rxjs/operators\"\nimport { from } from \"rxjs\"\nimport { setLoaderDisplay } from \"./SnLoaderAction\"\nimport {\n EPIC_TY_PUBLISH_APP, EPIC_TY_GET_MY_PUBLISHED_APPS,\n \n} from \"../SnActionConstants\";\nimport { publishApp, getMyPublishedApps } from \"../../service/SnSkappService\"\nimport { setPublishedAppsStore } from \"./SnPublishAppAction\"\n// app stats actions\nimport store from \"../../redux\"\nexport const snSetPublishAppEpic = (action$) =>\n action$.\n pipe(ofType(EPIC_TY_PUBLISH_APP),\n // do we need to change this to mergemap ? we dont want subscription to be overwritten\n switchMap((action) => {\n console.log(\"snPublishAppEpic \", action)\n store.dispatch(setLoaderDisplay(true))\n return from(publishApp(action.payload)) // must return all published app\n .pipe(\n map((res) => {\n //const apps = await getAllPublishedApps();\n store.dispatch(setLoaderDisplay(false))\n //action.payload.manageSubmitLoader(false)\n // Update Redux Store\n return setPublishedAppsStore(res)\n })\n )\n }));\nexport const snGetPublishedAppsEpic = (action$) =>\n action$.\n pipe(ofType(EPIC_TY_GET_MY_PUBLISHED_APPS),\n // do we need to change this to mergemap ? we dont want subscription to be overwritten\n switchMap((action) => {\n store.dispatch(setLoaderDisplay(true))\n return from(getMyPublishedApps())\n .pipe(\n map((res) => {\n store.dispatch(setLoaderDisplay(false))\n // Update Redux Store\n return setPublishedAppsStore(res)\n })\n )\n }));\n\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnInstalledAppEpic.js",["738","739","740","741"],"import { ofType } from \"redux-observable\"\nimport { switchMap, map } from \"rxjs/operators\"\nimport { from } from \"rxjs\"\nimport { setLoaderDisplay } from \"./SnLoaderAction\"\nimport {\n EPIC_TY_INSTALLED_APP, EPIC_TY_GET_MY_INSTALLED_APPS,\n EPIC_TY_UNINSTALLED_APP, EPIC_TY_INSTALLED_FOR_LOGIN_APP\n} from \"../SnActionConstants\";\nimport { getMyInstalledApps, installApp, uninstallApp } from \"../../service/SnSkappService\"\nimport { setInstalledAppsStore, installedAppActionForLogin } from \"./SnInstalledAppAction\"\n// app stats actions\nimport store from \"../../redux\"\nexport const snSetInstallAppEpic = (action$) =>\n action$.\n pipe(ofType(EPIC_TY_INSTALLED_APP),\n // do we need to change this to mergemap ? we dont want subscription to be overwritten\n switchMap((action) => {\n console.log(\"snInstalledAppEpic \", action)\n store.dispatch(setLoaderDisplay(true))\n return from(installApp(action.payload)) // must return all published app\n .pipe(\n map((res) => {\n store.dispatch(installedAppActionForLogin(null));\n store.dispatch(setLoaderDisplay(false))\n return setInstalledAppsStore(res)\n })\n )\n }));\nexport const snSetUnInstallAppEpic = (action$) =>\n action$.\n pipe(ofType(EPIC_TY_UNINSTALLED_APP),\n // do we need to change this to mergemap ? we dont want subscription to be overwritten\n switchMap((action) => {\n console.log(\"snUnInstalledAppEpic \", action)\n store.dispatch(setLoaderDisplay(true))\n return from(uninstallApp(action.payload)) // must return all published app\n .pipe(\n map((res) => {\n store.dispatch(installedAppActionForLogin(null));\n store.dispatch(setLoaderDisplay(false))\n return setInstalledAppsStore(res)\n })\n )\n }));\nexport const snGetInstalledAppsEpic = (action$) =>\n action$.\n pipe(ofType(EPIC_TY_GET_MY_INSTALLED_APPS),\n // do we need to change this to mergemap ? we dont want subscription to be overwritten\n\n switchMap((action) => {\n store.dispatch(setLoaderDisplay(true))\n return from(getMyInstalledApps())\n .pipe(\n map((res) => {\n store.dispatch(setLoaderDisplay(false))\n // Update Redux Store\n return setInstalledAppsStore(res)\n })\n )\n }));\n\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAppStatsReducer.js",["742"],"import {ACT_TY_STATS_ACTION } from \"../SnActionConstants\";\n\nexport default (state = null, action) => {\n switch (action.type) {\n case ACT_TY_STATS_ACTION:\n return action.payload\n default:\n return state\n }\n}","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAppStatsEpic.js",["743","744"],"import { ofType } from \"redux-observable\"\nimport { switchMap, map } from \"rxjs/operators\"\nimport { from } from \"rxjs\"\nimport { setLoaderDisplay } from \"./SnLoaderAction\"\nimport { EPIC_TY_SET_STATS, EPIC_TY_GET_STATS } from \"../SnActionConstants\"\nimport { setAppStatsEvent, getAppStats } from \"../../service/SnSkappService\"\nimport { setAppStatsStore } from \"./SnAppStatsAction\"\nimport store from \"../../redux\"\n// app stats actions\nexport const snSetAppStatsEpic = (action$) =>\n action$.\n pipe(ofType(EPIC_TY_SET_STATS),\n // do we need to change this to mergemap ? we dont want subscription to be overwritten\n switchMap((action) => {\n return from(setAppStatsEvent(action.payload.actionType, action.payload.appId))\n .pipe(\n map((res) => {\n //setLoaderDisplay(false)\n // Update Redux Store\n return setAppStatsStore(res)\n })\n )\n }));\n\nexport const snGetAppStatsEpic = (action$) => action$.pipe(ofType(EPIC_TY_GET_STATS),\n // do we need to change this to mergemap ? we dont want subscription to be overwritten\n switchMap((action) => {\n setLoaderDisplay(true)\n return from(getAppStats(action.payload.appId))\n .pipe(\n map((res) => {\n setLoaderDisplay(false)\n // Update Redux Store\n return setAppStatsStore(res)\n })\n )\n }));","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAppCommentsReducer.js",["745","746"],"import {ACT_TY_SET_PUBLISHED_APPS, ACT_TY_SET_APP_COMMENTS} from \"../SnActionConstants\";\nlet initState = {\n appCommentsStore: [],\n};\nexport default (state = initState, action) => {\n switch (action.type) {\n case ACT_TY_SET_APP_COMMENTS:\n return {...state, appCommentsStore : action.payload}\n default:\n return state\n }\n}","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnShowHostingLinksReducer.js",["747"],"import { ACT_TY_CHANGE_SHOW_HOSTING_LINKS_STATE } from \"../SnActionConstants\";\n\nexport default (state = false, action) => {\n switch (action.type) {\n case ACT_TY_CHANGE_SHOW_HOSTING_LINKS_STATE:\n return action.payload\n default:\n return state\n }\n}\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnInstalledAppReducer.js",["748"],"import {ACT_TY_SET_MY_INSTALLED_APPS, EPIC_TY_INSTALLED_FOR_LOGIN_APP} from \"../SnActionConstants\";\nlet initState = {\n installedAppsStore: [],\n installedAppsStoreForLogin: null\n};\nexport default (state = initState, action) => {\n switch (action.type) {\n case ACT_TY_SET_MY_INSTALLED_APPS:\n return {...state, installedAppsStore : action.payload}\n case EPIC_TY_INSTALLED_FOR_LOGIN_APP: \n return {...state, installedAppsStoreForLogin : action.payload}\n default:\n return state\n }\n}","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUploadListReducer.js",["749"],"import { ACT_TY_SET_UPLOAD_LIST } from \"../SnActionConstants\";\n\nexport default (state = {}, action)=> {\n switch(action.type){\n case ACT_TY_SET_UPLOAD_LIST:\n return Object.assign({}, action.payload);\n default:\n return state;\n }\n}","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUserPreferencesEpic.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAppCommentsEpic.js",["750","751"],"import { ofType } from \"redux-observable\"\nimport { switchMap, map } from \"rxjs/operators\"\nimport { from } from \"rxjs\"\nimport { setLoaderDisplay } from \"./SnLoaderAction\"\nimport {\n EPIC_TY_SET_APP_COMMENTS, EPIC_TY_GET_APP_COMMENTS\n} from \"../SnActionConstants\";\nimport { setAppComment, getAppComments } from \"../../service/SnSkappService\"\nimport { setAppCommentStore } from \"./SnAppCommentsAction\"\n// app stats actions\nimport store from \"..\"\n\nexport const snSetAppCommentEpic = (action$) =>\n action$.\n pipe(ofType(EPIC_TY_SET_APP_COMMENTS),\n // do we need to change this to mergemap ? we dont want subscription to be overwritten\n switchMap((action) => {\n store.dispatch(setLoaderDisplay(true))\n return from(setAppComment(action.payload.appId, action.payload.data))\n .pipe(\n map((res) => {\n store.dispatch(setLoaderDisplay(false))\n // Update Redux Store\n return setAppCommentStore(res)\n })\n )\n }));\n\nexport const snGetAppCommentsEpic = (action$) =>\n action$.\n pipe(ofType(EPIC_TY_GET_APP_COMMENTS),\n // do we need to change this to mergemap ? we dont want subscription to be overwritten\n switchMap((action) => {\n store.dispatch(setLoaderDisplay(true))\n return from(getAppComments(action.payload.appId))\n .pipe(\n map((res) => {\n store.dispatch(setLoaderDisplay(false))\n // Update Redux Store\n return setAppCommentStore(res)\n })\n )\n }));","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnStorageEpic.js",["752"],"import { ofType } from \"redux-observable\"\nimport { switchMap, map } from \"rxjs/operators\"\nimport { from } from \"rxjs\"\nimport { EPIC_TY_SET_STORAGE, EPIC_TY_GET_STORAGE, EPIC_TY_DELETE_STORAGE, EPIC_TY_EDIT_STORAGE } from \"../SnActionConstants\"\nimport { setStorageAction } from \"./SnStorageAction\"\nimport { setLoaderDisplay } from \"./SnLoaderAction\"\nimport { setStorage, getStorages, deleteStorage, editStorage } from \"../../service/SnSkappService\"\nimport store from \"..\"\n\nexport const snStorageEpic = (action$) =>\n action$.pipe(\n ofType(EPIC_TY_SET_STORAGE),\n switchMap((action) => {\n console.log(\"user setting epic\", action)\n store.dispatch(setLoaderDisplay(true))\n return from(setStorage(action.payload)).pipe(\n map((res) => {\n console.log(`User Domains:${res}`)\n store.dispatch(setLoaderDisplay(false))\n return setStorageAction(res)\n })\n )\n })\n )\n\nexport const snDeleteStorageEpic = (action$) =>\n action$.pipe(\n ofType(EPIC_TY_DELETE_STORAGE),\n switchMap((action) => {\n console.log(\"user setting epic\", action)\n store.dispatch(setLoaderDisplay(true))\n return from(deleteStorage(action.payload)).pipe(\n map((res) => {\n console.log(`User Domains del:${res}`)\n store.dispatch(setLoaderDisplay(false))\n return setStorageAction(res)\n })\n )\n })\n )\n\nexport const snEditStorageEpic = (action$) =>\n action$.pipe(\n ofType(EPIC_TY_EDIT_STORAGE),\n switchMap((action) => {\n console.log(\"user setting epic\", action)\n store.dispatch(setLoaderDisplay(true))\n return from(editStorage(action.payload)).pipe(\n map((res) => {\n console.log(`User Domains:${res}`)\n store.dispatch(setLoaderDisplay(false))\n return setStorageAction(res)\n })\n )\n })\n )\n\nexport const snGetStorageEpic = (action$) =>\n action$.\n pipe(ofType(EPIC_TY_GET_STORAGE),\n // do we need to change this to mergemap ? we dont want subscription to be overwritten\n switchMap((action) => {\n console.log('aya');\n store.dispatch(setLoaderDisplay(true))\n return from(getStorages())\n .pipe(\n map((res) => {\n\n console.log('aya r: ', res);\n store.dispatch(setLoaderDisplay(false))\n // Update Redux Store\n return setStorageAction(res)\n })\n )\n }));","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnDomainReducer.js",["753"],"import { ACT_TY_SET_DOMAIN } from \"../SnActionConstants\"\n\nlet initState = {\n domains: []\n};\n\nexport default (state = initState, action) => {\n switch (action.type) {\n case ACT_TY_SET_DOMAIN:\n return {...state, domains : action.payload}\n default:\n return state\n }\n}\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUserSessionReducer.js",["754"],"import { ACT_TY_SET_USER_SESSION } from \"../SnActionConstants\"\n\n//export default (state = getUserSession(), action) => {\nexport default (state = null, action) => {\n switch (action.type) {\n case ACT_TY_SET_USER_SESSION:\n return action.payload\n default:\n return state\n }\n}\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnDomainEpic.js",["755"],"import { ofType } from \"redux-observable\"\nimport { switchMap, map } from \"rxjs/operators\"\nimport { from } from \"rxjs\"\nimport { EPIC_TY_SET_DOMAIN, EPIC_TY_GET_DOMAIN, EPIC_TY_DELETE_DOMAIN, EPIC_TY_EDIT_DOMAIN } from \"../SnActionConstants\"\nimport { setDomainAction } from \"./SnDomainAction\"\nimport { setLoaderDisplay } from \"./SnLoaderAction\"\nimport { setDomain, getDomains, deleteDomain, editDomain } from \"../../service/SnSkappService\"\nimport store from \"../../redux\"\n\nexport const snDomainEpic = (action$) =>\n action$.pipe(\n ofType(EPIC_TY_SET_DOMAIN),\n switchMap((action) => {\n console.log(\"user setting epic\", action)\n store.dispatch(setLoaderDisplay(true))\n return from(setDomain(action.payload)).pipe(\n map((res) => {\n console.log(`User Domains:${res}`)\n store.dispatch(setLoaderDisplay(false))\n return setDomainAction(res)\n })\n )\n })\n )\n\nexport const snDeleteDomainEpic = (action$) =>\n action$.pipe(\n ofType(EPIC_TY_DELETE_DOMAIN),\n switchMap((action) => {\n console.log(\"user setting epic\", action)\n store.dispatch(setLoaderDisplay(true))\n return from(deleteDomain(action.payload)).pipe(\n map((res) => {\n console.log(`User Domains del:${res}`)\n store.dispatch(setLoaderDisplay(false))\n return setDomainAction(res)\n })\n )\n })\n )\n\nexport const snEditDomainEpic = (action$) =>\n action$.pipe(\n ofType(EPIC_TY_EDIT_DOMAIN),\n switchMap((action) => {\n console.log(\"user setting epic\", action)\n store.dispatch(setLoaderDisplay(true))\n return from(editDomain(action.payload)).pipe(\n map((res) => {\n console.log(`User Domains:${res}`)\n store.dispatch(setLoaderDisplay(false))\n return setDomainAction(res)\n })\n )\n })\n )\n\nexport const snGetDomainEpic = (action$) =>\n action$.\n pipe(ofType(EPIC_TY_GET_DOMAIN),\n // do we need to change this to mergemap ? we dont want subscription to be overwritten\n switchMap((action) => {\n console.log('aya');\n store.dispatch(setLoaderDisplay(true))\n return from(getDomains())\n .pipe(\n map((res) => {\n\n console.log('aya r: ', res);\n store.dispatch(setLoaderDisplay(false))\n // Update Redux Store\n return setDomainAction(res)\n })\n )\n }));","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnStorageReducer.js",["756"],"import { ACT_TY_SET_STORAGE } from \"../SnActionConstants\"\n\nlet initState = {\n storages: []\n};\n\nexport default (state = initState, action) => {\n switch (action.type) {\n case ACT_TY_SET_STORAGE:\n return { ...state, storages: action.payload }\n default:\n return state\n }\n}\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/SnActionConstants.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/service/SnIndexedDB.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Navbar/LandingPageNavbar.js",["757","758","759","760","761","762"],"import React, { useState, Fragment, useEffect } from 'react'\nimport { fade, makeStyles } from '@material-ui/core/styles'\nimport AppBar from '@material-ui/core/AppBar'\nimport Toolbar from '@material-ui/core/Toolbar'\nimport IconButton from '@material-ui/core/IconButton'\nimport InputBase from '@material-ui/core/InputBase'\nimport Badge from '@material-ui/core/Badge'\nimport Switch from \"@material-ui/core/Switch\";\nimport MenuItem from '@material-ui/core/MenuItem'\nimport Menu from '@material-ui/core/Menu'\nimport PersonOutlineIcon from '@material-ui/icons/PersonOutline'\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown'\nimport { Link } from 'react-router-dom'\n\n// import MenuIcon from '@material-ui/icons/Menu'\nimport SearchIcon from '@material-ui/icons/Search'\n// import MailIcon from '@material-ui/icons/Mail'\n// import NotificationsIcon from '@material-ui/icons/Notifications'\n// import MoreIcon from '@material-ui/icons/MoreVert'\n// logo\nimport { ReactComponent as Logo } from '../../assets/img/icons/logo.svg'\nimport { ReactComponent as Logo1 } from '../../assets/img/icons/logo1.svg'\n\n// icons custom\nimport { ReactComponent as QuestionIcon } from '../../assets/img/icons/question.svg'\nimport { ReactComponent as SettingIcon } from '../../assets/img/icons/setting.svg'\nimport { ReactComponent as EditProfileIcon } from '../../assets/img/icons/edit-profile.svg'\nimport { ReactComponent as LogoutIcon } from '../../assets/img/icons/exit-log-out.2.svg'\nimport { ReactComponent as NotificationIcon } from '../../assets/img/icons/notification.svg'\n// import { ReactComponent as CustomMenuIcon } from '../../assets/img/icons/Icon ionic-ios-menu.svg'\nimport { Box, Button } from '@material-ui/core'\nimport Sidebar from '../Sidebar/Sidebar'\n// import { Translate } from '@material-ui/icons'\nimport useWindowDimensions from '../../hooks/useWindowDimensions'\nimport { useSelector } from 'react-redux'\n\nconst useStyles = makeStyles((theme) => ({\n lightRoot: {\n backgroundColor: '#fff',\n background: \"#ffff 0 % 0 % no-repeat padding-box\",\n boxShadow: '0px 1px 4px #15223214',\n\n },\n darkRoot: {\n backgroundColor: '#2A2C34',\n background: \"#ffff 0 % 0 % no-repeat padding-box\",\n boxShadow: '0px 1px 4px #15223214',\n\n },\n toolBarRoot: {\n justifyContent: 'space-between',\n '@media only screen and (max-width: 890px)': {\n justifyContent: 'space-between'\n }\n },\n // grow: {\n // flexGrow: 1,\n // // background: 'red'\n // '@media only screen and (max-width: 890px)': {\n // flexGrow: 0,\n // }\n // },\n menuButton: {\n display: 'none',\n marginRight: theme.spacing(2),\n '@media only screen and (max-width: 890px)': {\n display: 'block'\n }\n },\n title: {\n display: 'none',\n [theme.breakpoints.up('sm')]: {\n display: 'block',\n },\n },\n search: {\n position: 'relative',\n borderRadius: theme.shape.borderRadius,\n backgroundColor: fade('#F0F5F7', 1),\n '&:hover': {\n backgroundColor: fade(\"#F0F5F7\", 0.7),\n },\n // marginRight: theme.spacing(2),\n marginLeft: 0,\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n marginLeft: theme.spacing(3),\n width: 'auto',\n },\n color: '#8B9DA5',\n '@media only screen and (max-width: 890px)': {\n display: 'none'\n },\n marginRight: 'auto'\n },\n searchIcon: {\n padding: theme.spacing(0, 2),\n height: '100%',\n position: 'absolute',\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n // color: '#B4C6CC'\n },\n inputRoot: {\n color: 'inherit',\n },\n inputInput: {\n background: '#1E2029',\n padding: theme.spacing(1, 1, 1, 0),\n paddingLeft: `calc(1em + ${theme.spacing(4)}px)`,\n transition: theme.transitions.create('width'),\n width: '100%',\n [theme.breakpoints.up('md')]: {\n width: '30ch',\n },\n [theme.breakpoints.up('lg')]: {\n width: '50ch',\n },\n\n },\n sectionDesktop: {\n display: 'none',\n [theme.breakpoints.up('md')]: {\n display: 'flex',\n },\n },\n sectionMobile: {\n display: 'flex',\n [theme.breakpoints.up('md')]: {\n display: 'none',\n },\n },\n usrIcon: {\n width: '28px',\n height: '28px',\n minWidth: 'auto',\n backgroundColor: '#7e84a31c',\n borderRadius: \"4px\"\n },\n userName: {\n paddingLeft: \"10px\",\n paddingRight: \"1rem\"\n },\n helpText: {\n paddingLeft: '.5rem'\n },\n pr_4: {\n paddingRight: '2rem'\n },\n AngleDown: {\n color: '#B4C6CC'\n },\n QuestionIcon: {\n marginRight: '7px'\n },\n avatarIcon: {\n color: '#7E84A3'\n },\n MenuRoot: {\n marginTop: '40px',\n\n },\n MenuItem: {\n borderBottom: \".3px solid #70707045\",\n '@media(max-width: 991px)': {\n fontSize: '12px'\n }\n },\n menuIcon: {\n marginRight: \".90rem\",\n '@media(max-width: 1440px)': {\n marginRight: \".70rem\",\n }\n },\n logoutText: {\n color: '#FF6060'\n },\n notifiText: {\n paddingLeft: '10px'\n },\n mobileHelpItem: {\n paddingLeft: \".5rem\"\n },\n signupBtn: {\n background: 'transparent',\n border: '2px solid #1DBF73',\n color: '#1DBF73',\n height: 38,\n width: 135,\n fontSize: 15,\n fontWeight: 700,\n\n '@media(max-width: 575px)': {\n width: 75,\n height: 36,\n },\n '&:hover': {\n background: \"#1DBF73!important\",\n color: '#fff!important'\n }\n },\n loginBtn: {\n background: '#1DBF73!important',\n height: 38,\n width: 135,\n color: '#fff',\n marginLeft: '1rem',\n fontSize: 15,\n fontWeight: 700,\n '@media(max-width: 575px)': {\n width: 75,\n height: 36,\n marginLeft: '10px',\n },\n\n },\n lightText: {\n color: '#000'\n },\n darkText: {\n color: '#fff'\n },\n switchButton: {\n marginLeft: '5px',\n marginRight: '5px'\n },\n mr15: {\n marginRight: '15px'\n }\n}))\n\nexport default function LandingPageNavbar({ toggle, setToggle }) {\n const { width } = useWindowDimensions()\n const classes = useStyles()\n const [anchorEl, setAnchorEl] = React.useState(null)\n const [mobileMoreAnchorEl, setMobileMoreAnchorEl] = React.useState(null)\n\n const isMenuOpen = Boolean(anchorEl)\n const isMobileMenuOpen = Boolean(mobileMoreAnchorEl)\n\n const handleProfileMenuOpen = (event) => {\n setAnchorEl(event.currentTarget)\n }\n\n const handleMobileMenuClose = () => {\n setMobileMoreAnchorEl(null)\n }\n\n const handleMenuClose = () => {\n setAnchorEl(null)\n handleMobileMenuClose()\n }\n\n const menuId = 'primary-search-account-menu'\n const renderMenu = (\n <Menu\n anchorEl={anchorEl}\n anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\n id={menuId}\n keepMounted\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n open={isMenuOpen}\n onClose={handleMenuClose}\n className={toggle ? 'darkProfile-dropdown' : 'lightProfile-dropdown'}\n\n >\n {/* <MenuItem onClick={handleMenuClose} className={classes.MenuItem}>\n <SettingIcon className={classes.menuIcon} />\n <span>Settings</span>\n </MenuItem> */}\n <MenuItem onClick={handleMenuClose} className={classes.MenuItem}>\n <EditProfileIcon className={classes.menuIcon} />\n <span>Edit Profile</span>\n </MenuItem>\n <MenuItem onClick={handleMenuClose} className={classes.MenuItem}>\n <LogoutIcon className={classes.menuIcon} />\n <span className={classes.logoutText}>Logout</span>\n </MenuItem>\n </Menu>\n )\n\n const mobileMenuId = 'primary-search-account-menu-mobile'\n const renderMobileMenu = (\n <Menu\n anchorEl={mobileMoreAnchorEl}\n anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\n id={mobileMenuId}\n keepMounted\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n open={isMobileMenuOpen}\n onClose={handleMobileMenuClose}\n >\n {/* <MenuItem>\n <Box display='flex' alignItems=\"center\" className={classes.mobileHelpItem} >\n <QuestionIcon />\n <p className={classes.helpText}>Help</p>\n </Box>\n </MenuItem> */}\n <MenuItem>\n <IconButton aria-label=\"show 17 new notifications\" color=\"inherit\" style={{ width: '30px', height: \"28px\" }}>\n <Badge color=\"secondary\" variant=\"dot\">\n <NotificationIcon />\n </Badge>\n </IconButton>\n <p className={classes.notifiText}>Notifications</p>\n </MenuItem>\n\n <MenuItem onClick={handleProfileMenuOpen}>\n <Button className={classes.usrIcon}>\n <PersonOutlineIcon className={classes.avatarIcon} />\n </Button>\n <p className={classes.userName}>Fernando Cabral</p>\n <KeyboardArrowDownIcon className={classes.AngleDown} />\n </MenuItem>\n </Menu>\n )\n const [menuIsOpen, setMenuIsOpen] = useState(false)\n\n const menuButtonHandler = () => {\n menuIsOpen ? setMenuIsOpen(false) : setMenuIsOpen(true)\n }\n return (\n <Fragment>\n {width <= 890 &&\n <Sidebar style={{\n display: width <= 890 ? 'block' : undefined,\n zIndex: 99,\n height: '100vh',\n transition: '.5s ease',\n transform: menuIsOpen ? 'translateX(0)' : 'translateX(-100%)'\n }} />}\n {(menuIsOpen && width <= 890) && <div onClick={menuButtonHandler}\n style={{\n idth: '100%',\n position: 'fixed',\n zIndex: '98',\n background: '#ebebeba6',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n display: width > 890 ? 'none' : undefined,\n }}></div>}\n <AppBar position=\"static\" className={`${toggle ? classes.darkRoot : classes.lightRoot}`} color='default'>\n <Toolbar className={classes.toolBarRoot} >\n\n <div className=\"logo-top\" >\n {toggle ? <Logo1 /> : <Logo />}\n </div>\n {/* <div className={classes.search}>\n <font color=\"red\">Unit testing in-progress: Aggregated Test Data will be reset in couple of days</font>\n <div className={classes.searchIcon}>\n <SearchIcon />\n </div>\n <InputBase\n placeholder=\"Search…\"\n classes={{\n root: classes.inputRoot,\n input: classes.inputInput,\n }}\n inputProps={{ 'aria-label': 'search' }}\n /> \n </div>*/}\n <div className={classes.sectionDesktop}>\n <div className={toggle ? classes.darkText : classes.lightText}>\n Light\n <Switch color=\"primary\" checked={toggle} onChange={() => setToggle(!toggle)} className={classes.switchButton} />\n <span className={classes.mr15}>Dark</span>\n {/* <Switch color=\"primary\" checked={toggle} onChange={(e) => handleChange(e)}/> */}\n </div>\n {/* <Box display='flex' alignItems=\"center\" className={classes.pr_4}>\n <QuestionIcon className={classes.QuestionIcon} />\n <p className={classes.helpText}>Help</p>\n </Box> */}\n <Box>\n <Button className={classes.signupBtn}>\n Login\n <Link className=\"link\" to=\"/login\" />\n </Button>\n </Box>\n <Box>\n <Button className={classes.loginBtn}>\n Publish Skapp\n <Link className=\"link\" to=\"/login\" />\n </Button>\n\n </Box>\n {/* <Box display=\"flex\" alignItems=\"center\" >\n\n </Box> */}\n </div>\n {width <= 960 && <Box display='flex'>\n <Box>\n <Button className={classes.signupBtn}>\n Publish App\n <Link className=\"link\" to=\"/login\" />\n </Button>\n </Box>\n <Box>\n <Button className={classes.loginBtn}>\n Login\n <Link className=\"link\" to=\"/login\" />\n </Button>\n\n </Box>\n </Box>}\n\n </Toolbar>\n </AppBar>\n {renderMobileMenu}\n {renderMenu}\n </Fragment>\n )\n}","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Navbar/Navbar.js",["763","764","765","766","767","768","769","770","771"],"import React, { useState, useEffect, Fragment } from 'react'\nimport { useSelector, useDispatch } from \"react-redux\"\nimport { fade, makeStyles } from '@material-ui/core/styles'\nimport AppBar from '@material-ui/core/AppBar'\nimport Toolbar from '@material-ui/core/Toolbar'\nimport IconButton from '@material-ui/core/IconButton'\nimport InputBase from '@material-ui/core/InputBase'\nimport Badge from '@material-ui/core/Badge'\nimport Switch from \"@material-ui/core/Switch\";\nimport MenuItem from '@material-ui/core/MenuItem'\nimport Menu from '@material-ui/core/Menu'\nimport PersonOutlineIcon from '@material-ui/icons/PersonOutline'\nimport { createMuiTheme, ThemeProvider } from \"@material-ui/core/styles\";\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown'\n// import MenuIcon from '@material-ui/icons/Menu'\nimport SearchIcon from '@material-ui/icons/Search'\n// import Icon from '@material-ui/core/Icon'\n// import grey from '@material-ui/core/colors/grey'\n// import MailIcon from '@material-ui/icons/Mail'\n// import NotificationsIcon from '@material-ui/icons/Notifications'\nimport MoreIcon from '@material-ui/icons/MoreVert'\n// logo\nimport { ReactComponent as Logo } from '../../assets/img/icons/logo.svg'\nimport { ReactComponent as Logo1 } from '../../assets/img/icons/logo1.svg'\n\n// icons custom\nimport { ReactComponent as QuestionIcon } from '../../assets/img/icons/question.svg'\nimport { ReactComponent as SettingIcon } from '../../assets/img/icons/setting.svg'\nimport { ReactComponent as EditProfileIcon } from '../../assets/img/icons/edit-profile.svg'\nimport { ReactComponent as LogoutIcon } from '../../assets/img/icons/exit-log-out.2.svg'\nimport { ReactComponent as NotificationIcon } from '../../assets/img/icons/notification.svg'\nimport { ReactComponent as CustomMenuIcon } from '../../assets/img/icons/Icon ionic-ios-menu.svg'\nimport { Box, Button, Tooltip, Typography } from '@material-ui/core'\nimport Sidebar from '../Sidebar/Sidebar'\n// import { Translate } from '@material-ui/icons'\nimport useWindowDimensions from '../../hooks/useWindowDimensions'\nimport { setLoaderDisplay } from '../../redux/action-reducers-epic/SnLoaderAction'\nimport { clearAllfromIDB, IDB_STORE_SKAPP } from \"../../service/SnIndexedDB\"\nimport { BROWSER_STORAGE } from \"../../utils/SnConstants\"\nimport { setUserSession } from \"../../redux/action-reducers-epic/SnUserSessionAction\"\nimport { useHistory } from \"react-router-dom\"\nimport { getProfile, getPreferences } from '../../service/SnSkappService';\nimport { setUserProfileAction } from '../../redux/action-reducers-epic/SnUserProfileAction';\nimport { setUserPreferencesAction } from '../../redux/action-reducers-epic/SnUserPreferencesAction';\nimport { skylinkToUrl } from \"../../service/skynet-api\";\nconst useStyles = makeStyles((theme) => ({\n rootDark: {\n // backgroundColor: '#fff',\n backgroundColor: '#2A2C34',\n background: \"#ffff 0 % 0 % no-repeat padding-box\",\n boxShadow: '0px 1px 4px #15223214',\n\n },\n rootLight: {\n backgroundColor: '#fff',\n background: \"#ffff 0 % 0 % no-repeat padding-box\",\n boxShadow: '0px 1px 4px #15223214',\n },\n toolBarRoot: {\n justifyContent: 'space-between',\n '@media only screen and (max-width: 890px)': {\n justifyContent: 'space-between'\n }\n },\n // grow: {\n // flexGrow: 1,\n // // background: 'red'\n // '@media only screen and (max-width: 890px)': {\n // flexGrow: 0,\n // }\n // },\n menuButton: {\n display: 'none',\n marginRight: theme.spacing(2),\n '@media only screen and (max-width: 890px)': {\n display: 'block'\n }\n },\n title: {\n display: 'none',\n [theme.breakpoints.up('sm')]: {\n display: 'block',\n },\n },\n lightSearch: {\n position: 'relative',\n borderRadius: theme.shape.borderRadius,\n backgroundColor: fade('#F0F5F7', 1),\n '&:hover': {\n backgroundColor: fade(\"#F0F5F7\", 0.7),\n },\n marginRight: theme.spacing(2),\n marginLeft: 0,\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n marginLeft: theme.spacing(3),\n width: 'auto',\n },\n color: '#8B9DA5',\n '@media only screen and (max-width: 890px)': {\n display: 'none'\n }\n },\n darkSearch: {\n position: 'relative',\n borderRadius: theme.shape.borderRadius,\n backgroundColor: fade('#1E2029', 1),\n '&:hover': {\n backgroundColor: fade(\"#1E2029\", 0.7),\n },\n marginRight: theme.spacing(2),\n marginLeft: 0,\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n marginLeft: theme.spacing(3),\n width: 'auto',\n },\n color: '#8B9DA5',\n '@media only screen and (max-width: 890px)': {\n display: 'none'\n }\n },\n searchIcon: {\n padding: theme.spacing(0, 2),\n height: '100%',\n position: 'absolute',\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#B4C6CC'\n },\n lightInputRoot: {\n // color: 'inherit',\n color: '#2A2C34!important',\n },\n darkInputRoot: {\n color: '#ffffff!important',\n border: '1px solid D9E1EC'\n },\n inputInput: {\n padding: theme.spacing(1, 1, 1, 0),\n paddingLeft: `calc(1em + ${theme.spacing(4)}px)`,\n transition: theme.transitions.create('width'),\n width: '100%',\n [theme.breakpoints.up('md')]: {\n width: '30ch',\n },\n [theme.breakpoints.up('lg')]: {\n width: '50ch',\n },\n },\n // lightInputColor: {\n // },\n // darkInputColor: {\n // background: '#1E2029',\n // },\n sectionDesktop: {\n display: 'none',\n [theme.breakpoints.up('md')]: {\n display: 'flex',\n },\n },\n sectionMobile: {\n display: 'flex',\n [theme.breakpoints.up('md')]: {\n display: 'none',\n },\n },\n usrIcon: {\n\n width: '28px',\n height: '28px',\n minWidth: 'auto',\n backgroundColor: '#7e84a31c',\n borderRadius: \"4px\",\n padding: 0\n },\n userName: {\n paddingLeft: \"10px\",\n paddingRight: \"1rem\",\n textTransform: 'capitalize',\n maxWidth: 110,\n },\n helpText: {\n paddingLeft: '.5rem'\n },\n pr_4: {\n paddingRight: '2rem'\n },\n AngleDown: {\n color: '#B4C6CC'\n },\n QuestionIcon: {\n marginRight: '7px'\n },\n avatarIcon: {\n color: '#7E84A3'\n },\n MenuRoot: {\n marginTop: '40px',\n\n },\n MenuItem: {\n borderBottom: \".3px solid #70707045\",\n '@media(max-width: 991px)': {\n fontSize: '12px'\n }\n },\n /* darkMenuColor: {\n color: '#fff',\n background:'#2A2C34',\n },\n lightMenuColor: {\n color: '#000',\n background:'#fff',\n }, */\n menuIcon: {\n marginRight: \".90rem\",\n '@media(max-width: 1440px)': {\n marginRight: \".70rem\",\n }\n },\n logoutText: {\n color: '#FF6060'\n },\n notifiText: {\n paddingLeft: '10px'\n },\n mobileHelpItem: {\n paddingLeft: \".5rem\"\n },\n lightText: {\n color: '#000'\n },\n darkText: {\n color: '#fff'\n },\n switchButton: {\n marginLeft: '5px',\n marginRight: '5px'\n }\n}))\n\nexport default function Navbar({ toggle, setToggle }) {\n\n const dispatch = useDispatch()\n const history = useHistory()\n const { width } = useWindowDimensions()\n const classes = useStyles()\n const [anchorEl, setAnchorEl] = React.useState(null)\n const [mobileMoreAnchorEl, setMobileMoreAnchorEl] = React.useState(null)\n\n const LightTheme = createMuiTheme({\n palette: {\n type: 'light',\n }\n })\n\n const DarkTheme = createMuiTheme({\n palette: {\n type: 'dark',\n }\n })\n\n /* const handleChange = (e) => {\n setLightMode(!lightMode);\n\n if(lightMode) {\n LightTheme();\n } else {\n DarkTheme();\n }\n } */\n\n const isMenuOpen = Boolean(anchorEl)\n const isMobileMenuOpen = Boolean(mobileMoreAnchorEl)\n const userSession = useSelector((state) => state.userSession)\n // alert(\"NAV--userSession\"+userSession);\n // alert(\"NAV--userSession:userID\"+userSession?.userID);\n // alert(\"NAV--userSession:mysky\"+userSession?.mySky);\n // alert(\"NAV--userSession:dac\"+userSession?.dacs.userProfileDAC);\n const [person, setPerson] = useState({ username: \"Anonymous\", url: \"\" });\n\n const userProfile = useSelector((state) => state.snUserProfile)\n const userPreferences = useSelector((state) => state.snUserPreferences)\n useEffect(() => {\n let avatarURl = userProfile?.avatar ? userProfile?.avatar[0]?.url : null;\n setPerson({ username: userProfile?.username, url: avatarURl });\n }, [userProfile]);\n\n useEffect(() => {\n const reloadReduxState = async () => {\n if (userSession?.mySky != null) {\n console.log(\"#### On Refresh : Reload Redux State ####\");\n console.log(\"#### On Refresh : Reload Redux State #### [userProfile]\");\n const userProfile = await getProfile();\n let avatarURl = userProfile?.avatar ? userProfile?.avatar[0]?.url : null;\n setPerson({ username: userProfile?.username, url: avatarURl });\n dispatch(setUserProfileAction(userProfile));\n console.log(\"#### On Refresh : Reload Redux State #### [userPrefrences]\");\n const userPrefrences = await getPreferences();\n dispatch(setUserPreferencesAction(userPrefrences));\n }\n }\n reloadReduxState();\n }, []);\n\n const handleProfileMenuOpen = (event) => {\n setAnchorEl(event.currentTarget)\n }\n\n const handleMobileMenuClose = () => {\n setMobileMoreAnchorEl(null)\n }\n\n const handleMenuClose = () => {\n setAnchorEl(null)\n handleMobileMenuClose()\n }\n const handleSettings = () => {\n setAnchorEl(null)\n handleMobileMenuClose()\n if (userSession != null) {\n history.push('/usersettings')\n }\n }\n\n const handleMobileMenuOpen = (event) => {\n setMobileMoreAnchorEl(event.currentTarget)\n }\n\n\n const handleMySkyLogout = async () => {\n try {\n dispatch(setLoaderDisplay(true));\n if (userSession?.mySky) {\n try {\n await userSession.mySky.logout();\n }\n catch (e) {\n console.log(\"Error during logout process.\" + e)\n }\n }\n await clearAllfromIDB({ store: IDB_STORE_SKAPP });\n BROWSER_STORAGE.clear();\n await dispatch(setUserSession(null));\n dispatch(setLoaderDisplay(false));\n window.location.href = window.location.origin\n\n } catch (e) {\n console.log(\"Error during logout process.\" + e)\n dispatch(setLoaderDisplay(false))\n }\n }\n const menuId = 'primary-search-account-menu'\n const renderMenu = (\n <Menu\n anchorEl={anchorEl}\n anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\n id={menuId}\n keepMounted\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n open={isMenuOpen}\n onClose={handleMenuClose}\n className={toggle ? 'darkProfile-dropdown' : 'lightProfile-dropdown'}\n\n >\n {/* <MenuItem onClick={handleSettings} className={classes.MenuItem}>\n <SettingIcon className={classes.menuIcon} />\n <span>Settings</span>\n </MenuItem>*/}\n <MenuItem onClick={handleSettings} className={classes.MenuItem}>\n <EditProfileIcon className={classes.menuIcon} />\n <span>Edit Profile</span>\n </MenuItem>\n <MenuItem onClick={handleMySkyLogout} className={classes.MenuItem}>\n <LogoutIcon className={classes.menuIcon} />\n <span className={classes.logoutText}>Logout</span>\n </MenuItem>\n </Menu>\n )\n\n const mobileMenuId = 'primary-search-account-menu-mobile'\n const renderMobileMenu = (\n <Menu\n anchorEl={mobileMoreAnchorEl}\n anchorOrigin={{ vertical: 'top', horizontal: 'right' }}\n id={mobileMenuId}\n keepMounted\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n open={isMobileMenuOpen}\n onClose={handleMobileMenuClose}\n >\n {/* <MenuItem>\n <Box display='flex' alignItems=\"center\" className={classes.mobileHelpItem} >\n <QuestionIcon />\n <p className={classes.helpText}>Help</p>\n </Box>\n </MenuItem> */}\n <MenuItem>\n <IconButton aria-label=\"show 17 new notifications\" color=\"inherit\" style={{ width: '30px', height: \"28px\" }}>\n <Badge color=\"secondary\" variant=\"dot\">\n <NotificationIcon />\n </Badge>\n </IconButton>\n <p className={classes.notifiText}>Notifications</p>\n </MenuItem>\n <MenuItem onClick={handleProfileMenuOpen}>\n <Button className={classes.usrIcon}>\n {person.url ? (\n <img width=\"100%\" src={skylinkToUrl(person.url)} alt=\"\" />\n ) : (\n <PersonOutlineIcon className={classes.avatarIcon} />\n )}\n </Button>\n <Tooltip title={person.username} placement=\"top\" arrow >\n <Typography className={classes.userName} noWrap>{person.username}</Typography>\n </Tooltip>\n <KeyboardArrowDownIcon className={classes.AngleDown} />\n </MenuItem>\n </Menu>\n )\n const [menuIsOpen, setMenuIsOpen] = useState(false)\n\n const menuButtonHandler = () => {\n menuIsOpen ? setMenuIsOpen(false) : setMenuIsOpen(true)\n }\n return (\n <Fragment>\n {width <= 890 &&\n <Sidebar style={{\n display: width <= 890 ? 'block' : undefined,\n zIndex: 99,\n height: '100vh',\n transition: '.5s ease',\n transform: menuIsOpen ? 'translateX(0)' : 'translateX(-100%)'\n }} />}\n {(menuIsOpen && width <= 890) && <div onClick={menuButtonHandler}\n style={{\n idth: '100%',\n position: 'fixed',\n zIndex: '98',\n background: '#ebebeba6',\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n display: width > 890 ? 'none' : undefined,\n }}></div>}\n <AppBar position=\"static\" className={toggle ? classes.rootDark : classes.rootLight} color='default'>\n <Toolbar className={classes.toolBarRoot} >\n <IconButton edge=\"start\" onClick={menuButtonHandler} className={classes.menuButton} color=\"inherit\" aria-label=\"menu\">\n <CustomMenuIcon />\n </IconButton>\n <div className=\"logo-top\" >\n {toggle ? <Logo1 /> : <Logo />}\n </div>\n {/* <div className={toggle ? classes.darkSearch : classes.lightSearch}>\n <font color=\"red\">Unit testing in-progress: Aggregated Test Data will be reset in couple of days</font>\n <div className={classes.searchIcon}>\n <SearchIcon />\n {/* <Icon style={{color: grey[50]}}>article</Icon>\n </div>\n <InputBase\n placeholder=\"Search…\"\n classes={{\n root: toggle ? classes.darkInputRoot : classes.lightInputRoot,\n input: classes.inputInput,\n }}\n inputProps={{ 'aria-label': 'search' }}\n /> \n </div>*/}\n <div className={toggle ? classes.darkText : classes.lightText}>\n Light\n <Switch color=\"primary\" checked={toggle} onChange={() => setToggle(!toggle)} className={classes.switchButton} />\n Dark\n {/* <Switch color=\"primary\" checked={toggle} onChange={(e) => handleChange(e)}/> */}\n </div>\n\n <div className={classes.sectionDesktop}>\n {/* <Box display='flex' alignItems=\"center\" className={classes.pr_4}>\n <QuestionIcon className={classes.QuestionIcon} />\n <p className={classes.helpText}>Help</p>\n </Box> */}\n <Box display=\"flex\" alignItems=\"center\" className={classes.pr_4}>\n\n <IconButton aria-label=\"show 17 new notifications\" color=\"inherit\" style={{ width: '30px', height: \"28px\" }}>\n <Badge color=\"secondary\" variant=\"dot\">\n <NotificationIcon />\n </Badge>\n </IconButton>\n </Box>\n\n <Box display=\"flex\" alignItems=\"center\" onClick={handleProfileMenuOpen}>\n <Button className={classes.usrIcon} >\n {person.url ? (\n <img width=\"100%\" src={skylinkToUrl(person.url)} alt=\"\" />\n ) : (\n <PersonOutlineIcon className={classes.avatarIcon} />\n )}\n </Button>\n <Tooltip title={person.username} placement=\"top\" arrow >\n <Typography className={classes.userName} noWrap>{person.username}</Typography>\n </Tooltip>\n <KeyboardArrowDownIcon className={classes.AngleDown} />\n </Box>\n </div>\n <div className={classes.sectionMobile}>\n <IconButton\n aria-label=\"show more\"\n aria-controls={mobileMenuId}\n aria-haspopup=\"true\"\n onClick={handleMobileMenuOpen}\n color=\"inherit\"\n >\n <MoreIcon />\n </IconButton>\n </div>\n </Toolbar>\n </AppBar>\n {renderMobileMenu}\n {renderMenu}\n </Fragment>\n )\n}\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/utils/SnConstants.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/Apps.js",["772","773","774","775","776","777","778","779","780"],"import { Box, InputBase } from \"@material-ui/core\";\nimport React, { Fragment, useEffect, useState } from \"react\";\nimport { fade, makeStyles } from \"@material-ui/core/styles\";\nimport SearchIcon from \"@material-ui/icons/Search\";\nimport { useHistory } from \"react-router-dom\";\nimport UtilitiesItem from \"./UtilitiesItem\";\nimport ListFilter from \"./ListFilter\";\nimport SelectItem from \"./SelectItem\";\nimport SubmitBtn from \"./SubmitBtn\";\nimport AppsList from \"./AppsList\";\nimport useWindowDimensions from \"../../hooks/useWindowDimensions\";\n// import PerfectScrollbar from 'react-perfect-scrollbar'\nimport CustomPagination from \"./CustomPagination\";\nimport SelectedAppsHeader from \"./SelectedAppsHeader\";\nimport { getMyPublishedAppsAction } from \"../../redux/action-reducers-epic/SnPublishAppAction\";\nimport { getMyInstalledAppsAction, installedAppAction, unInstalledAppAction } from \"../../redux/action-reducers-epic/SnInstalledAppAction\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { installApp } from '../../service/SnSkappService'\nimport { setLoaderDisplay } from '../../redux/action-reducers-epic/SnLoaderAction'\nimport NoApps from '../OtherPages/NoApps';\n\nconst useStyles = makeStyles((theme) => ({\n search: {\n position: \"relative\",\n borderRadius: theme.shape.borderRadius,\n backgroundColor: fade(\"#fff\", 1),\n \"&:hover\": {\n backgroundColor: fade(\"#fff\", 0.9),\n },\n marginRight: theme.spacing(2),\n // marginLeft: 0,\n width: \"100%\",\n [theme.breakpoints.up(\"sm\")]: {\n marginLeft: theme.spacing(3),\n width: \"auto\",\n },\n color: \"#8B9DA5\",\n boxShadow: \"0px 1px 2px #15223214\",\n border: \"1px solid #7070701A;\",\n // hieght: '41px',\n marginLeft: \"16px!important\",\n \"@media (max-width: 1650px)\": {\n width: \"auto\",\n },\n },\n searchIcon: {\n padding: theme.spacing(0, 2),\n height: \"100%\",\n position: \"absolute\",\n pointerEvents: \"none\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"#B4C6CC\",\n },\n inputRoot: {\n color: \"inherit\",\n },\n inputInput: {\n // padding: theme.spacing(1, 1, 1, 0),\n paddingLeft: `calc(1em + ${theme.spacing(4)}px)`,\n transition: theme.transitions.create(\"width\"),\n width: \"100%\",\n [theme.breakpoints.up(\"md\")]: {\n width: \"100%\",\n },\n [theme.breakpoints.up(\"lg\")]: {\n width: \"50ch\",\n },\n paddingTop: \"10px\",\n paddingBottom: \"10px\",\n \"@media (max-width: 1660px)\": {\n width: \"34ch\",\n },\n \"@media (max-width: 1460px)\": {\n width: \"100%\",\n },\n },\n\n pageHeading: {\n color: \"#131523\",\n fontSize: \"28px\",\n },\n smallText: {\n alignSelf: \"flex-end\",\n color: \"#5A607F\",\n paddingLeft: \"1rem\",\n fontWeight: \"400\",\n },\n Media1249: {\n width: \"calc(100% - 230px)\",\n marginLeft: \"auto!important\",\n marginRight: 0,\n \"@media only screen and (max-width: 890px)\": {\n width: \"100%\",\n },\n },\n margnBottomMediaQuery: {\n \"@media only screen and (max-width: 1249px)\": {\n marginBottom: \".75rem\",\n },\n },\n // PerfectScrollbarContainer: {\n // padding: '1rem 1.4rem',\n // paddingBottom: '0',\n // height: 'calc(100vh - 64px)',\n // '@media only screen and (max-width: 575px)': {\n // padding: '.5rem',\n // },\n // },\n // mobileSave: {\n // padding: '1rem 1.4rem',\n // paddingBottom: '0',\n // height: 'calc(100vh - 64px)',\n // overflow: \"auto\",\n // '@media only screen and (max-width: 575px)': {\n // padding: '.5rem',\n // },\n // },\n secondNavRow2: {\n \"@media only screen and (max-width: 890px)\": {\n justifyContent: \"space-between\",\n },\n \"@media only screen and (max-width: 575px) and (min-width: 509px)\": {\n marginBottom: \".6rem\",\n },\n \"@media only screen and (max-width: 510px)\": {\n flexWrap: \"wrap\",\n \"& > div\": {\n width: \"50%\",\n minWidth: \"50%\",\n maxWidth: \"50%\",\n marginBottom: \".75rem\",\n },\n \"& > div:nth-child(odd)\": {\n paddingRight: \"1rem\",\n },\n },\n },\n MobileFontStyle: {\n \"@media only screen and (max-width: 575px) \": {\n marginBottom: \".7rem\",\n marginTop: \".4rem\",\n \"& h1\": {\n fontSize: \"18px\",\n },\n },\n },\n}))\n\nfunction Apps({toggle}) {\n const dispatch = useDispatch();\n const { publishedAppsStore } = useSelector((state) => state.snPublishedAppsStore);\n const { installedAppsStore } = useSelector((state) => state.snInstalledAppsStore);\n const [isLoading, setIsLoading] = useState(false);\n const history = useHistory();\n\n useEffect(async () => {\n // console.log(\"came here\");\n setIsLoading(true);\n await dispatch(getMyPublishedAppsAction());\n await dispatch(getMyInstalledAppsAction());\n setIsLoading(false);\n }, []);\n // temp var for selected page\n const selectedPage = false\n // This page code\n\n const { width } = useWindowDimensions();\n const classes = useStyles();\n \n const handleInstall = async (item, key) => {\n if (key == \"install\") {\n dispatch(installedAppAction(item));\n } else {\n dispatch(unInstalledAppAction(item.id));\n }\n }\n\n {toggle ? document.body.className = \"darkBodyColor\" : document.body.className = \"lightBodyColor\"}\n\n const AppsComp = (\n <Fragment>\n <Box display=\"flex\" className=\"second-nav\" alignItems=\"center\">\n <Box\n display=\"flex\"\n\n alignItems=\"center\"\n className={`${classes.margnBottomMediaQuery} ${classes.MobileFontStyle}`}\n >\n <h1 className={classes.pageHeading}>My Published Apps</h1>\n <small className={classes.smallText}>{publishedAppsStore.length} Results</small>\n </Box>\n {width < 1250 && (\n //remove the style property to show it again, in future\n <div\n className={`${classes.search} ${classes.Media1249} ${classes.margnBottomMediaQuery}`}\n style={{ display: 'none' }}\n >\n <Box>\n <div className={classes.searchIcon}>\n <SearchIcon />\n </div>\n </Box>\n <InputBase\n placeholder=\"Search Apps\"\n classes={{\n root: classes.inputRoot,\n input: classes.inputInput,\n }}\n inputProps={{ \"aria-label\": \"search\" }}\n />\n </div>\n )}\n <Box\n className={classes.secondNavRow2}\n display=\"flex\"\n alignItems=\"center\"\n flex={1}\n justifyContent=\"flex-end\"\n >\n {/* <Box>\n <UtilitiesItem />\n </Box> */}\n\n {width > 1249 && (\n //remove the style property to show it again, in future\n <div className={classes.search} style={{ display: 'none' }}>\n <Box>\n <div className={classes.searchIcon}>\n <SearchIcon />\n </div>\n </Box>\n <InputBase\n placeholder=\"Search Apps\"\n classes={{\n root: classes.inputRoot,\n input: classes.inputInput,\n }}\n inputProps={{ \"aria-label\": \"search\" }}\n />\n </div>\n )}\n {/* <Box>\n <ListFilter />\n </Box> */}\n <Box>\n {selectedPage && <SelectItem />}\n </Box>\n <Box>\n <SubmitBtn onClick={(e) => history.push('/submitapp')}>Publish App</SubmitBtn>\n </Box>\n </Box>\n </Box>\n {/* When items are selectable */}\n {selectedPage && <SelectedAppsHeader />}\n { !isLoading && publishedAppsStore.length > 0 ?\n <div>\n <AppsList newData={publishedAppsStore} installedApps={installedAppsStore} updated={undefined} handleInstall={handleInstall}/>\n </div>\n : <NoApps toggle={toggle} showTitle={true} pageTitle=\"My Published Apps\" heading=\"No Published Apps to display\" pharase=\"Publish your App using 'Publish App' BUTTON\" />\n }\n {/* <Box paddingTop=\"1.2rem\" paddingBottom=\"1rem\">\n <CustomPagination />\n </Box> */}\n </Fragment>\n )\n const finalComp = (publishedAppsStore.length ? AppsComp : (<NoApps \n toggle={toggle}\n msg='No Published Apps to display in AppStore. Publish your App using \"Publish App\" BUTTON '\n btnText=\"Publish App\"\n pageType=\"Published\"\n link=\"/submitapp\"\n />))\n return (\n // (width < 575)\n // ? <div className={classes.mobileSave}>{AppsComp}</div>\n // : < PerfectScrollbar className={classes.PerfectScrollbarContainer} >{AppsComp}</PerfectScrollbar>\n // <div>{AppsComp}\n <>\n\n { finalComp}\n\n </>\n )\n}\n\nexport default Apps\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/AppStore.js",["781","782","783","784","785","786","787","788","789","790","791","792","793","794"],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/OtherPages/NoApps.js",["795","796","797","798"],"import React, { Fragment } from 'react'\nimport { Box, Button, makeStyles } from '@material-ui/core'\nimport { Link } from 'react-router-dom'\nimport styles from '../../assets/jss/no-apps/NoAppsStyle'\nimport { ReactComponent as RoundedBoxs } from '../../assets/img/icons/roundedBoxs.svg'\nimport { userProfileDacTest } from '../../service/dac/userprofile-api'\nimport { useSelector } from \"react-redux\"\nconst useStyles = makeStyles(styles)\n\nconst NoApps = ({ pageTitle, heading, pharase, showTitle, toggle }) => {\n// const NoApps = ({ btnText, pageType, msg, link }) => {\n\n const classes = useStyles()\n\n const stUserSession = useSelector((state) => state.userSession) \n\n {toggle ? document.body.className = \"darkBodyColor\" : document.body.className = \"lightBodyColor\"}\n\n return (\n <Fragment>\n { !showTitle ? <h1 className={toggle ? classes.lighth1 : classes.darkh1}> { pageTitle ? pageTitle : `My Apps`} </h1> : null }\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"center\" minHeight=\"calc(100vh - 200px)\" flexDirection=\"column\" paddingTop=\"1rem\" paddingBottom=\"1rem\">\n <div className={classes.boxIcon}>\n <RoundedBoxs />\n </div>\n <h2 className={toggle ? classes.lighth2 : classes.darkh2}>{ heading ? heading : `No apps installed`}</h2>\n <p className={classes.p}>{pharase ? pharase : `Go to app store, Explore apps and install`}</p>\n {/* <Button className={classes.button} onClick={() => userProfileDacTest(stUserSession)}> */}\n <Button className={classes.button} >\n Discover Apps\n\n {/* <h2 className={classes.h2}>No apps {pageType}</h2>\n <p className={classes.p}>{msg}</p>\n <Button className={classes.button}>\n {btnText}\n <Link className=\"link\" to={link}></Link> */}\n\n </Button>\n </Box>\n </Fragment>\n )\n}\nexport default NoApps\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/InstalledApps.js",["799","800","801","802","803","804","805","806","807","808","809","810"],"import { Box, Button, Grid, InputBase } from '@material-ui/core'\nimport React, { Fragment, useEffect, useState } from 'react'\nimport { fade, makeStyles } from '@material-ui/core/styles'\nimport SearchIcon from '@material-ui/icons/Search'\n\nimport ListFilter from './ListFilter'\nimport SelectItem from './SelectItem'\nimport useWindowDimensions from '../../hooks/useWindowDimensions'\n\nimport AppCard from './AppCard'\nimport styles from \"../../assets/jss/apps/AppListStyle\"\nimport { getMyInstalledApps, installApp } from '../../service/SnSkappService'\nimport { setLoaderDisplay } from '../../redux/action-reducers-epic/SnLoaderAction'\nimport { useDispatch, useSelector } from 'react-redux';\nimport AppsList from \"./AppsList\";\nimport { getMyInstalledAppsAction, installedAppAction, unInstalledAppAction } from \"../../redux/action-reducers-epic/SnInstalledAppAction\";\nimport NoApp from '../OtherPages/NoApps';\n\nconst useStyles = makeStyles(theme => (\n {\n search: {\n position: 'relative',\n borderRadius: theme.shape.borderRadius,\n backgroundColor: fade('#fff', 1),\n '&:hover': {\n backgroundColor: fade(\"#fff\", 0.9),\n },\n marginRight: theme.spacing(2),\n // marginLeft: 0,\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n marginLeft: theme.spacing(3),\n width: 'auto',\n },\n color: '#8B9DA5',\n boxShadow: '0px 1px 2px #15223214',\n border: '1px solid #7070701A;',\n // hieght: '41px',\n marginLeft: '16px!important',\n '@media (max-width: 1650px)': {\n width: 'auto'\n },\n\n },\n searchIcon: {\n padding: theme.spacing(0, 2),\n height: '100%',\n position: 'absolute',\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#B4C6CC'\n },\n inputRoot: {\n color: 'inherit',\n },\n inputInput: {\n\n paddingLeft: `calc(1em + ${theme.spacing(4)}px)`,\n transition: theme.transitions.create('width'),\n width: '100%',\n [theme.breakpoints.up('md')]: {\n width: '100%',\n },\n [theme.breakpoints.up('lg')]: {\n width: '20ch',\n },\n paddingTop: '10px',\n paddingBottom: '10px',\n '@media (max-width: 1660px)': {\n width: '34ch'\n },\n '@media (max-width: 1460px)': {\n width: '100%'\n }\n\n },\n\n pageHeading: {\n color: '#131523',\n fontSize: '28px',\n },\n smallText: {\n alignSelf: \"flex-end\",\n color: '#5A607F',\n paddingLeft: '1rem',\n fontWeight: '400'\n },\n Media1249: {\n width: 'calc(100% - 230px)',\n marginLeft: 'auto!important',\n marginRight: 0,\n '@media only screen and (max-width: 890px)': {\n width: '100%',\n },\n\n },\n margnBottomMediaQuery: {\n '@media only screen and (max-width: 1249px)': {\n marginBottom: '.75rem'\n },\n\n\n },\n\n secondNavRow2: {\n '@media only screen and (max-width: 890px)': {\n justifyContent: 'space-between'\n },\n '@media only screen and (max-width: 575px) and (min-width: 509px)': {\n marginBottom: '.6rem'\n }\n , '@media only screen and (max-width: 510px)': {\n flexWrap: 'wrap',\n \"& > div\": {\n width: '50%',\n minWidth: '50%',\n maxWidth: '50%',\n marginBottom: '.75rem'\n },\n \"& > div:nth-child(odd)\": {\n paddingLeft: '1rem'\n\n }\n },\n },\n MobileFontStyle: {\n '@media only screen and (max-width: 575px) ': {\n marginBottom: '.7rem',\n marginTop: '.4rem',\n '& h1': {\n fontSize: '18px'\n }\n }\n },\n ...styles,\n btnSecondNav: {\n color: '#7E84A3',\n backgroundColor: '#fff!important',\n boxShadow: '0px 1px 2px #15223214',\n border: '1px solid #7070701A',\n borderRadius: 4\n },\n btnSecondNavContainer: {\n marginLeft: '1rem',\n [theme.breakpoints.down('sm')]: {\n display: 'none'\n },\n }\n }\n))\nfunction InstalledApps({toggle}) {\n // temp var for selected page\n // const selectedPage = true\n\n const { width } = useWindowDimensions();\n const classes = useStyles();\n const dispatch = useDispatch();\n\n const [installedAppListObj, setInstalledAppListObj] = useState([]);\n const [isLoading, setIsLoading] = useState(false);\n // const [searchStr, setSearchStr] = useState(\"\");\n\n const { installedAppsStore } = useSelector((state) => state.snInstalledAppsStore);\n useEffect(() => {\n setIsLoading(true);\n dispatch(getMyInstalledAppsAction());\n setIsLoading(false);\n }, []);\n\n const handleInstall = async (item, key) => {\n if (key == \"install\") {\n dispatch(installedAppAction(item));\n } else {\n dispatch(unInstalledAppAction(item.id));\n }\n }\n\n return (\n <Fragment>\n {\n !isLoading && installedAppsStore.length > 0 ?\n <Fragment>\n <Box display=\"flex\" className='second-nav' alignItems=\"center\">\n <Box display=\"flex\" alignItems=\"center\" className={`${classes.margnBottomMediaQuery} ${classes.MobileFontStyle}`}>\n <h1 className={classes.pageHeading}>Apps</h1>\n <small className={classes.smallText}>{installedAppsStore.length} Results</small>\n </Box>\n {width < 1250 && <div className={`${classes.search} ${classes.Media1249} ${classes.margnBottomMediaQuery}`}>\n <Box>\n <div className={classes.searchIcon}>\n <SearchIcon />\n </div>\n </Box>\n <InputBase\n placeholder=\"Search Apps\"\n classes={{\n root: classes.inputRoot,\n input: classes.inputInput,\n }}\n inputProps={{ 'aria-label': 'search' }}\n />\n </div>}\n <Box className={classes.secondNavRow2} display=\"flex\" alignItems=\"center\" flex={1} justifyContent='flex-end'>\n\n {/* <Box className={classes.btnSecondNavContainer}>\n <Button className={classes.btnSecondNav} style={{ color: '#000' }}> All (50)</Button>\n </Box>\n <Box className={classes.btnSecondNavContainer}>\n <Button className={classes.btnSecondNav} > Programms (12)</Button>\n </Box>\n <Box className={classes.btnSecondNavContainer}>\n <Button className={classes.btnSecondNav}>Utilities (25)</Button>\n </Box> */}\n {width > 1249 && <div className={classes.search}>\n <Box>\n <div className={classes.searchIcon}>\n <SearchIcon />\n </div>\n </Box>\n <InputBase\n placeholder=\"Search Apps\"\n classes={{\n root: classes.inputRoot,\n input: classes.inputInput,\n }}\n inputProps={{ 'aria-label': 'search' }}\n />\n </div>}\n {/* <Box>\n <ListFilter />\n </Box>\n <Box>\n <SelectItem />\n </Box> */}\n\n </Box>\n </Box>\n {/* When items are selectable */}\n {/* {selectedPage && <SelectedAppsHeader />} */}\n\n <div className={`${classes.listContain} list-grid-container`}>\n <AppsList newData={installedAppsStore} installedApps={installedAppsStore} updated={true} handleInstall={handleInstall} />\n </div>\n </Fragment>\n : <NoApp toggle={toggle} />\n }\n </Fragment>\n )\n}\n\nexport default InstalledApps\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/SubmitApp/EditPublishApp.js",["811","812","813","814","815","816","817","818","819","820","821","822","823"],"import React, { createRef, useEffect, useState } from \"react\";\nimport {\n Box,\n Button,\n makeStyles,\n Grid,\n TextareaAutosize,\n Tooltip \n} from \"@material-ui/core\";\nimport Select from \"react-select\";\nimport { Add, HelpOutline } from \"@material-ui/icons\";\nimport styles from \"../../assets/jss/app-details/SubmitAppStyles\";\n// img icon\nimport { ReactComponent as ImgIcon } from \"../../assets/img/icons/image.svg\";\nimport { useForm, Controller } from \"react-hook-form\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { useDispatch, useSelector } from 'react-redux';\n// importing action\nimport {\n publishAppAction,\n} from \"../../redux/action-reducers-epic/SnPublishAppAction\";\nimport {\n UploadImagesAction,\n UploadVideoAction,\n UploadAppLogo,\n getMyHostedApps,\n} from \"../../service/SnSkappService\";\nimport TagsInput from \"react-tagsinput\";\nimport \"./taginput.css\"; // If using WebPack and style-loader.\nimport imageCompression from \"browser-image-compression\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Loader from \"react-loader-spinner\";\nimport { useParams, useHistory } from \"react-router-dom\";\nimport { setLoaderDisplay } from \"../../redux/action-reducers-epic/SnLoaderAction\";\nimport { useLoadHostedAppFromUrl } from \"../../hooks/useLoadHostedAppFromUrl\";\nimport { skylinkToUrl } from \"../../service/skynet-api\";\nimport SnUpload from '../../uploadUtil/SnUpload';\nimport { UPLOAD_SOURCE_DEPLOY, UPLOAD_SOURCE_NEW_HOSTING, UPLOAD_SOURCE_NEW_HOSTING_IMG } from '../../utils/SnConstants';\nimport { getMyPublishedAppsAction } from \"../../redux/action-reducers-epic/SnPublishAppAction\";\n\nconst useStyles = makeStyles(styles);\nconst optionsVersion = [\n { value: \"1.0\", label: \"1.0\" },\n { value: \"1.01\", label: \"1.01\" },\n { value: \"1.02\", label: \"1.02\" },\n];\n\nconst appCatOptions = [\n { value: \"Social\", label: \"Social\" },\n { value: \"Video\", label: \"Video\" },\n { value: \"Pictures\", label: \"Pictures\" },\n { value: \"Music\", label: \"Music\" },\n { value: \"Productivity\", label: \"Productivity\" },\n { value: \"Utilities\", label: \"Utilities\" },\n { value: \"Games\", label: \"Games\" },\n { value: \"Blogs\", label: \"Blogs\" },\n { value: \"Software\", label: \"Software\" },\n { value: \"DAC\", label: \"DataAccessControl\" },\n { value: \"Livestream\", label: \"Livestream\" },\n { value: \"Books\", label: \"Books\" },\n { value: \"Marketplace\", label: \"Marketplace\" },\n { value: \"Finance\", label: \"Finance\" },\n { value: \"Portal\", label: \"Portal\" },\n];\n\nconst optionsAge = [\n { value: \"18+\", label: \"18+\" },\n { value: \"general\", label: \"general\" },\n];\n\nconst appStatusOptions = [\n { value: \"Alpha\", label: \"Alpha\" },\n { value: \"Beta\", label: \"Beta\" },\n { value: \"Live\", label: \"Live\" },\n];\n\nconst socialOption = [\n { value: \"Discord\", label: \"Discord\" },\n { value: \"Reddit\", label: \"Reddit\" },\n { value: \"Twitter\", label: \"Twitter\" },\n { value: \"Dlink\", label: \"Dlink\" },\n];\n\nconst lightReactSelectStyles = {\n control: (styles) => ({\n ...styles,\n backgroundColor: \"white\",\n height: 55,\n boxShadow: 0,\n // borderColor: \"#1DBF73\",\n borderColor: \"#D9E1EC\",\n borderRadius: 8,\n \"@media only screen and (max-width: 1440px)\": {\n height: 50,\n // width: '100%',\n fontSize: 16,\n background: '#fff',\n borderColor: '#D9E1EC'\n },\n \"@media only screen and (max-width: 575px)\": {\n height: 43,\n // width: '100%',\n fontSize: 14,\n background: '#fff',\n borderColor: '#D9E1EC'\n },\n \"&:hover\": {\n borderColor: \"#1DBF73\",\n },\n }),\n option: (styles, { data, isDisabled, isFocused, isSelected }) => ({\n ...styles,\n backgroundColor: isSelected ? \"#1DBF73\" : \"#fff\",\n \"&:foucs\": {\n backgroundColor: \"#1DBF73\",\n },\n }),\n};\n\nconst darkReactSelectStyles = {\n control: (styles) => ({\n ...styles,\n backgroundColor: \"#2A2C34\",\n height: 55,\n boxShadow: 0,\n borderColor: \"#48494E\",\n color: \"#fff!important\",\n borderRadius: 8,\n \"@media only screen and (max-width: 1440px)\": {\n height: 50,\n // width: '100%',\n fontSize: 16,\n background: '#2A2C34',\n borderColor: '#48494E'\n },\n \"@media only screen and (max-width: 575px)\": {\n height: 43,\n // width: '100%',\n fontSize: 14,\n background: '#2A2C34',\n borderColor: '#48494E'\n },\n \"&:hover\": {\n borderColor: \"#1DBF73\",\n },\n }),\n option: (styles, { data, isDisabled, isFocused, isSelected }) => ({\n ...styles,\n backgroundColor: isSelected ? \"#1DBF73\" : \"#fff\",\n \"&:foucs\": {\n backgroundColor: \"#1DBF73\",\n },\n }),\n};\n\nlet forImagesPreview = [];\nconst EditPublishApp = ({toggle}) => {\n const [category, setCategory] = useState(\"\");\n const [appStatus, setAppStatus] = useState(\"\");\n const [age, setAge] = useState(\"\");\n const dispatch = useDispatch();\n\n const [tags, setTags] = useState([]);\n const { register, handleSubmit, control, setValue } = useForm();\n const classes = useStyles();\n\n const { appId } = useParams();\n const history = useHistory();\n\n // state for social links according to format\n const [firstSocialLinkTitle, setfirstSocialLinkTitle] = useState(\"\");\n const [secondSocialLinkTitle, setSecondSocialLinkTitle] = useState(\"\");\n const [thirdSocialLinkTitle, setThirdSocialLinkTitle] = useState(\"\");\n const [appDetail, setAppDetail] = useState({});\n\n const [firstSocialLink, setfirstSocialLink] = useState(\"\");\n const [secondSocialLink, setSecondSocialLink] = useState(\"\");\n const [thirdSocialLink, setThirdSocialLink] = useState(\"\");\n\n const [videoObjt, setVideoObj] = useState({});\n\n const [mandatory, setMandatory] = useState(false);\n const [isSubmit, setIsSubmit] = useState(false);\n const [isImageUploadFirst1, setIsImageUploadingFirst1] = useState(false);\n const [isImageUploadFirst, setIsImageUploadingFirst] = useState(false);\n const [isImageUploadSecond, setIsImageUploadingSecond] = useState(false);\n const [isImageUploadThird, setIsImageUploadingThird] = useState(false);\n const [isImageUploadFirstObj1, setIsImageUploadingFirstObj1] = useState({});\n const [isImageUploadFirstObj, setIsImageUploadingFirstObj] = useState({});\n const [isImageUploadSecondObj, setIsImageUploadingSecondObj] = useState({});\n const [isImageUploadThirdObj, setIsImageUploadingThirdObj] = useState({});\n\n\n const [appLogo, setAppLogo] = useState(\"\");\n const [isLogoUploaded, setIsLogoUploaded] = useState(false);\n\n //require\n const [isAppLogoTrue, setIsAppLogoTrue] = useState(false);\n const [isAppNameTrue, setIsAppNameTrue] = useState(false);\n const [isAppVersionTrue, setIsAppVersionTrue] = useState(false);\n const [isAppUrlTrue, setIsAppUrlTrue] = useState(false);\n const [isAppCatTrue, setIsAppCatTrue] = useState(false);\n const [isAppDetailDesTrue, setIsAppDetailDesTrue] = useState(false);\n\n const imgUploadEleRef = createRef();\n const imgUploadEleRef1 = createRef();\n const imgUploadEleRef2 = createRef();\n const imgUploadEleRef3 = createRef();\n const imgUploadEleRef4 = createRef();\n \n const { publishedAppsStore } = useSelector((state) => state.snPublishedAppsStore);\n\n useEffect(async () => {\n await dispatch(getMyPublishedAppsAction()); \n if (publishedAppsStore) {\n let appJSON = publishedAppsStore.find(appData => appData.id === appId);\n if(appJSON) {\n await setAppDetail(appJSON);\n if (appJSON?.content) {\n const { appname, sourceCode, appUrl, previewVideo, previewImages, skappLogo, demoUrl, category, age, appStatus, tags, connections, appDescription, releaseNotes } = appJSON.content;\n setValue('appname', appname);\n setValue('sourceCode', sourceCode);\n setValue('appUrl', appUrl);\n setValue('applogo', skappLogo);\n setValue('verson', appJSON.version);\n setValue(\"demoUrl\", demoUrl);\n setAge({ label: age, value: age });\n setAppStatus({ label: appStatus, value: appStatus });\n setCategory({ label: category, value: category });\n setVideoObj(previewVideo);\n setAppLogo(skappLogo);\n setTags(tags);\n if (previewImages.images[0]) {\n setIsImageUploadingFirstObj1(previewImages.images[0]);\n }\n if (previewImages.images[1]) {\n setIsImageUploadingFirstObj(previewImages.images[1]);\n }\n if (previewImages.images[2]) {\n setIsImageUploadingSecondObj(previewImages.images[2]);\n }\n if (previewImages.images[3]) {\n setIsImageUploadingThirdObj(previewImages.images[3]);\n }\n if (Object.keys(connections)[0]) {\n setfirstSocialLinkTitle({value: Object.keys(connections)[0], label: Object.keys(connections)[0]});\n }\n \n if (Object.keys(connections)[1]) {\n setSecondSocialLinkTitle({value: Object.keys(connections)[1], label: Object.keys(connections)[1]});\n }\n \n if (Object.keys(connections)[2]) {\n setThirdSocialLinkTitle({value: Object.keys(connections)[0], label: Object.keys(connections)[2]});\n }\n setfirstSocialLink(connections[Object.keys(connections)[0]] ? connections[Object.keys(connections)[0]]: \"\");\n setSecondSocialLink(connections[Object.keys(connections)[1]] ? connections[Object.keys(connections)[1]] : \"\");\n setThirdSocialLink(connections[Object.keys(connections)[2]] ? connections[Object.keys(connections)[2]] : \"\");\n setValue('appDescription', appDescription);\n setValue('releaseNotes', releaseNotes);\n }\n }\n }\n }, []);\n\n const handleReset = () => {\n history.goBack();\n }\n\n //manage loader to upload images\n //form submit function\n const onSubmit = (data) => {\n console.log(\"🚀 ~ file: SubmitApp.js ~ line 167 ~ onSubmit ~ data\", data)\n if (appLogo === \"\" && appDetail?.content.imgThumbnailSkylink == \"\") {\n setIsAppLogoTrue(true);\n // setMandatory(true);\n } else if (data.appname === \"\") {\n setIsAppNameTrue(true);\n } else if (data.verson === \"\") {\n setIsAppVersionTrue(true);\n } else if (data.appUrl === \"\") {\n setIsAppUrlTrue(true);\n } else if (!category) {\n setIsAppCatTrue(true);\n } else if (data.appDescription === \"\") {\n setIsAppDetailDesTrue(true);\n } else {\n setIsSubmit(true);\n setMandatory(true);\n dispatch(setLoaderDisplay(true))\n let obj = {\n $type: \"skapp\",\n $subtype: \"published\",\n id: appDetail?.id || uuidv4(),\n version: data.verson,\n ts: new Date().getTime(),\n content: data,\n };\n let forImagesPreviewObj = [];\n if (Object.keys(isImageUploadFirstObj1).length) {\n forImagesPreviewObj.push(isImageUploadFirstObj1);\n } \n if (Object.keys(isImageUploadFirstObj).length) {\n forImagesPreviewObj.push(isImageUploadFirstObj);\n } \n if (Object.keys(isImageUploadSecondObj).length) {\n forImagesPreviewObj.push(isImageUploadSecondObj);\n } \n if (Object.keys(isImageUploadThirdObj).length) {\n forImagesPreviewObj.push(isImageUploadThirdObj);\n } \n let imagesPrevieObj = {\n aspectRatio: 0.5625,\n images: forImagesPreviewObj,\n };\n obj.content.skappLogo = appLogo;\n obj.content.category = category && category.value ? category.value : \"\";\n obj.content.defaultPath = \"index.html or EMPTY\";\n obj.content.age = age && age.value ? age.value : \"\";\n obj.content.previewVideo = videoObjt;\n obj.content.appStatus = appStatus && appStatus.value ? appStatus.value : \"\";\n obj.content.tags = tags;\n obj.content.previewImages = imagesPrevieObj;\n obj.content.history = [\"list of skylinks\"];\n obj.content.supportDetails = \"\";\n\n obj.content.connections = {\n [firstSocialLinkTitle && firstSocialLinkTitle.value ? firstSocialLinkTitle.value: \"\" ]: firstSocialLink,\n [secondSocialLinkTitle && secondSocialLinkTitle.value ? secondSocialLinkTitle.value : \"\"]: secondSocialLink,\n [thirdSocialLinkTitle && thirdSocialLinkTitle.value ? thirdSocialLinkTitle.value: \"\"]: thirdSocialLink,\n };\n\n dispatch(publishAppAction(obj));\n setMandatory(false);\n setIsSubmit(false);\n history.goBack();\n }\n };\n\n const getUploadedFile = (file) => {\n forImagesPreview.push(file);\n };\n\n const [isVideoUploaded, setIsVideoUploaded] = useState(false);\n\n //manage loader for videoUpload\n const videoUploadLoader = (val) => {\n setIsVideoUploaded(val);\n };\n\n //manage image upload loaders\n\n const firstImageLoader = (val) => {\n setIsImageUploadingFirst(val);\n };\n\n const secondImageLoader = (val) => {\n setIsImageUploadingSecond(val);\n };\n\n const thirdImageLoader = (val) => {\n setIsImageUploadingThird(val);\n };\n\n //for uploading images and videos\n const onChangeHandlerForImages = (file, id) => {\n if (id === \"img1\") {\n setIsImageUploadingFirst(true);\n } else if (id === \"img2\") {\n setIsImageUploadingSecond(true);\n } else {\n setIsImageUploadingThird(true);\n }\n\n var image = document.getElementById(id);\n var reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = function (oFREvent) {\n var img = document.createElement(\"img\");\n img.setAttribute(\"width\", \"100%\");\n img.setAttribute(\"height\", \"160px\");\n image.append(img);\n img.src = oFREvent.target.result;\n };\n\n UploadImagesAction(file, getUploadedFile, \n id === \"img1\"\n ? firstImageLoader\n : id === \"img2\"\n ? secondImageLoader\n : thirdImageLoader\n );\n };\n\n //\n const getUploadVideoFile = (file) => {\n setVideoObj(file);\n };\n\n const onChangeHandlerForVideos = (file) => {\n var fileReader = new FileReader();\n setIsVideoUploaded(true);\n fileReader.onload = function () {\n var blob = new Blob([fileReader.result], { type: file.type });\n var url = URL.createObjectURL(blob);\n var video = document.createElement(\"video\");\n var timeupdate = function () {\n if (snapImage()) {\n video.removeEventListener(\"timeupdate\", timeupdate);\n video.pause();\n }\n };\n video.addEventListener(\"loadeddata\", function () {\n if (snapImage()) {\n video.removeEventListener(\"timeupdate\", timeupdate);\n }\n });\n var snapImage = async function () {\n var canvas = document.createElement(\"canvas\");\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n canvas.getContext(\"2d\").drawImage(video, 0, 0, canvas.width, canvas.height);\n var image = canvas.toDataURL();\n\n const thumb = await imageCompression.canvasToFile(canvas, \"image/jpeg\");\n\n \n UploadVideoAction(file, thumb, getUploadVideoFile, videoUploadLoader)\n \n var success = image.length > 100000;\n if (success) {\n var img = document.createElement(\"img\");\n img.src = image;\n document.getElementById(\"vid\").appendChild(img);\n URL.revokeObjectURL(url);\n }\n return success;\n };\n video.addEventListener(\"timeupdate\", timeupdate);\n video.preload = \"metadata\";\n video.src = url;\n // Load video in Safari / IE11\n video.muted = true;\n video.playsInline = true;\n video.play();\n };\n fileReader.readAsArrayBuffer(file);\n };\n\n const handleImgUpload = (obj) => {\n let newObj = {\n thumbnail: `sia:${obj.thumbnail}`,\n image: `sia:${obj.skylink}`,\n };\n setAppLogo(newObj);\n setIsLogoUploaded(false);\n // formik.setFieldValue(\"imgSkylink\", obj.skylink, true);\n // formik.setFieldValue(\"imgThumbnailSkylink\", obj.thumbnail, true)\n };\n\n const handleFirstImageUpload = (obj) => {\n let newObj = {\n thumbnail: `sia:${obj.thumbnail}`,\n image: `sia:${obj.skylink}`,\n };\n setIsImageUploadingFirstObj(newObj);\n setIsImageUploadingFirst(false);\n };\n const handleFirst1ImageUpload = (obj) => {\n let newObj = {\n thumbnail: `sia:${obj.thumbnail}`,\n image: `sia:${obj.skylink}`,\n };\n setIsImageUploadingFirstObj1(newObj);\n setIsImageUploadingFirst1(false);\n };\n const handleSecondImageUpload = (obj) => {\n let newObj = {\n thumbnail: `sia:${obj.thumbnail}`,\n image: `sia:${obj.skylink}`,\n };\n setIsImageUploadingSecondObj(newObj);\n setIsImageUploadingSecond(false);\n };\n\n const handleThirdImageUpload = (obj) => {\n let newObj = {\n thumbnail: `sia:${obj.thumbnail}`,\n image: `sia:${obj.skylink}`,\n };\n setIsImageUploadingThirdObj(newObj);\n setIsImageUploadingThird(false);\n };\n\n const handleDropZoneClick = (evt, dropZoneRef) => {\n evt.preventDefault();\n evt.stopPropagation();\n // setIsLogoUploaded(true);\n dropZoneRef.current.gridRef.current.click();\n };\n\n {toggle ? document.body.className = \"darkBodyColor\" : document.body.className = \"lightBodyColor\"}\n \n // get\n\n return (\n <Box>\n {mandatory ? <Alert severity=\"error\">Fill all fields!</Alert> : null}\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n marginTop=\"7px\"\n >\n <h1 className={toggle ? classes.darkh1 : classes.lighth1}>Edit Publish App</h1>\n <Box className={classes.btnBox}>\n <Button className={classes.cancelBtn} onClick={handleReset}> Cancel </Button>\n <Button\n disabled={isSubmit}\n className={classes.submitBtn}\n onClick={handleSubmit(onSubmit)}\n >\n <Add />\n {isSubmit ? (\n <Loader type=\"Oval\" color=\"#FFFFFF\" height={15} width={15} />\n ) : (\n \"Save\"\n )}\n </Button>\n </Box>\n </Box>\n\n <Box component=\"form\">\n <Box>\n <label className={classes.label}>Site Logo</label>\n <div className=\"d-none\">\n <SnUpload\n name=\"files\"\n source={UPLOAD_SOURCE_NEW_HOSTING_IMG}\n ref={imgUploadEleRef}\n directoryMode={false}\n onUpload={(e) => handleImgUpload(e)}\n uploadStarted={(e) => setIsLogoUploaded(e)}\n />\n </div>\n <div className={toggle ? classes.darkSiteLogo : classes.lightSiteLogo} onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef)} >\n {!isLogoUploaded && !Object.keys(appLogo).length && !appDetail && <Box style={{ flexDirection: \"column\", justifyItems: 'center' }}> \n <Box style={{ position: \"relative\", textAlign: 'center' }}>\n <ImgIcon />\n </Box> \n <Box style={{ position: \"relative\", color: \"grey\", textAlign: 'center' }}>click to upload Image</Box> \n </Box>}\n { !isLogoUploaded && (Object.keys(appLogo).length || Object.keys(appDetail).length) ? <img\n alt=\"app\"\n src={skylinkToUrl(appLogo?.thumbnail || appDetail?.content.skappLogo.thumbnail)}\n style={{\n width: \"100%\",\n height: \"160px\",\n // border: props.arrSelectedAps.indexOf(app) > -1 ? \"2px solid #1ed660\" : null,\n }}\n onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef)}\n name=\"1\"\n /> : null \n }\n { isLogoUploaded && (\n <Loader\n type=\"Oval\"\n color=\"#57C074\"\n height={50}\n width={50}\n />\n )}\n </div>\n <div className={classes.inputGuide}>\n Max. size of 5 MB in: JPG or PNG. 300x500 or larger recommended\n </div>\n <input type=\"text\" hidden />\n </Box>\n {isAppLogoTrue && (\n <div className=\"required-field\">This field is required</div>\n )} \n <Box\n display=\"flex\"\n className={`${classes.formRow} ${classes.formRow1}`}\n >\n <Box\n className={`${toggle ? classes.darkInputContainer : classes.lightInputContainer} ${classes.max33}`}\n flex={1}\n >\n <label>App Name <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <input\n className={toggle ? classes.darkInput : classes.lightInput}\n placeholder=\"App Name\"\n name=\"appname\"\n ref={register}\n />\n {isAppNameTrue && (\n <div className=\"required-field\">This field is required</div>\n )}\n </Box>\n <Box className={`${toggle ? classes.darkInputContainer : classes.lightInputContainer} ${classes.max33}`} flex={1}>\n <label>App URL(Skylink) <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <input\n name=\"appUrl\"\n ref={register}\n className={toggle ? classes.darkInput : classes.lightInput}\n placeholder=\"https://[hns name].hns\"\n />\n {isAppUrlTrue && (\n <div className=\"required-field\">This field is required</div>\n )}\n </Box>\n <Box className={toggle ? classes.darkInputContainer : classes.lightInputContainer} flex={1}>\n <label>App Version <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <input\n name=\"verson\"\n ref={register}\n className={toggle ? classes.darkInput : classes.lightInput}\n placeholder=\"Version\"\n />\n { isAppVersionTrue && (\n <div className=\"required-field\">This field is required</div>\n )}\n </Box>\n <Box className={`${toggle ? classes.darkInputContainer : classes.lightInputContainer} ${classes.selectVersion}`}>\n <label>App Status <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <Box>\n <Select\n ref={register}\n name=\"appStatus\"\n value={appStatus}\n defaultValue={appStatus}\n onChange={(e)=> setAppStatus(e)}\n options={appStatusOptions}\n styles={toggle ? darkReactSelectStyles : lightReactSelectStyles}\n />\n </Box>\n </Box>\n </Box>\n\n <Box\n display=\"flex\"\n className={`${classes.formRow} ${classes.formRow2}`}\n >\n <Box className={toggle ? classes.darkInputContainer : classes.lightInputContainer} flex={0.38}>\n <label>App Category <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <Box>\n <Select\n ref={register}\n name=\"category\"\n defaultValue={category}\n value={category}\n onChange={(e) => setCategory(e)}\n options={appCatOptions}\n styles={toggle ? darkReactSelectStyles : lightReactSelectStyles}\n />\n {isAppCatTrue && (\n <div className=\"required-field\">This field is required</div>\n )}\n </Box>\n </Box>\n <Box className={classes.inputContainerTag} flex={1}>\n <label>Custom Tags <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <TagsInput\n value={tags}\n className={toggle ? classes.darkInputTag : classes.lightInputTag}\n onChange={(tags) => setTags(tags)}\n />\n {/* <input\n className={classes.input}\n name=\"tags\"\n ref={register}\n value=\"Skylink\"\n /> */}\n </Box>\n </Box>\n <Box\n display=\"flex\"\n className={`${classes.formRow} ${classes.formRow2}`}\n >\n <Box className={toggle ? classes.darkInputContainer : classes.lightInputContainer} flex={1}>\n <label>Git URL <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <input\n name=\"sourceCode\"\n ref={register}\n className={toggle ? classes.darkInput : classes.lightInput}\n placeholder=\"https://github.com\"\n />\n </Box>\n <Box className={toggle ? classes.darkInputContainer : classes.lightInputContainer} flex={1}>\n <label>Demo URL</label>\n <input\n className={toggle ? classes.darkInput : classes.lightInput}\n name=\"demoUrl\"\n ref={register}\n placeholder=\"https://www.demo.com/UJJ5Rgbu2TM\"\n />\n </Box>\n <Box className={`${toggle ? classes.darkInputContainer : classes.lightInputContainer} ${classes.selectVersion}`}>\n <label>Age Restriction? <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <Box>\n <Select\n name=\"age\"\n ref={register}\n value={age}\n defaultValue={age}\n onChange={e => setAge(e)}\n options={optionsAge}\n styles={toggle ? darkReactSelectStyles : lightReactSelectStyles}\n />\n </Box>\n </Box>\n </Box>\n <div className={classes.OneRowInput}>\n <div>\n <label className={classes.previewImgLabel} >\n Preview Video/Images \n <span>\n {\" \"}\n Max. size of 5 MB in: JPG or PNG. 1750x900 or larger recommended\n </span> <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip>\n </label>\n </div>\n <Grid container spacing={2}>\n <Grid item md={3} sm={6} xs={6}>\n <Box style={{ position: \"relative\" }} className={classes.placeholderImg}>\n <div className=\"d-none\">\n <SnUpload\n name=\"files\"\n source={UPLOAD_SOURCE_DEPLOY}\n ref={imgUploadEleRef1}\n directoryMode={false}\n onUpload={(e) => handleFirst1ImageUpload(e)}\n uploadStarted={(e) => setIsImageUploadingFirst1(e)}\n />\n </div>\n <div className={toggle ? classes.darkPreviewImg : classes.lightPreviewImg} onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef1)} >\n {!isImageUploadFirst1 && !Object.keys(isImageUploadFirstObj1).length && <Box style={{ flexDirection: \"column\", justifyItems: 'center' }}> \n <Box style={{ position: \"relative\", textAlign: 'center' }}>\n <ImgIcon />\n </Box> \n <Box style={{ position: \"relative\", color: \"grey\", textAlign: 'center' }}>click to upload Image</Box> \n </Box>}\n {!isImageUploadFirst1 && Object.keys(isImageUploadFirstObj1).length ? <img\n alt=\"app\"\n src={skylinkToUrl(isImageUploadFirstObj1?.thumbnail)}\n style={{\n width: \"100%\",\n height: \"160px\",\n // border: props.arrSelectedAps.indexOf(app) > -1 ? \"2px solid #1ed660\" : null,\n }}\n onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef1)}\n name=\"1\"\n /> : null\n }\n {isImageUploadFirst1 && (\n <Loader\n type=\"Oval\"\n color=\"#57C074\"\n height={50}\n width={50}\n />\n )}\n </div>\n <input type=\"text\" hidden />\n </Box>\n </Grid>\n\n <Grid item md={3} sm={6} xs={6}>\n <Box style={{ position: \"relative\" }} \n className={classes.placeholderImg}>\n <div className=\"d-none\">\n <SnUpload\n name=\"files\"\n source={UPLOAD_SOURCE_DEPLOY}\n ref={imgUploadEleRef2}\n directoryMode={false}\n onUpload={(e) => handleFirstImageUpload(e)}\n uploadStarted={(e) => setIsImageUploadingFirst(e)}\n />\n </div>\n <div className={toggle ? classes.darkPreviewImg : classes.lightPreviewImg} onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef2)} >\n {!isImageUploadFirst && !Object.keys(isImageUploadFirstObj).length && <Box style={{ flexDirection: \"column\", justifyItems: 'center' }}> \n <Box style={{ position: \"relative\", textAlign: 'center' }}>\n <ImgIcon />\n </Box> \n <Box style={{ position: \"relative\", color: \"grey\", textAlign: 'center' }}>click to upload Image</Box> \n </Box>}\n {!isImageUploadFirst && Object.keys(isImageUploadFirstObj).length ? <img\n alt=\"app\"\n src={skylinkToUrl(isImageUploadFirstObj?.thumbnail)}\n style={{\n width: \"100%\",\n height: \"160px\",\n // border: props.arrSelectedAps.indexOf(app) > -1 ? \"2px solid #1ed660\" : null,\n }}\n onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef2)}\n name=\"1\"\n /> : null\n }\n {isImageUploadFirst && (\n <Loader\n type=\"Oval\"\n color=\"#57C074\"\n height={50}\n width={50}\n />\n )}\n </div>\n <input type=\"text\" hidden />\n </Box>\n </Grid>\n\n <Grid item md={3} sm={6} xs={6}>\n <Box\n style={{ position: \"relative\" }}\n id=\"img2\"\n className={classes.placeholderImg}\n >\n <div className=\"d-none\">\n <SnUpload\n name=\"files\"\n source={UPLOAD_SOURCE_DEPLOY}\n ref={imgUploadEleRef3}\n directoryMode={false}\n onUpload={(e) => handleSecondImageUpload(e)}\n uploadStarted={(e) => setIsImageUploadingSecond(e)}\n />\n </div>\n <div className={toggle ? classes.darkPreviewImg : classes.lightPreviewImg} onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef3)} >\n {!isImageUploadSecond && !Object.keys(isImageUploadSecondObj).length && <Box style={{ flexDirection: \"column\", justifyItems: 'center' }}> \n <Box style={{ position: \"relative\", textAlign: 'center' }}>\n <ImgIcon />\n </Box> \n <Box style={{ position: \"relative\", color: \"grey\", textAlign: 'center' }}>click to upload Image</Box> \n </Box>}\n {!isImageUploadSecond && Object.keys(isImageUploadSecondObj).length ? <img\n alt=\"app\"\n src={skylinkToUrl(isImageUploadSecondObj?.thumbnail)}\n style={{\n width: \"100%\",\n height: \"160px\",\n // border: props.arrSelectedAps.indexOf(app) > -1 ? \"2px solid #1ed660\" : null,\n }}\n onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef3)}\n name=\"1\"\n /> : null\n }\n {isImageUploadSecond && (\n <Loader\n type=\"Oval\"\n color=\"#57C074\"\n height={50}\n width={50}\n />\n )}\n </div>\n <input type=\"text\" hidden />\n </Box>\n\n </Grid>\n <Grid item md={3} sm={6} xs={6}>\n <Box\n style={{ position: \"relative\" }}\n id=\"img3\"\n className={classes.placeholderImg}\n >\n <div className=\"d-none\">\n <SnUpload\n name=\"files\"\n source={UPLOAD_SOURCE_DEPLOY}\n ref={imgUploadEleRef4}\n directoryMode={false}\n onUpload={(e) => handleThirdImageUpload(e)}\n uploadStarted={(e) => setIsImageUploadingThird(e)}\n />\n </div>\n <div className={toggle ? classes.darkPreviewImg : classes.lightPreviewImg} onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef4)} >\n {!isImageUploadThird && !Object.keys(isImageUploadThirdObj).length && <Box style={{ flexDirection: \"column\", justifyItems: 'center' }}> \n <Box style={{ position: \"relative\", textAlign: 'center' }}>\n <ImgIcon />\n </Box> \n <Box style={{ position: \"relative\", color: \"grey\", textAlign: 'center' }}>click to upload Image</Box> \n </Box>}\n {!isImageUploadThird && Object.keys(isImageUploadThirdObj).length ? <img\n alt=\"app\"\n src={skylinkToUrl(isImageUploadThirdObj?.thumbnail)}\n style={{\n width: \"100%\",\n height: \"160px\",\n // border: props.arrSelectedAps.indexOf(app) > -1 ? \"2px solid #1ed660\" : null,\n }}\n onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef4)}\n name=\"1\"\n /> : null\n }\n {isImageUploadThird && (\n <Loader\n type=\"Oval\"\n color=\"#57C074\"\n height={50}\n width={50}\n />\n )}\n </div>\n <input type=\"text\" hidden />\n </Box>\n </Grid>\n {/* <Grid item md={3} sm={6} xs={6}>\n <Box className={classes.placeholderImg}></Box>\n </Grid> */}\n </Grid>\n </div>\n <div className={classes.OneRowInput}>\n <div>\n <label className={classes.textareaLabel}>\n App Description\n <span>Detailed summary of your app</span><Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip>\n </label>\n </div>\n <Box position=\"relative\">\n <TextareaAutosize\n name=\"appDescription\"\n ref={register}\n maxLength={5000}\n className={toggle ? classes.darkTextarea : classes.lightTextarea}\n aria-label=\"minimum height\"\n rowsMin={6}\n // value=\"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et.\"\n placeholder=\"Detailed summary of your app\"\n />\n <span className={classes.maxChar}>0/5000</span>\n </Box>\n {isAppDetailDesTrue && (\n <div className=\"required-field\">Max 5000 Characters</div>\n )}\n </div>\n <div className={classes.OneRowInput}>\n <div>\n <label className={classes.textareaLabel}>\n Release Notes <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip>\n {/* <span>This will go on App Card.</span> */}\n </label>\n </div>\n <Box position=\"relative\">\n <TextareaAutosize\n className={toggle ? classes.darkTextarea : classes.lightTextarea}\n aria-label=\"minimum height\"\n rowsMin={4}\n ref={register}\n name=\"releaseNotes\"\n maxLength={5000}\n // value=\"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et.\"\n placeholder=\"Write your Comment\"\n />\n <span className={classes.maxChar}>0/5000</span>\n </Box>\n {isAppDetailDesTrue && (\n <div className=\"required-field\">Max 5000 Characters</div>\n )}\n </div>\n <div className={classes.OneRowInput}>\n <div>\n <label className={classes.textareaLabel}>Social Connections <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n </div>\n <Box position=\"relative\">\n <Grid container spacing={2}>\n <Grid item md={6} lg={4} sm={12} xs={12}>\n <Box display=\"flex\" className={toggle ? classes.darkSocialOptionContainer : classes.lightSocialOptionContainer}>\n <Select\n isMulti={false}\n ref={register}\n onChange={(e) => setfirstSocialLinkTitle(e)}\n options={socialOption}\n styles={toggle ? darkReactSelectStyles : lightReactSelectStyles}\n value={firstSocialLinkTitle}\n classNamePrefix=\"socialMedia\"\n className={toggle ? classes.darkSocilaMediaSelect : classes.lightSocilaMediaSelect}\n name=\"firstSocialLinkTitle\"\n defaultValue={firstSocialLinkTitle}\n />\n <input\n value={firstSocialLink}\n placeholder=\"\"\n onChange={(e) => setfirstSocialLink(e.target.value)}\n />\n </Box>\n </Grid>\n <Grid item md={6} lg={4} sm={12} xs={12}>\n <Box display=\"flex\" className={toggle ? classes.darkSocialOptionContainer : classes.lightSocialOptionContainer}>\n <Select\n isMulti={false}\n as={Select}\n ref={register}\n classNamePrefix=\"socialMedia\"\n className={toggle ? classes.darkSocilaMediaSelect : classes.lightSocilaMediaSelect}\n name=\"secondSocialLinkTitle\"\n value={secondSocialLinkTitle}\n defaultValue={secondSocialLinkTitle}\n onChange={(e) => setSecondSocialLinkTitle(e)}\n options={socialOption}\n styles={toggle ? darkReactSelectStyles : lightReactSelectStyles}\n />\n <input\n placeholder=\"\"\n value={secondSocialLink}\n onChange={(e) => setSecondSocialLink(e.target.value)}\n />\n </Box>\n </Grid>\n <Grid item md={6} lg={4} sm={12} xs={12}>\n <Box display=\"flex\" className={toggle ? classes.darkSocialOptionContainer : classes.lightSocialOptionContainer}>\n <Select\n isMulti={false}\n ref={register}\n control={control}\n classNamePrefix=\"socialMedia\"\n className={toggle ? classes.darkSocilaMediaSelect : classes.lightSocilaMediaSelect}\n name=\"thirdSocialLinkTitle\"\n value={thirdSocialLinkTitle}\n defaultValue={thirdSocialLinkTitle}\n onChange={(e) => setThirdSocialLinkTitle(e)}\n options={socialOption}\n styles={toggle ? darkReactSelectStyles : lightReactSelectStyles}\n />\n <input\n placeholder=\"\"\n value={thirdSocialLink}\n onChange={(e) => setThirdSocialLink(e.target.value)}\n />\n </Box>\n </Grid>\n\n <Grid item md={6} lg={4} style={{ alignSelf: \"center\" }}>\n <Button\n className={classes.button}\n onClick={handleSubmit(onSubmit)}\n disabled={isSubmit}\n >\n {isSubmit ? (\n <Loader\n type=\"Oval\"\n color=\"#FFFFFF\"\n height={15}\n width={15}\n />\n ) : (\n \"Save\"\n )}\n </Button>\n </Grid>\n </Grid>\n </Box>\n </div>\n </Box>\n </Box>\n );\n};\n\nexport default EditPublishApp;\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/SubmitNewSite.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/SubmitApp/SubmitApp.js",["824","825","826","827","828","829","830","831","832","833","834","835","836","837","838","839","840","841"],"import React, { createRef, useEffect, useState } from \"react\";\nimport {\n Box,\n Button,\n makeStyles,\n Grid,\n TextareaAutosize,\n Typography,\n Tooltip\n} from \"@material-ui/core\";\nimport Select from \"react-select\";\nimport { Add, HelpOutline } from \"@material-ui/icons\";\nimport styles from \"../../assets/jss/app-details/SubmitAppStyles\";\n// img icon\nimport { ReactComponent as ImgIcon } from \"../../assets/img/icons/image.svg\";\nimport { useForm, Controller } from \"react-hook-form\";\nimport { v4 as uuidv4 } from \"uuid\";\nimport { useDispatch, useSelector } from 'react-redux';\n// importing action\nimport {\n publishAppAction,\n} from \"../../redux/action-reducers-epic/SnPublishAppAction\";\nimport {\n UploadImagesAction,\n UploadVideoAction,\n UploadAppLogo,\n getMyHostedApps,\n} from \"../../service/SnSkappService\";\nimport TagsInput from \"react-tagsinput\";\nimport \"./taginput.css\"; // If using WebPack and style-loader.\nimport imageCompression from \"browser-image-compression\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport Loader from \"react-loader-spinner\";\nimport { useParams, useHistory } from \"react-router-dom\";\nimport { setLoaderDisplay } from \"../../redux/action-reducers-epic/SnLoaderAction\";\nimport { useLoadHostedAppFromUrl } from \"../../hooks/useLoadHostedAppFromUrl\";\nimport { skylinkToUrl } from \"../../service/skynet-api\";\nimport SnUpload from '../../uploadUtil/SnUpload';\nimport { UPLOAD_SOURCE_DEPLOY, UPLOAD_SOURCE_NEW_HOSTING, UPLOAD_SOURCE_NEW_HOSTING_IMG } from '../../utils/SnConstants';\nimport Modal from '@material-ui/core/Modal';\nimport Backdrop from '@material-ui/core/Backdrop';\nimport Fade from '@material-ui/core/Fade';\n\n\nconst useStyles = makeStyles(styles);\nconst optionsVersion = [\n { value: \"1.0\", label: \"1.0\" },\n { value: \"1.01\", label: \"1.01\" },\n { value: \"1.02\", label: \"1.02\" },\n];\n\nconst appCatOptions = [\n { value: \"Social\", label: \"Social\" },\n { value: \"Video\", label: \"Video\" },\n { value: \"Pictures\", label: \"Pictures\" },\n { value: \"Music\", label: \"Music\" },\n { value: \"Productivity\", label: \"Productivity\" },\n { value: \"Utilities\", label: \"Utilities\" },\n { value: \"Games\", label: \"Games\" },\n { value: \"Blogs\", label: \"Blogs\" },\n { value: \"Software\", label: \"Software\" },\n { value: \"Livestream\", label: \"Livestream\" },\n { value: \"Books\", label: \"Books\" },\n { value: \"Marketplace\", label: \"Marketplace\" },\n { value: \"Finance\", label: \"Finance\" },\n { value: \"Portal\", label: \"Portal\" },\n];\n\nconst optionsAge = [\n { value: \"18+\", label: \"18+\" },\n { value: \"general\", label: \"general\" },\n];\n\nconst appStatus = [\n { value: \"Alpha\", label: \"Alpha\" },\n { value: \"Beta\", label: \"Beta\" },\n { value: \"Live\", label: \"Live\" },\n];\n\nconst socialOption = [\n { value: \"Discord\", label: \"Discord\" },\n { value: \"Reddit\", label: \"Reddit\" },\n { value: \"Twitter\", label: \"Twitter\" },\n { value: \"Dlink\", label: \"Dlink\" },\n];\n\nconst lightReactSelectStyles = {\n control: (styles) => ({\n ...styles,\n backgroundColor: \"white\",\n height: 55,\n boxShadow: 0,\n // borderColor: \"#1DBF73\",\n borderColor: \"#D9E1EC\",\n borderRadius: 8,\n \"@media only screen and (max-width: 1440px)\": {\n height: 50,\n // width: '100%',\n fontSize: 16,\n background: '#fff',\n borderColor: '#D9E1EC'\n },\n \"@media only screen and (max-width: 575px)\": {\n height: 43,\n // width: '100%',\n fontSize: 14,\n background: '#fff',\n borderColor: '#D9E1EC'\n },\n \"&:hover\": {\n borderColor: \"#1DBF73\",\n },\n }),\n option: (styles, { data, isDisabled, isFocused, isSelected }) => ({\n ...styles,\n backgroundColor: isSelected ? \"#1DBF73\" : \"#fff\",\n \"&:foucs\": {\n backgroundColor: \"#1DBF73\",\n },\n }),\n};\n\nconst darkReactSelectStyles = {\n control: (styles) => ({\n ...styles,\n backgroundColor: \"#2A2C34\",\n height: 55,\n boxShadow: 0,\n borderColor: \"#48494E\",\n color: \"#fff!important\",\n borderRadius: 8,\n \"@media only screen and (max-width: 1440px)\": {\n height: 50,\n // width: '100%',\n fontSize: 16,\n background: '#2A2C34',\n borderColor: '#48494E'\n },\n \"@media only screen and (max-width: 575px)\": {\n height: 43,\n // width: '100%',\n fontSize: 14,\n background: '#2A2C34',\n borderColor: '#48494E'\n },\n \"&:hover\": {\n borderColor: \"#1DBF73\",\n },\n }),\n option: (styles, { data, isDisabled, isFocused, isSelected }) => ({\n ...styles,\n backgroundColor: isSelected ? \"#1DBF73\" : \"#fff\",\n \"&:foucs\": {\n backgroundColor: \"#1DBF73\",\n },\n }),\n};\n\nlet forImagesPreview = [];\nconst SubmitApp = ({toggle}) => {\n const [selectedOption, setSelectedOption] = useState(null);\n const dispatch = useDispatch();\n\n const [verson, setVersion] = useState(\"\");\n const [tags, setTags] = useState([]);\n const { register, handleSubmit, control, setValue } = useForm();\n const classes = useStyles();\n\n // state for social links according to format\n const [firstSocialLinkTitle, setfirstSocialLinkTitle] = useState(\"\");\n const [secondSocialLinkTitle, setSecondSocialLinkTitle] = useState(\"\");\n const [thirdSocialLinkTitle, setThirdSocialLinkTitle] = useState(\"\");\n const [appDetail, setAppDetail] = useLoadHostedAppFromUrl();\n\n const [firstSocialLink, setfirstSocialLink] = useState(\"\");\n const [secondSocialLink, setSecondSocialLink] = useState(\"\");\n const [thirdSocialLink, setThirdSocialLink] = useState(\"\");\n\n const [videoObjt, setVideoObj] = useState({});\n\n const [mandatory, setMandatory] = useState(false);\n const [isSubmit, setIsSubmit] = useState(false);\n const [isImageUploadFirst1, setIsImageUploadingFirst1] = useState(false);\n const [isImageUploadFirst, setIsImageUploadingFirst] = useState(false);\n const [isImageUploadSecond, setIsImageUploadingSecond] = useState(false);\n const [isImageUploadThird, setIsImageUploadingThird] = useState(false);\n const [isImageUploadFirstObj1, setIsImageUploadingFirstObj1] = useState({});\n const [isImageUploadFirstObj, setIsImageUploadingFirstObj] = useState({});\n const [isImageUploadSecondObj, setIsImageUploadingSecondObj] = useState({});\n const [isImageUploadThirdObj, setIsImageUploadingThirdObj] = useState({});\n\n const [appLogo, setAppLogo] = useState(\"\");\n const [isLogoUploaded, setIsLogoUploaded] = useState(false);\n\n const [isModelOpen, setIsModelOpen] = useState(false);\n //require\n const [isAppLogoTrue, setIsAppLogoTrue] = useState(false);\n const [isAppNameTrue, setIsAppNameTrue] = useState(false);\n const [isAppVersionTrue, setIsAppVersionTrue] = useState(false);\n const [isAppUrlTrue, setIsAppUrlTrue] = useState(false);\n const [isAppCatTrue, setIsAppCatTrue] = useState(false);\n const [isAppDetailDesTrue, setIsAppDetailDesTrue] = useState(false);\n const history = useHistory();\n\n const imgUploadEleRef = createRef();\n const imgUploadEleRef1 = createRef();\n const imgUploadEleRef2 = createRef();\n const imgUploadEleRef3 = createRef();\n const imgUploadEleRef4 = createRef();\n \n const SnLoader = useSelector((state) => state.snLoader);\n \n useEffect(() => {\n if (appDetail?.content) {\n const { appName, sourceCode, hns, imgThumbnailSkylink, imgSkylink, portalMinVersion } = appDetail.content;\n setValue('appname', appName);\n setValue('sourceCode', sourceCode);\n setValue('appUrl', hns);\n setValue('applogo', { thumbnail: `sia:${imgThumbnailSkylink}`, image: `sia:${imgSkylink}` });\n setAppLogo({ thumbnail: `sia:${imgThumbnailSkylink}`, image: `sia:${imgSkylink}` });\n setValue('verson', portalMinVersion);\n // setVersion(portalMinVersion);\n }\n }, [appDetail]);\n\n const handleReset = () => {\n if (appDetail?.content) {\n const { appName, sourceCode, hns, imgThumbnailSkylink, imgSkylink, portalMinVersion } = appDetail.content;\n setValue('appname', appName);\n setValue('sourceCode', sourceCode);\n setValue('appUrl', hns);\n setValue('verson', portalMinVersion);\n setValue('applogo', { thumbnail: `sia:${imgThumbnailSkylink}`, image: `sia:${imgSkylink}` });\n setAppLogo({ thumbnail: `sia:${imgThumbnailSkylink}`, image: `sia:${imgSkylink}` });\n } else {\n setValue('appname', '');\n setValue('sourceCode', '');\n setValue('appUrl', '');\n setValue('applogo', '');\n setValue('verson', '');\n }\n setValue(\"demoUrl\", \"\");\n setValue(\"category\", \"\");\n setValue(\"age\", \"\");\n setValue(\"appStatus\", \"\");\n setValue(\"firstSocialLinkTitle\", \"\");\n setValue(\"secondSocialLinkTitle\", \"\");\n setValue(\"thirdSocialLinkTitle\", \"\");\n setSelectedOption(\"\");\n setVideoObj({});\n setAppLogo(\"\");\n setTags([]);\n setfirstSocialLinkTitle(\"\");\n setSecondSocialLinkTitle(\"\");\n setThirdSocialLinkTitle(\"\");\n setfirstSocialLink(\"\");\n setSecondSocialLink(\"\");\n setThirdSocialLink(\"\");\n setValue('appDescription', '');\n setValue('releaseNotes', '');\n setIsImageUploadingFirst1({});\n setIsImageUploadingFirstObj({});\n setIsImageUploadingSecondObj({});\n setIsImageUploadingThirdObj({});\n }\n //manage submit loader\n const manageSubmitLoader = (val) => {\n setIsSubmit(val);\n };\n\n //manage loader to upload images\n //form submit function\n const onSubmit = (data) => {\n console.log(\"🚀 ~ file: SubmitApp.js ~ line 167 ~ onSubmit ~ data\", data)\n if (appLogo === \"\" && appDetail?.content.imgThumbnailSkylink == \"\") {\n setIsAppLogoTrue(true);\n // setMandatory(true);\n } else if (data.appname === \"\") {\n setIsAppNameTrue(true);\n } else if (data.verson === \"\") {\n setIsAppVersionTrue(true);\n } else if (data.appUrl === \"\") {\n setIsAppUrlTrue(true);\n } else if (data.category === null) {\n setIsAppCatTrue(true);\n } else if (data.appDescription === \"\") {\n setIsAppDetailDesTrue(true);\n } else {\n setIsSubmit(true);\n setMandatory(true);\n dispatch(setLoaderDisplay(true))\n let obj = {\n $type: \"skapp\",\n $subtype: \"published\",\n id: appDetail?.id || uuidv4(),\n version: data.verson,\n ts: new Date().getTime(),\n content: data,\n };\n let forImagesPreviewObj = [];\n if (Object.keys(isImageUploadFirstObj1).length) {\n forImagesPreviewObj.push(isImageUploadFirstObj1);\n } \n if (Object.keys(isImageUploadFirstObj).length) {\n forImagesPreviewObj.push(isImageUploadFirstObj);\n } \n if (Object.keys(isImageUploadSecondObj).length) {\n forImagesPreviewObj.push(isImageUploadSecondObj);\n } \n if (Object.keys(isImageUploadThirdObj).length) {\n forImagesPreviewObj.push(isImageUploadThirdObj);\n } \n let imagesPrevieObj = {\n aspectRatio: 0.5625,\n images: forImagesPreviewObj\n };\n obj.content.skappLogo = appLogo;\n obj.content.category = obj.content.category && obj.content.category.value;\n obj.content.defaultPath = \"index.html or EMPTY\";\n obj.content.age = obj.content.age && obj.content.age.value;\n obj.content.previewVideo = videoObjt;\n obj.content.appStatus = obj.content.appStatus && obj.content.appStatus.value;\n obj.content.tags = tags;\n obj.content.previewImages = imagesPrevieObj;\n obj.content.history = [\"list of skylinks\"];\n obj.content.supportDetails = \"\";\n\n obj.content.connections = {\n [firstSocialLinkTitle]: firstSocialLink,\n [secondSocialLinkTitle]: secondSocialLink,\n [thirdSocialLinkTitle]: thirdSocialLink,\n };\n\n dispatch(publishAppAction(obj));\n setMandatory(false);\n setIsSubmit(false);\n setIsModelOpen(true);\n }\n };\n\n const getUploadedFile = (file) => {\n forImagesPreview.push(file);\n };\n\n const [isVideoUploaded, setIsVideoUploaded] = useState(false);\n\n //manage loader for videoUpload\n const videoUploadLoader = (val) => {\n setIsVideoUploaded(val);\n };\n\n //manage image upload loaders\n\n const firstImageLoader = (val) => {\n setIsImageUploadingFirst(val);\n };\n\n const secondImageLoader = (val) => {\n setIsImageUploadingSecond(val);\n };\n\n const thirdImageLoader = (val) => {\n setIsImageUploadingThird(val);\n };\n\n //for uploading images and videos\n const onChangeHandlerForImages = (file, id) => {\n if (id === \"img1\") {\n setIsImageUploadingFirst(true);\n } else if (id === \"img2\") {\n setIsImageUploadingSecond(true);\n } else {\n setIsImageUploadingThird(true);\n }\n\n var image = document.getElementById(id);\n var reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = function (oFREvent) {\n var img = document.createElement(\"img\");\n img.setAttribute(\"width\", \"100%\");\n img.setAttribute(\"height\", \"160px\");\n image.append(img);\n img.src = oFREvent.target.result;\n };\n\n UploadImagesAction(file, getUploadedFile,\n id === \"img1\"\n ? firstImageLoader\n : id === \"img2\"\n ? secondImageLoader\n : thirdImageLoader\n );\n };\n\n //\n const getUploadVideoFile = (file) => {\n setVideoObj(file);\n };\n\n const onChangeHandlerForVideos = (file) => {\n var fileReader = new FileReader();\n setIsVideoUploaded(true);\n fileReader.onload = function () {\n var blob = new Blob([fileReader.result], { type: file.type });\n var url = URL.createObjectURL(blob);\n var video = document.createElement(\"video\");\n var timeupdate = function () {\n if (snapImage()) {\n video.removeEventListener(\"timeupdate\", timeupdate);\n video.pause();\n }\n };\n video.addEventListener(\"loadeddata\", function () {\n if (snapImage()) {\n video.removeEventListener(\"timeupdate\", timeupdate);\n }\n });\n var snapImage = async function () {\n var canvas = document.createElement(\"canvas\");\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n canvas.getContext(\"2d\").drawImage(video, 0, 0, canvas.width, canvas.height);\n var image = canvas.toDataURL();\n\n const thumb = await imageCompression.canvasToFile(canvas, \"image/jpeg\");\n\n\n UploadVideoAction(file, thumb, getUploadVideoFile, videoUploadLoader)\n\n var success = image.length > 100000;\n if (success) {\n var img = document.createElement(\"img\");\n img.src = image;\n document.getElementById(\"vid\").appendChild(img);\n URL.revokeObjectURL(url);\n }\n return success;\n };\n video.addEventListener(\"timeupdate\", timeupdate);\n video.preload = \"metadata\";\n video.src = url;\n // Load video in Safari / IE11\n video.muted = true;\n video.playsInline = true;\n video.play();\n };\n fileReader.readAsArrayBuffer(file);\n };\n\n const setLogoUploaded = (file) => {\n console.log(file);\n setAppLogo(file);\n };\n\n const logoLoaderHandler = (val) => {\n setIsLogoUploaded(val);\n };\n\n const UploadLogoFunction = (file) => {\n console.log(file);\n setIsLogoUploaded(true);\n // var image = document.getElementById(\"logo\");\n // var reader = new FileReader();\n // reader.readAsDataURL(file);\n // reader.onload = function (oFREvent) {\n // var img = document.createElement(\"img\");\n // img.setAttribute(\"width\", \"100%\");\n // img.setAttribute(\"height\", \"160px\");\n // image.append(img);\n // img.src = oFREvent.target.result;\n // };\n // UploadAppLogo(file, setLogoUploaded, logoLoaderHandler);\n };\n const handleImgUpload = (obj) => {\n let newObj = {\n thumbnail: `sia:${obj.thumbnail}`,\n image: `sia:${obj.skylink}`,\n };\n setAppLogo(newObj);\n setIsLogoUploaded(false);\n // formik.setFieldValue(\"imgSkylink\", obj.skylink, true);\n // formik.setFieldValue(\"imgThumbnailSkylink\", obj.thumbnail, true)\n };\n const handleFirstImageUpload = (obj) => {\n let newObj = {\n thumbnail: `sia:${obj.thumbnail}`,\n image: `sia:${obj.skylink}`,\n };\n setIsImageUploadingFirstObj(newObj);\n setIsImageUploadingFirst(false);\n };\n const handleFirst1ImageUpload = (obj) => {\n let newObj = {\n thumbnail: `sia:${obj.thumbnail}`,\n image: `sia:${obj.skylink}`,\n };\n setIsImageUploadingFirstObj1(newObj);\n setIsImageUploadingFirst1(false);\n };\n const handleSecondImageUpload = (obj) => {\n let newObj = {\n thumbnail: `sia:${obj.thumbnail}`,\n image: `sia:${obj.skylink}`,\n };\n setIsImageUploadingSecondObj(newObj);\n setIsImageUploadingSecond(false);\n };\n\n const handleThirdImageUpload = (obj) => {\n let newObj = {\n thumbnail: `sia:${obj.thumbnail}`,\n image: `sia:${obj.skylink}`,\n };\n setIsImageUploadingThirdObj(newObj);\n setIsImageUploadingThird(false);\n };\n\n const handleDropZoneClick = (evt, dropZoneRef) => {\n evt.preventDefault();\n evt.stopPropagation();\n // setIsLogoUploaded(true);\n dropZoneRef.current.gridRef.current.click();\n };\n\n {toggle ? document.body.className = \"darkBodyColor\" : document.body.className = \"lightBodyColor\"}\n\n // get\n\n return (\n <Box>\n {mandatory ? <Alert severity=\"error\">Fill all fields!</Alert> : null}\n <Box\n display=\"flex\"\n alignItems=\"center\"\n justifyContent=\"space-between\"\n marginTop=\"7px\"\n >\n <h1 className={toggle ? classes.darkh1 : classes.lighth1}>Publish App</h1>\n <Box className={classes.btnBox}>\n <Button className={classes.cancelBtn} onClick={handleReset}> Reset Form </Button>\n <Button\n disabled={isSubmit}\n className={classes.submitBtn}\n onClick={handleSubmit(onSubmit)}\n >\n <Add />\n {isSubmit ? (\n <Loader type=\"Oval\" color=\"#FFFFFF\" height={15} width={15} />\n ) : (\n \"Submit\"\n )}\n </Button>\n </Box>\n </Box>\n\n\n <Modal\n aria-labelledby=\"transition-modal-title\"\n aria-describedby=\"transition-modal-description\"\n className={classes.modal}\n open={false || (isModelOpen && !SnLoader)}\n onClose={(e)=>setIsModelOpen(false)}\n closeAfterTransition\n BackdropComponent={Backdrop}\n BackdropProps={{\n timeout: 500,\n }}\n >\n <Fade in={(isModelOpen && !SnLoader)}>\n <Box className={toggle ? classes.darkShareCardContainer : classes.lightShareCardContainer}>\n <Typography component='h2' className={toggle ? classes.darkModalTitle : classes.lightModalTitle}>\n App Published Successfully\n </Typography>\n <Typography component=\"p\">\n Now you will be redirected to AppStore page, If you want to stay on same page click Cancel Button\n </Typography>\n <Box style={{ textAlign: 'right' }}>\n <Button onClick={(e)=> history.push('/apps')} className={toggle ? classes.darkOkBtn : classes.lightOkBtn}>\n Ok\n </Button>\n <Button onClick={(e)=>setIsModelOpen(false)} className={toggle ? classes.darkCloseBtn : classes.lightCloseBtn}>\n Cancel\n </Button>\n </Box>\n </Box>\n </Fade>\n </Modal>\n <Box component=\"form\">\n <Box>\n <label className={classes.label}>Site Logo</label>\n <div className=\"d-none\">\n <SnUpload\n name=\"files\"\n source={UPLOAD_SOURCE_NEW_HOSTING_IMG}\n ref={imgUploadEleRef}\n directoryMode={false}\n onUpload={(e) => handleImgUpload(e)}\n uploadStarted={(e) => setIsLogoUploaded(e)}\n />\n </div>\n <div className={toggle ? classes.darkSiteLogo : classes.lightSiteLogo} onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef)} >\n {!isLogoUploaded && !Object.keys(appLogo).length && !appDetail && <Box style={{ flexDirection: \"column\", justifyItems: 'center' }}> \n <Box style={{ position: \"relative\", textAlign: 'center' }}>\n <ImgIcon />\n </Box> \n <Box style={{ position: \"relative\", color: \"grey\", textAlign: 'center' }}>click to upload Image</Box> \n </Box>}\n {!isLogoUploaded && (Object.keys(appLogo).length || appDetail) ? <img\n alt=\"app\"\n src={skylinkToUrl(appLogo?.thumbnail || appDetail?.content.imgThumbnailSkylink)}\n style={{\n width: \"100%\",\n height: \"160px\",\n // border: props.arrSelectedAps.indexOf(app) > -1 ? \"2px solid #1ed660\" : null,\n }}\n onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef)}\n name=\"1\"\n /> : null\n }\n {isLogoUploaded && (\n <Loader\n type=\"Oval\"\n color=\"#57C074\"\n height={50}\n width={50}\n />\n )}\n </div>\n <div className={classes.inputGuide}>\n Max. size of 5 MB in: JPG or PNG. 300x500 or larger recommended\n </div>\n <input type=\"text\" hidden />\n </Box>\n {isAppLogoTrue && (\n <div className=\"required-field\">This field is required</div>\n )}\n <Box\n display=\"flex\"\n className={`${classes.formRow} ${classes.formRow1}`}\n >\n <Box\n className={`${toggle ? classes.darkInputContainer : classes.lightInputContainer} ${classes.max33}`}\n flex={1}\n >\n <label>App Name <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <input\n className={toggle ? classes.darkInput : classes.lightInput}\n placeholder=\"\"\n name=\"appname\"\n ref={register}\n />\n {isAppNameTrue && (\n <div className=\"required-field\">This field is required</div>\n )}\n </Box>\n <Box className={`${toggle ? classes.darkInputContainer : classes.lightInputContainer} ${classes.max33}`} flex={1}>\n <label>App URL(Skylink) <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <input\n name=\"appUrl\"\n ref={register}\n className={toggle ? classes.darkInput : classes.lightInput}\n placeholder=\"https://[hns name].hns\"\n />\n {isAppUrlTrue && (\n <div className=\"required-field\">This field is required</div>\n )}\n </Box>\n <Box className={`${toggle ? classes.darkInputContainer : classes.lightInputContainer}`} flex={1}>\n <label>App Version <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <input\n name=\"verson\"\n ref={register}\n className={toggle ? classes.darkInput : classes.lightInput}\n placeholder=\"Version\"\n />\n {isAppVersionTrue && (\n <div className=\"required-field\">This field is required</div>\n )}\n </Box>\n <Box className={`${toggle ? classes.darkInputContainer : classes.lightInputContainer} ${classes.selectVersion}`}>\n <label>App Status <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <Box>\n <Controller\n isMulti={false}\n as={Select}\n ref={register}\n control={control}\n name=\"appStatus\"\n defaultValue={selectedOption}\n onChange={setSelectedOption}\n options={appStatus}\n styles={toggle ? darkReactSelectStyles : lightReactSelectStyles}\n />\n </Box>\n </Box>\n </Box>\n\n <Box\n display=\"flex\"\n className={`${classes.formRow} ${classes.formRow2}`}\n >\n <Box className={`${toggle ? classes.darkInputContainer : classes.lightInputContainer}`} flex={0.38}>\n <label>App Category <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <Box>\n <Controller\n as={Select}\n control={control}\n ref={register}\n name=\"category\"\n defaultValue={selectedOption}\n onChange={setSelectedOption}\n options={appCatOptions}\n styles={toggle ? darkReactSelectStyles : lightReactSelectStyles}\n />\n {isAppCatTrue && (\n <div className=\"required-field\">This field is required</div>\n )}\n </Box>\n </Box>\n <Box className={classes.inputContainerTag} flex={1}>\n <label>Custom Tags <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <TagsInput\n value={tags}\n className={toggle ? classes.darkInputTag : classes.lightInputTag}\n onChange={(tags) => setTags(tags)}\n />\n {/* <input\n className={classes.input}\n name=\"tags\"\n ref={register}\n value=\"Skylink\"\n /> */}\n </Box>\n </Box>\n <Box\n display=\"flex\"\n className={`${classes.formRow} ${classes.formRow2}`}\n >\n <Box className={toggle ? classes.darkInputContainer : classes.lightInputContainer} flex={1}>\n <label>Git URL <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <input\n name=\"sourceCode\"\n ref={register}\n className={toggle ? classes.darkInput : classes.lightInput}\n placeholder=\"https://github.com\"\n />\n </Box>\n <Box className={toggle ? classes.darkInputContainer : classes.lightInputContainer} flex={1}>\n <label>Demo URL</label>\n <input\n className={toggle ? classes.darkInput : classes.lightInput}\n name=\"demoUrl\"\n ref={register}\n placeholder=\"https://www.demo.com/UJJ5Rgbu2TM\"\n />\n </Box>\n <Box className={`${toggle ? classes.darkInputContainer : classes.lightInputContainer} ${classes.selectVersion}`}>\n <label>Age Restriction? <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <Box>\n <Controller\n as={Select}\n name=\"age\"\n ref={register}\n control={control}\n defaultValue={selectedOption}\n onChange={([selected]) => {\n // React Select return object instead of value for selection\n return { value: selected };\n }}\n options={optionsAge}\n styles={toggle ? darkReactSelectStyles : lightReactSelectStyles}\n />\n </Box>\n </Box>\n </Box>\n <div className={classes.OneRowInput}>\n <div>\n <label className={classes.previewImgLabel} >\n Preview Video/Images\n <span>\n {\" \"}\n Max. size of 5 MB in: JPG or PNG. 1750x900 or larger recommended\n </span> <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip>\n </label>\n </div>\n <Grid container spacing={2}>\n <Grid item md={3} sm={6} xs={6}>\n <Box style={{ position: \"relative\" }} >\n <div className=\"d-none\">\n <SnUpload\n name=\"files\"\n source={UPLOAD_SOURCE_DEPLOY}\n ref={imgUploadEleRef1}\n directoryMode={false}\n onUpload={(e) => handleFirst1ImageUpload(e)}\n uploadStarted={(e) => setIsImageUploadingFirst1(e)}\n />\n </div>\n <div className={toggle ? classes.darkPreviewImg : classes.lightPreviewImg} onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef1)} >\n {!isImageUploadFirst1 && !Object.keys(isImageUploadFirstObj1).length && <Box style={{ flexDirection: \"column\", justifyItems: 'center' }}> \n <Box style={{ position: \"relative\", textAlign: 'center' }}>\n <ImgIcon />\n </Box> \n <Box style={{ position: \"relative\", color: \"grey\", textAlign: 'center' }}>click to upload Image</Box> \n </Box>}\n {!isImageUploadFirst1 && Object.keys(isImageUploadFirstObj1).length ? <img\n alt=\"app\"\n src={skylinkToUrl(isImageUploadFirstObj1?.thumbnail)}\n style={{\n width: \"250px\",\n height: \"150px\",\n // border: props.arrSelectedAps.indexOf(app) > -1 ? \"2px solid #1ed660\" : null,\n }}\n onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef1)}\n name=\"1\"\n /> : null\n }\n {isImageUploadFirst1 && (\n <Loader\n type=\"Oval\"\n color=\"#57C074\"\n height={50}\n width={50}\n />\n )}\n </div>\n <input type=\"text\" hidden />\n </Box>\n </Grid>\n\n <Grid item md={3} sm={6} xs={6}>\n <Box style={{ position: \"relative\" }} \n >\n <div className=\"d-none\">\n <SnUpload\n name=\"files\"\n source={UPLOAD_SOURCE_DEPLOY}\n ref={imgUploadEleRef2}\n directoryMode={false}\n onUpload={(e) => handleFirstImageUpload(e)}\n uploadStarted={(e) => setIsImageUploadingFirst(e)}\n />\n </div>\n <div className={toggle ? classes.darkPreviewImg : classes.lightPreviewImg} onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef2)} >\n {!isImageUploadFirst && !Object.keys(isImageUploadFirstObj).length && <Box style={{ flexDirection: \"column\", justifyItems: 'center' }}> \n <Box style={{ position: \"relative\", textAlign: 'center' }}>\n <ImgIcon />\n </Box> \n <Box style={{ position: \"relative\", color: \"grey\", textAlign: 'center' }}>click to upload Image</Box> \n </Box>}\n {!isImageUploadFirst && Object.keys(isImageUploadFirstObj).length ? <img\n alt=\"app\"\n src={skylinkToUrl(isImageUploadFirstObj?.thumbnail)}\n style={{\n width: \"250px\",\n height: \"150px\",\n // border: props.arrSelectedAps.indexOf(app) > -1 ? \"2px solid #1ed660\" : null,\n }}\n onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef2)}\n name=\"1\"\n /> : null\n }\n {isImageUploadFirst && (\n <Loader\n type=\"Oval\"\n color=\"#57C074\"\n height={50}\n width={50}\n />\n )}\n </div>\n <input type=\"text\" hidden />\n </Box>\n </Grid>\n\n <Grid item md={3} sm={6} xs={6}>\n <Box\n style={{ position: \"relative\" }}\n id=\"img2\"\n \n >\n <div className=\"d-none\">\n <SnUpload\n name=\"files\"\n source={UPLOAD_SOURCE_DEPLOY}\n ref={imgUploadEleRef3}\n directoryMode={false}\n onUpload={(e) => handleSecondImageUpload(e)}\n uploadStarted={(e) => setIsImageUploadingSecond(e)}\n />\n </div>\n <div className={toggle ? classes.darkPreviewImg : classes.lightPreviewImg} onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef3)} >\n {!isImageUploadSecond && !Object.keys(isImageUploadSecondObj).length && <Box style={{ flexDirection: \"column\", justifyItems: 'center' }}> \n <Box style={{ position: \"relative\", textAlign: 'center' }}>\n <ImgIcon />\n </Box> \n <Box style={{ position: \"relative\", color: \"grey\", textAlign: 'center' }}>click to upload Image</Box> \n </Box>}\n {!isImageUploadSecond && Object.keys(isImageUploadSecondObj).length ? <img\n alt=\"app\"\n src={skylinkToUrl(isImageUploadSecondObj?.thumbnail)}\n style={{\n width: \"250px\",\n height: \"150px\",\n // border: props.arrSelectedAps.indexOf(app) > -1 ? \"2px solid #1ed660\" : null,\n }}\n onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef3)}\n name=\"1\"\n /> : null\n }\n {isImageUploadSecond && (\n <Loader\n type=\"Oval\"\n color=\"#57C074\"\n height={50}\n width={50}\n />\n )}\n </div>\n <input type=\"text\" hidden />\n </Box>\n\n </Grid>\n <Grid item md={3} sm={6} xs={6}>\n <Box\n style={{ position: \"relative\" }}\n id=\"img3\"\n \n >\n <div className=\"d-none\">\n <SnUpload\n name=\"files\"\n source={UPLOAD_SOURCE_DEPLOY}\n ref={imgUploadEleRef4}\n directoryMode={false}\n onUpload={(e) => handleThirdImageUpload(e)}\n uploadStarted={(e) => setIsImageUploadingThird(e)}\n />\n </div>\n <div className={toggle ? classes.darkPreviewImg : classes.lightPreviewImg} onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef4)} >\n {!isImageUploadThird && !Object.keys(isImageUploadThirdObj).length && <Box style={{ flexDirection: \"column\", justifyItems: 'center' }}> \n <Box style={{ position: \"relative\", textAlign: 'center' }}>\n <ImgIcon />\n </Box> \n <Box style={{ position: \"relative\", color: \"grey\", textAlign: 'center' }}>click to upload Image</Box> \n </Box>}\n {!isImageUploadThird && Object.keys(isImageUploadThirdObj).length ? <img\n alt=\"app\"\n src={skylinkToUrl(isImageUploadThirdObj?.thumbnail)}\n style={{\n width: \"250px\",\n height: \"150px\",\n // border: props.arrSelectedAps.indexOf(app) > -1 ? \"2px solid #1ed660\" : null,\n }}\n onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef4)}\n name=\"1\"\n /> : null\n }\n {isImageUploadThird && (\n <Loader\n type=\"Oval\"\n color=\"#57C074\"\n height={50}\n width={50}\n />\n )}\n </div>\n <input type=\"text\" hidden />\n </Box>\n </Grid>\n {/* <Grid item md={3} sm={6} xs={6}>\n <Box ></Box>\n </Grid> */}\n </Grid>\n </div>\n <div className={classes.OneRowInput}>\n <div>\n <label className={classes.textareaLabel}>\n App Description\n <span>Detailed summary of your app</span><Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip>\n </label>\n </div>\n <Box position=\"relative\">\n <TextareaAutosize\n name=\"appDescription\"\n ref={register}\n className={toggle ? classes.darkTextarea : classes.lightTextarea}\n aria-label=\"minimum height\"\n rowsMin={6}\n maxLength={5000}\n // value=\"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et.\"\n placeholder=\"Detailed summary of your app\"\n />\n <span className={classes.maxChar}>0/5000</span>\n </Box>\n {isAppDetailDesTrue && (\n <div className=\"required-field\">Max 5000 Characters</div>\n )}\n </div>\n <div className={classes.OneRowInput}>\n <div>\n <label className={classes.textareaLabel}>\n Release Notes <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip>\n {/* <span>This will go on App Card.</span> */}\n </label>\n </div>\n <Box position=\"relative\">\n <TextareaAutosize\n className={toggle ? classes.darkTextarea : classes.lightTextarea}\n aria-label=\"minimum height\"\n rowsMin={4}\n ref={register}\n maxLength={5000}\n name=\"releaseNotes\"\n // value=\"Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et.\"\n placeholder=\"Write your Comment\"\n />\n <span className={classes.maxChar}>0/5000</span>\n </Box>\n {isAppDetailDesTrue && (\n <div className=\"required-field\">Max 5000 Characters</div>\n )}\n </div>\n <div className={classes.OneRowInput}>\n <div>\n <label className={classes.textareaLabel}>Social Connections <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n </div>\n <Box position=\"relative\">\n <Grid container spacing={2}>\n <Grid item md={6} lg={4} sm={12} xs={12}>\n <Box display=\"flex\" className={toggle ? classes.darkSocialOptionContainer : classes.lightSocialOptionContainer}>\n <Controller\n isMulti={false}\n as={Select}\n ref={register}\n control={control}\n classNamePrefix=\"socialMedia\"\n className={toggle ? classes.darkSocilaMediaSelect : classes.lightSocilaMediaSelect}\n name=\"firstSocialLinkTitle\"\n defaultValue={firstSocialLinkTitle}\n onChange={(e) => setfirstSocialLinkTitle(e.value)}\n options={socialOption}\n styles={toggle ? darkReactSelectStyles : lightReactSelectStyles}\n />\n <input\n value={firstSocialLink}\n placeholder=\"\"\n onChange={(e) => setfirstSocialLink(e.target.value)}\n />\n </Box>\n </Grid>\n <Grid item md={6} lg={4} sm={12} xs={12}>\n <Box display=\"flex\" className={toggle ? classes.darkSocialOptionContainer : classes.lightSocialOptionContainer}>\n <Controller\n isMulti={false}\n as={Select}\n ref={register}\n control={control}\n classNamePrefix=\"socialMedia\"\n className={toggle ? classes.darkSocilaMediaSelect : classes.lightSocilaMediaSelect}\n name=\"secondSocialLinkTitle\"\n defaultValue={secondSocialLinkTitle}\n onChange={(e) => setSecondSocialLinkTitle(e.value)}\n options={socialOption}\n styles={toggle ? darkReactSelectStyles : lightReactSelectStyles}\n />\n <input\n placeholder=\"\"\n value={secondSocialLink}\n onChange={(e) => setSecondSocialLink(e.target.value)}\n />\n </Box>\n </Grid>\n <Grid item md={6} lg={4} sm={12} xs={12}>\n <Box display=\"flex\" className={toggle ? classes.darkSocialOptionContainer : classes.lightSocialOptionContainer}>\n <Controller\n isMulti={false}\n as={Select}\n ref={register}\n control={control}\n classNamePrefix=\"socialMedia\"\n className={toggle ? classes.darkSocilaMediaSelect : classes.lightSocilaMediaSelect}\n name=\"thirdSocialLinkTitle\"\n defaultValue={thirdSocialLinkTitle}\n onChange={(e) => setThirdSocialLinkTitle(e.value)}\n options={socialOption}\n styles={toggle ? darkReactSelectStyles : lightReactSelectStyles}\n />\n <input\n placeholder=\"\"\n value={thirdSocialLink}\n onChange={(e) => setThirdSocialLink(e.target.value)}\n />\n </Box>\n </Grid>\n\n <Grid item md={6} lg={4} style={{ alignSelf: \"center\" }}>\n <Button\n className={classes.button}\n onClick={handleSubmit(onSubmit)}\n disabled={isSubmit}\n >\n {isSubmit ? (\n <Loader\n type=\"Oval\"\n color=\"#FFFFFF\"\n height={15}\n width={15}\n />\n ) : (\n \"Submit\"\n )}\n </Button>\n </Grid>\n </Grid>\n </Box>\n </div>\n </Box>\n </Box>\n );\n};\n\nexport default SubmitApp;\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/OtherPages/UnderDevelopment.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/DeploySite.js",["842","843","844"],"import React, { createRef, useState } from 'react';\nimport { Box, Button, makeStyles, Grid, ListItemIcon, List, ListItem, Typography, FormGroup, FormControlLabel } from '@material-ui/core';\nimport { useSelector, useDispatch } from \"react-redux\";\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport DescriptionIcon from \"@material-ui/icons/Description\";\nimport styles from '../../assets/jss/app-details/SubmitAppStyles';\nimport \"./DeploySiteStyles.css\";\nimport moment from \"moment\";\nimport Switch from './Switch'\n// img icon\nimport { BsFileEarmarkArrowUp } from \"react-icons/bs\";\nimport SnUpload from \"../../uploadUtil/SnUpload\";\nimport DoneIcon from '@material-ui/icons/Done'\nimport { ReactComponent as UploadIcon } from '../../assets/img/icons/cloud-upload-outline.svg'\nimport { ReactComponent as SettingIcon } from '../../assets/img/icons/settingIconGreen.svg';\nimport { ReactComponent as IcIcon } from '../../assets/img/icons/ic_increase.svg';\nimport { DropzoneArea } from 'material-ui-dropzone';\nimport { UPLOAD_SOURCE_DEPLOY } from '../../utils/SnConstants';\nimport { IOSSwitch } from \"./Switch\";\nimport { setMyHostedApp } from '../../service/SnSkappService';\nimport { setLoaderDisplay } from '../../redux/action-reducers-epic/SnLoaderAction';\nimport { genHostedAppSkappUrl, getBase32Skylink } from \"../../utils/SnUtility\";\nimport useShowHostingLinks from '../../hooks/useShowHostingLinks';\nimport { useLoadHostedAppFromUrl } from '../../hooks/useLoadHostedAppFromUrl';\nconst useStyles = makeStyles(styles)\n\nconst DeploySite = ({toggle}) => {\n\n const classes = useStyles();\n\n const uploadEleRef = createRef();\n const dropZoneRef = createRef();\n\n const [isFileUpload, setIsFileUpload] = useState(false);\n const [appDetail, setAppDetail] = useLoadHostedAppFromUrl();\n const dispatch = useDispatch();\n const snUploadListStore = useSelector((state) => state.snUploadListStore);\n\n useShowHostingLinks();\n\n const copyToClipboard = (url) => {\n navigator.clipboard.writeText(url);\n };\n\n const handleDropZoneClick = (evt)=> {\n evt.preventDefault();\n evt.stopPropagation();\n uploadEleRef.current.gridRef.current.click();\n };\n\n const updateHostedApp = async (obj) => {\n dispatch(setLoaderDisplay(true));\n let currAppDetail = appDetail;\n currAppDetail.content.skylink = obj.skylink;\n const newAppDetail = await setMyHostedApp(currAppDetail.content, currAppDetail.id);\n dispatch(setLoaderDisplay(false));\n setAppDetail(newAppDetail);\n };\n\n {toggle ? document.body.className = \"darkBodyColor\" : document.body.className = \"lightBodyColor\"}\n\n return (\n <Box >\n <Box display=\"flex\" alignItems=\"center\" justifyContent='space-between' marginTop='7px'>\n <h1 className={classes.h1}>\n {appDetail?.content?.appName && `${appDetail.content.appName} / Deploy`}\n </h1>\n <Box className={classes.btnBox + \" d-none temp\"}>\n <Button className={classes.settingBtn}>\n <SettingIcon />\n Setting\n </Button>\n </Box>\n </Box>\n\n <Box component=\"form\">\n {/* < */}\n <Grid container spacing={2} className={classes.GridContainer}>\n <Grid item lg={4} md={6} sm={6} xs={12}>\n <h4 className={classes.h4}>DNS</h4>\n <div className={toggle ? classes.darkDNSContainer : classes.lightDNSContainer}>\n <p className={classes.ContentItemTitle}>Skapp URL</p>\n <p className={classes.siteLink}>\n {genHostedAppSkappUrl(appDetail)}\n </p>\n <Box display=\"flex\" justifyContent=\"space-between\" marginTop='15px'>\n <div>\n <p className={classes.ContentItemTitle}>Skapp Base 32 URL</p>\n <p className={classes.siteLink}>\n { appDetail?.content?.skylink && appDetail.content.storageGateway &&\n `https://${getBase32Skylink(appDetail.content.skylink)}.${appDetail?.content?.storageGateway}`}\n </p>\n </div>\n <span className={classes.changeBtnLink + \" d-none temp\"}>Change</span>\n </Box>\n\n </div>\n </Grid>\n <Grid item lg={4} md={6} sm={6} xs={12}>\n <h4 className={classes.h4}>Deployments</h4>\n <div className={toggle ? classes.darkDevelopmentsContainer : classes.lightDevelopmentsContainer}>\n\n <List\n\n component=\"div\"\n aria-labelledby=\"list\"\n\n className={classes.ListRoot}\n >\n { appDetail?.content?.history && \n Object.keys(appDetail.content.history)\n .sort((ts1, ts2)=>parseInt(ts2)-parseInt(ts1))\n .map((ts, idx, arr) => \n <ListItem button key={idx}>\n <Box display=\"flex\" marginRight=\"auto\" alignItems=\"center\">\n <ListItemIcon>\n <DoneIcon />\n </ListItemIcon>\n <p>#{(arr.length - idx)}</p>\n </Box>\n <span>{moment(parseInt(ts)).fromNow()}</span>\n </ListItem>\n )\n }\n </List>\n </div>\n </Grid>\n <Grid item lg={4} md={12} sm={12} xs={12}>\n <h4 className={classes.h4}>Statistics</h4>\n <div className={toggle ? classes.darkStatsContainer : classes.lightStatsContainer}>\n <Grid container>\n <Grid className={classes.statCol} item xs={12} sm={6} md={6} >\n <div className={classes.StatTitle}>\n Number Of Files\n </div>\n <div className={toggle ? classes.darkStatValue : classes.lightStatValue}>\n 400\n </div>\n <div className={toggle ? classes.darkGraphText : classes.lightGraphText}>\n <span>+10.01%</span> <IcIcon />\n </div>\n </Grid>\n <Grid flex={1} alignSelf=\"center\" item xs={12} sm={6} md={6}>\n <Box className={`${classes.statCol} ${classes.paddingLeft}`} >\n\n <div className={classes.StatTitle}>\n Number Of Files\n </div>\n <div className={toggle ? classes.darkStatValue : classes.lightStatValue}>\n 400\n </div>\n <div className={toggle ? classes.darkGraphText : classes.lightGraphText}>\n <span>+10.01%</span> <IcIcon />\n </div>\n </Box>\n <p style={{ textAlign: 'center', fontSize: 16, color: '#97A0C3', marginTop: 10 }}>Skapp Version Number: 1.0</p>\n </Grid>\n </Grid>\n\n </div>\n </Grid>\n </Grid>\n\n <div className={classes.OneRowInput}>\n <div className=\"d-none temp\">\n <FormGroup>\n <FormControlLabel style={{ color: '#5A607F', marginBottom: 5 }}\n label=\"Upload File\"\n control={<IOSSwitch \n onChange={(evt) => setIsFileUpload(evt.target.checked)} \n name=\"toggleFileUpload\" />}\n\n />\n </FormGroup>\n </div>\n\n <Grid container spacing={2}>\n <Grid item xs={12}>\n <Box>\n <div className=\"d-none\">\n <SnUpload\n name=\"files\"\n source={UPLOAD_SOURCE_DEPLOY}\n ref={uploadEleRef}\n directoryMode={!isFileUpload}\n onUpload={updateHostedApp}\n />\n\n </div>\n <div className={toggle ? classes.darkPreviewImg : classes.lightPreviewImg} style={{ flexDirection: 'column', width: '100%', minHeight: '230px' }}>\n <DropzoneArea\n showPreviewsInDropzone={false}\n onDrop={(files) => {\n uploadEleRef.current.handleDrop(files)\n }}\n // className={classes.dropZonArea}\n Icon={\"none\"}\n inputProps={{ webkitdirectory: true, mozdirectory: true }}\n ref={dropZoneRef}\n webkitdirectory={true}\n mozdirectory={true}\n maxFileSize={210000000}\n // onDelete={delImg}\n filesLimit={1}\n showAlerts={false}\n dropzoneText={\n <div id=\"dropzone-text\" onClick={handleDropZoneClick}>\n <div><UploadIcon /></div>\n\n <div style={{ color: '#5C757D' }}>\n Drag and drop files or folder here\n </div>\n <Button className={classes.uploadBtn}>\n Select {isFileUpload ? \"Files\" : \"Folder\"}\n </Button>\n </div>\n }\n />\n </div>\n </Box>\n <Box>\n {snUploadListStore && snUploadListStore[UPLOAD_SOURCE_DEPLOY] && snUploadListStore[UPLOAD_SOURCE_DEPLOY].length > 0 && snUploadListStore[UPLOAD_SOURCE_DEPLOY]\n .map((fileObj) => (\n <Grid\n item\n xs={12}\n className={classes.show_img_title_grid}\n style={{ paddingTop: \"20px\", paddingBottom: \"20px\" }}\n >\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n width: \"100%\",\n }}\n >\n <div >\n\n <Typography className={classes.linkName}>\n <span>\n <DescriptionIcon className={classes.descIcon} />\n </span>\n {fileObj?.file?.path || fileObj?.file?.name}\n </Typography>\n {fileObj?.status && fileObj?.status === 'complete' && (<Typography className={classes.linkName}>\n Skylink: {fileObj?.url}\n </Typography>)}\n {fileObj?.status && fileObj?.status !== 'complete' && (<Typography className={classes.linkName}>\n {fileObj?.status.toUpperCase()} {fileObj?.status === 'uploading' && !isNaN(fileObj.progress) && `${(Math.trunc(fileObj.progress * 100))} %`}\n </Typography>)}\n </div>\n <div style={{ display: \"flex\", alignItems: \"center\" }}>\n {/* <TiAttachment\n style={{\n fontSize: \"18px\",\n color: \"#1ed660\",\n marginRight: 10,\n }}\n /> */}\n {fileObj?.status === 'complete' && <FileCopyIcon\n className={classes.descIcon}\n style={{\n cursor: \"pointer\",\n }}\n onClick={() => copyToClipboard(fileObj?.url)}\n />}\n </div>\n </div>\n </Grid>))}\n </Box>\n </Grid>\n\n </Grid>\n </div>\n </Box>\n\n </Box >\n )\n}\n\nexport default DeploySite\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/StorageGateway.js",["845","846","847","848","849","850"],"import { Box, InputBase } from '@material-ui/core'\nimport React, { Fragment, useState, useEffect } from 'react'\nimport { fade, makeStyles } from '@material-ui/core/styles'\nimport SearchIcon from '@material-ui/icons/Search'\nimport UtilitiesItem from '../AppsComp/UtilitiesItem'\nimport ListFilter from '../AppsComp/ListFilter'\nimport SubmitBtn from '../AppsComp/SubmitBtn'\nimport useWindowDimensions from '../../hooks/useWindowDimensions'\nimport StorageTable from './StorageTable'\nimport AddEditStorage from './AddEditStorage'\nimport * as Yup from \"yup\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setLoaderDisplay } from \"../../redux/action-reducers-epic/SnLoaderAction\";\nimport { getStorageAction, setStorageEpic, setEditStorageEpic, setDeleteStorageEpic } from \"../../redux/action-reducers-epic/SnStorageAction\";\n\n\nconst useStyles = makeStyles(theme => (\n {\n lightSearch: {\n position: 'relative',\n borderRadius: theme.shape.borderRadius,\n backgroundColor: fade('#fff', 1),\n '&:hover': {\n backgroundColor: fade(\"#fff\", 0.9),\n },\n marginRight: theme.spacing(2),\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n marginLeft: theme.spacing(3),\n width: 'auto',\n },\n color: '#8B9DA5',\n boxShadow: '0px 1px 2px #15223214',\n border: '1px solid #7070701A;',\n\n marginLeft: '16px!important',\n '@media (max-width: 1650px)': {\n width: 'auto'\n },\n\n },\n darkSearch: {\n position: 'relative',\n borderRadius: theme.shape.borderRadius,\n backgroundColor: fade('#2A2C34', 1),\n '&:hover': {\n backgroundColor: fade(\"#2A2C34\", 0.9),\n },\n marginRight: theme.spacing(2),\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n marginLeft: theme.spacing(3),\n width: 'auto',\n },\n color: '#8B9DA5',\n boxShadow: '0px 1px 2px #15223214',\n border: '1px solid rgba(0, 0, 0, 0.8);',\n\n marginLeft: '16px!important',\n '@media (max-width: 1650px)': {\n width: 'auto'\n },\n\n },\n searchIcon: {\n padding: theme.spacing(0, 2),\n height: '100%',\n position: 'absolute',\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#B4C6CC'\n },\n lightInputRoot: {\n // color: 'inherit',\n color: '#2A2C34!important',\n },\n darkInputRoot: {\n color: '#fff!important',\n border: '1px solid rgba(255, 255, 255, 0.1)'\n },\n inputInput: {\n paddingLeft: `calc(1em + ${theme.spacing(4)}px)`,\n transition: theme.transitions.create('width'),\n width: '100%',\n [theme.breakpoints.up('md')]: {\n width: '100%',\n },\n [theme.breakpoints.up('lg')]: {\n width: '50ch',\n },\n paddingTop: '10px',\n paddingBottom: '10px',\n '@media (max-width: 1660px)': {\n width: '34ch'\n },\n '@media (max-width: 1460px)': {\n width: '100%'\n }\n\n },\n lightPageHeading: {\n color: '#131523',\n fontSize: '28px',\n },\n darkPageHeading: {\n color: '#fff',\n fontSize: '28px',\n },\n smallText: {\n alignSelf: \"flex-end\",\n color: '#5A607F',\n paddingLeft: '1rem',\n fontWeight: '400'\n },\n Media1249: {\n width: 'calc(100% - 230px)',\n marginLeft: 'auto!important',\n marginRight: 0,\n '@media only screen and (max-width: 890px)': {\n width: '100%',\n },\n\n },\n margnBottomMediaQuery: {\n '@media only screen and (max-width: 1249px)': {\n marginBottom: '.75rem'\n },\n\n\n },\n\n secondNavRow2: {\n '@media only screen and (max-width: 890px)': {\n justifyContent: 'space-between'\n },\n '@media only screen and (max-width: 575px) and (min-width: 509px)': {\n marginBottom: '.6rem'\n }\n , '@media only screen and (max-width: 510px)': {\n flexWrap: 'wrap',\n \"& > div\": {\n width: '50%',\n minWidth: '50%',\n maxWidth: '50%',\n marginBottom: '.75rem'\n },\n \"& > div:nth-child(odd)\": {\n paddingRight: '1rem'\n\n }\n },\n },\n MobileFontStyle: {\n '@media only screen and (max-width: 575px) ': {\n marginBottom: '.7rem',\n marginTop: '.4rem',\n '& h1': {\n fontSize: '18px'\n }\n }\n }\n\n }\n))\n\nconst validationSchema = Yup.object().shape({\n portalName: Yup.string().required(\"This field is required\"),\n portalUrl: Yup.string().required(\"This field is required\"),\n portalType: Yup.string().required(\"This field is required\"),\n version: Yup.string().required(\"This field is required\"),\n});\n\nlet initailValueFormikObj = {\n portalName: \"\",\n portalUrl: \"\",\n version: \"1\",\n};\n\nfunction StorageGateway({ toggle }) {\n\n const { width } = useWindowDimensions()\n const classes = useStyles();\n const dispatch = useDispatch();\n const userStorages = useSelector((state) => state.SnStorages.storages);\n\n const [newDomain, setNewDomain] = useState(false);\n const [editDomain, setEditDomain] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState(null);\n \n const handleSetDomain = (val) => {\n setError(null);\n setNewDomain(val)\n setEditDomain(null);\n initailValueFormikObj = {\n portalName: \"\",\n portalUrl: \"\",\n version: \"1\"\n };\n } \n\n useEffect(async () => {\n // console.log(\"came here\");\n setIsLoading(true);\n await dispatch(getStorageAction());\n setIsLoading(false);\n }, []);\n\n const submitProfileForm = async (e) => {\n setError(null);\n if (editDomain !== null) {\n handleEdit({ index: editDomain, storage: e });\n handleSetDomain(false);\n setEditDomain(null);\n } else {\n if (userStorages.some(x => x.portalName.toLowerCase() === e.portalName.toLowerCase())) {\n setError('Portal Name already exists');\n return;\n }\n dispatch(setStorageEpic(e));\n handleSetDomain(false);\n }\n };\n\n const handleDelete = async (e) => {\n dispatch(setDeleteStorageEpic(e));\n }\n \n const handleEdit = async (e) => {\n dispatch(setEditStorageEpic(e));\n }\n\n const handleEditSet = async (e, domain) => {\n setEditDomain(e);\n initailValueFormikObj = {\n portalName: domain.portalName,\n portalUrl: domain.portalUrl,\n portalType: domain.portalType,\n version: domain.version\n };\n setNewDomain(true)\n }\n\n { toggle ? document.body.className = \"darkBodyColor\" : document.body.className = \"lightBodyColor\" }\n\n return ( \n <Fragment>\n {newDomain && <AddEditStorage error={error} editDomain={editDomain} newDomain={newDomain} setNewDomain={(e) => handleSetDomain(e)} submitProfileForm={(e)=>submitProfileForm(e)} initailValueFormikObj={initailValueFormikObj} validationSchema={validationSchema} toggle={toggle} />}\n <Box display=\"flex\" className='second-nav' alignItems=\"center\">\n <Box display=\"flex\" alignItems=\"center\" className={`${classes.margnBottomMediaQuery} ${classes.MobileFontStyle}`}>\n <h1 className={toggle ? classes.darkPageHeading : classes.lightPageHeading}>Storage Gateway Manager</h1>\n </Box>\n {width < 1250 && <div className={`${toggle ? classes.darkSearch : classes.lightSearch} ${classes.Media1249} ${classes.margnBottomMediaQuery}`}>\n <Box>\n <div className={classes.searchIcon}>\n <SearchIcon />\n </div>\n </Box>\n <InputBase\n placeholder=\"Search Apps\"\n classes={{\n root: toggle ? classes.darkInputRoot : classes.lightInputRoot,\n input: classes.inputInput,\n }}\n inputProps={{ 'aria-label': 'search' }}\n />\n </div>}\n <Box className={classes.secondNavRow2} display=\"flex\" alignItems=\"center\" flex={1} justifyContent='flex-end'>\n {width > 1249 && <div className={toggle ? classes.darkSearch : classes.lightSearch}>\n <Box>\n <div className={classes.searchIcon}>\n <SearchIcon />\n </div>\n </Box>\n <InputBase\n placeholder=\"Search Apps\"\n classes={{\n root: toggle ? classes.darkInputRoot : classes.lightInputRoot,\n input: classes.inputInput,\n }}\n inputProps={{ 'aria-label': 'search' }}\n />\n </div>}\n <Box>\n <SubmitBtn addSite={true} onClick={() => setNewDomain(true)} styles={{ justifyContent: \"space-around\" }}>\n Add Storage Gateway\n </SubmitBtn>\n </Box>\n </Box>\n\n </Box>\n <p className={classes.h3}>(Under Active Development. Coming soon...)</p>\n { !isLoading ? <StorageTable handleDelete={(e)=> handleDelete(e)} handleEdit={(e, val) => handleEditSet(e, val)} userStorages={userStorages} toggle={toggle} />: null }\n </Fragment>\n )\n}\nexport default StorageGateway\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/ErrorPage/Error.js",["851"],"import React from 'react'\nimport { Box, makeStyles } from '@material-ui/core'\nimport { ReactComponent as ErrorIcon } from '../../assets/img/icons/errorGrahpics.svg'\nimport { ReactComponent as ErrorIconDark } from '../../assets/img/icons/errorGrahpicsDark.svg'\nimport styles from '../../assets/jss/error-page/ErrorPageStyle'\nconst useStyles = makeStyles(styles)\n\nconst Error = ({toggle}) => {\n const classes = useStyles()\n\n {toggle ? document.body.className = \"darkBodyColor\" : document.body.className = \"lightBodyColor\"}\n\n return (\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"center\" flexDirection=\"column\" minHeight=\"calc(100vh - 200px)\" >\n {toggle ? <ErrorIconDark className={classes.errorIcon} /> : <ErrorIcon className={classes.errorIcon} /> }\n <h1 className={toggle ? classes.darkh1 : classes.lighth1}>505</h1>\n <p className={classes.text}>Don't worry, we will fix it soon.</p>\n <small className={classes.small}>Go back to <a href=\"#home \">home </a>or contact us <a href=\"#about\">about</a> a problem.</small>\n </Box >\n )\n}\n\nexport default Error\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Domain/Domains.js",["852","853","854","855","856","857","858","859"],"import { Box, InputBase } from '@material-ui/core'\nimport React, { Fragment, useState, useEffect } from 'react'\nimport { fade, makeStyles } from '@material-ui/core/styles'\nimport SearchIcon from '@material-ui/icons/Search'\nimport UtilitiesItem from '../AppsComp/UtilitiesItem'\nimport ListFilter from '../AppsComp/ListFilter'\nimport SubmitBtn from '../AppsComp/SubmitBtn'\nimport useWindowDimensions from '../../hooks/useWindowDimensions'\nimport DomainTable from './DomainTable'\nimport AddNewDomain from './AddNewDomain'\nimport AddNewDomainTXT from './AddNewDomainTXT'\nimport * as Yup from \"yup\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setLoaderDisplay } from \"../../redux/action-reducers-epic/SnLoaderAction\";\nimport { getDomainsAction, setDomainEpic, setEditDomainEpic, setDeleteDomainEpic } from \"../../redux/action-reducers-epic/SnDomainAction\";\nimport { getHNSSkyDBURL } from '../../service/SnSkappService';\n// import HostingItem from './HostingItem'\n// import AddNewSite from './AddNewSiteBtn'\nconst useStyles = makeStyles(theme => (\n {\n lightSearch: {\n position: 'relative',\n borderRadius: theme.shape.borderRadius,\n backgroundColor: fade('#fff', 1),\n '&:hover': {\n backgroundColor: fade(\"#fff\", 0.9),\n },\n marginRight: theme.spacing(2),\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n marginLeft: theme.spacing(3),\n width: 'auto',\n },\n color: '#8B9DA5',\n boxShadow: '0px 1px 2px #15223214',\n border: '1px solid #7070701A;',\n\n marginLeft: '16px!important',\n '@media (max-width: 1650px)': {\n width: 'auto'\n },\n\n },\n darkSearch: {\n position: 'relative',\n borderRadius: theme.shape.borderRadius,\n backgroundColor: fade('#2A2C34', 1),\n '&:hover': {\n backgroundColor: fade(\"#2A2C34\", 0.9),\n },\n marginRight: theme.spacing(2),\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n marginLeft: theme.spacing(3),\n width: 'auto',\n },\n color: '#8B9DA5',\n boxShadow: '0px 1px 2px #15223214',\n border: '1px solid rgba(0, 0, 0, 0.8);',\n\n marginLeft: '16px!important',\n '@media (max-width: 1650px)': {\n width: 'auto'\n },\n },\n searchIcon: {\n padding: theme.spacing(0, 2),\n height: '100%',\n position: 'absolute',\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#B4C6CC',\n },\n lightInputRoot: {\n // color: 'inherit',\n color: '#2A2C34!important',\n },\n darkInputRoot: {\n color: '#fff!important',\n border: '1px solid rgba(255, 255, 255, 0.1)'\n },\n inputInput: {\n paddingLeft: `calc(1em + ${theme.spacing(4)}px)`,\n transition: theme.transitions.create('width'),\n width: '100%',\n [theme.breakpoints.up('md')]: {\n width: '100%',\n },\n [theme.breakpoints.up('lg')]: {\n width: '50ch',\n },\n paddingTop: '10px',\n paddingBottom: '10px',\n '@media (max-width: 1660px)': {\n width: '34ch'\n },\n '@media (max-width: 1460px)': {\n width: '100%'\n }\n },\n lightPageHeading: {\n color: '#131523',\n fontSize: '28px',\n },\n darkPageHeading: {\n color: '#fff',\n fontSize: '28px',\n },\n smallText: {\n alignSelf: \"flex-end\",\n color: '#5A607F',\n paddingLeft: '1rem',\n fontWeight: '400'\n },\n Media1249: {\n width: 'calc(100% - 230px)',\n marginLeft: 'auto!important',\n marginRight: 0,\n '@media only screen and (max-width: 890px)': {\n width: '100%',\n },\n\n },\n margnBottomMediaQuery: {\n '@media only screen and (max-width: 1249px)': {\n marginBottom: '.75rem'\n },\n\n\n },\n\n secondNavRow2: {\n '@media only screen and (max-width: 890px)': {\n justifyContent: 'space-between'\n },\n '@media only screen and (max-width: 575px) and (min-width: 509px)': {\n marginBottom: '.6rem'\n }\n , '@media only screen and (max-width: 510px)': {\n flexWrap: 'wrap',\n \"& > div\": {\n width: '50%',\n minWidth: '50%',\n maxWidth: '50%',\n marginBottom: '.75rem'\n },\n \"& > div:nth-child(odd)\": {\n paddingRight: '1rem'\n\n }\n },\n },\n MobileFontStyle: {\n '@media only screen and (max-width: 575px) ': {\n marginBottom: '.7rem',\n marginTop: '.4rem',\n '& h1': {\n fontSize: '18px'\n }\n }\n }\n\n }\n))\n\nconst validationSchema = Yup.object().shape({\n domainName: Yup.string().required(\"This field is required\"),\n dataLink: Yup.string().required(\"This field is required\"),\n domainType: Yup.string().required(\"This field is required\"),\n version: Yup.string().required(\"This field is required\"),\n status: Yup.string().required(\"This field is required\"),\n});\n\nlet initailValueFormikObj = {\n domainName: \"\",\n dataLink: \"\",\n domainType: \"HNS\",\n txtRecord: \"\",\n version: \"1\",\n status: \"Active\"\n};\n\n\nconst Domains = ({ toggle }) => {\n\n const { width } = useWindowDimensions()\n const classes = useStyles()\n const [addNew, setAddNew] = useState(false)\n const dispatch = useDispatch();\n const userDomains = useSelector((state) => state.SnDomains.domains);\n\n const [newDomain, setNewDomain] = useState(false);\n const [editDomain, setEditDomain] = useState(null);\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState(null);\n\n const openModalHandler = () => {\n addNew ? setAddNew(false) : setAddNew(true)\n }\n\n const handleSetDomain = (val) => {\n setError(null);\n setNewDomain(val)\n setEditDomain(null);\n initailValueFormikObj = {\n domainName: \"\",\n dataLink: \"\",\n domainType: \"HNS\",\n txtRecord: \"\",\n version: \"1\",\n status: \"Active\"\n };\n } \n\n useEffect(async () => {\n // console.log(\"came here\");\n setIsLoading(true);\n await dispatch(getDomainsAction());\n setIsLoading(false);\n }, []);\n\n const submitProfileForm = async (e) => {\n setError(null);\n if (editDomain !== null) {\n const txtUrl = await getHNSSkyDBURL(e.seed,e.domainName, e.dataLink);\n e.txtRecord = txtUrl;\n handleEdit({ index: editDomain, domain: e });\n handleSetDomain(false);\n setEditDomain(null);\n } else {\n if (userDomains.some(x => x.domainName.toLowerCase() === e.domainName.toLowerCase())) {\n setError('Domain Name Already exist');\n return;\n }\n const txtUrl = await getHNSSkyDBURL(e.seed, e.domainName, e.dataLink);\n e.txtRecord = txtUrl;\n dispatch(setDomainEpic(e));\n handleSetDomain(false);\n }\n };\n\n const handleDelete = async (e) => {\n dispatch(setDeleteDomainEpic(e));\n }\n \n const handleEdit = async (e) => {\n dispatch(setEditDomainEpic(e));\n }\n\n const handleEditSet = async (e, domain) => {\n setEditDomain(e);\n initailValueFormikObj = {\n domainName: domain.domainName,\n dataLink: domain.dataLink,\n domainType: domain.domainType,\n txtRecord: domain.txtRecord,\n version: domain.version,\n status: domain.status\n };\n setNewDomain(true)\n }\n\n { toggle ? document.body.className = \"darkBodyColor\" : document.body.className = \"lightBodyColor\" }\n \n return (\n <Fragment>\n {newDomain && <AddNewDomainTXT error={error} editDomain={editDomain} newDomain={newDomain} setNewDomain={(e) => handleSetDomain(e)} submitProfileForm={(e)=>submitProfileForm(e)} initailValueFormikObj={initailValueFormikObj} validationSchema={validationSchema} toggle={toggle} />}\n {/* <AddNewDomain toggle={toggle} openModal={addNew} openModalHandler={openModalHandler} /> */}\n <Box display=\"flex\" className='second-nav' alignItems=\"center\">\n <Box display=\"flex\" alignItems=\"center\" className={`${classes.margnBottomMediaQuery} ${classes.MobileFontStyle}`}>\n <h1 className={toggle ? classes.darkPageHeading : classes.lightPageHeading}>Domain Manager</h1>\n </Box>\n {width < 1250 && <div className={`${toggle ? classes.darkSearch : classes.lightSearch} ${classes.Media1249} ${classes.margnBottomMediaQuery}`}>\n <Box>\n <div className={classes.searchIcon}>\n <SearchIcon />\n </div>\n </Box>\n <InputBase\n placeholder=\"Search Apps\"\n classes={{\n root: toggle ? classes.darkInputRoot : classes.lightInputRoot,\n input: classes.inputInput,\n }}\n inputProps={{ 'aria-label': 'search' }}\n />\n </div>}\n <Box className={classes.secondNavRow2} display=\"flex\" alignItems=\"center\" flex={1} justifyContent='flex-end'>\n {/* <Box>\n <UtilitiesItem toggle={toggle}/>\n </Box> */}\n {width > 1249 && <div className={toggle ? classes.darkSearch : classes.lightSearch}>\n <Box>\n <div className={classes.searchIcon}>\n <SearchIcon />\n </div>\n </Box>\n <InputBase\n placeholder=\"Search Apps\"\n classes={{\n root: toggle ? classes.darkInputRoot : classes.lightInputRoot,\n input: classes.inputInput,\n }}\n inputProps={{ 'aria-label': 'search' }}\n />\n </div>}\n {/* <Box>\n <ListFilter toggle={toggle}/>\n </Box> */}\n <Box>\n <SubmitBtn addSite={true} styles={{ justifyContent: \"space-around\" }} onClick={() => setNewDomain(true)}>\n Add Domain\n </SubmitBtn>\n </Box>\n </Box>\n\n </Box>\n <p className={classes.h3}>(Under Active Development. Coming soon...)</p>\n { !isLoading ? <DomainTable handleDelete={(e)=> handleDelete(e)} handleEdit={(e, val) => handleEditSet(e, val)} userDomains={userDomains} toggle={toggle} /> : null }\n </Fragment>\n )\n}\nexport default Domains\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/AddNewSite.js",["860","861","862","863","864","865","866","867","868","869","870","871","872","873","874","875","876"],"import React, { createRef, useEffect, useState } from 'react';\nimport { Box, Button, makeStyles, Grid, FormGroup, FormControlLabel, Typography, Tooltip } from '@material-ui/core';\n\nimport Select from 'react-select';\nimport { Field, Formik, useFormik } from 'formik';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport DescriptionIcon from \"@material-ui/icons/Description\";\nimport * as Yup from 'yup';\nimport { Add, HelpOutline } from '@material-ui/icons';\nimport Switch, { IOSSwitch } from './Switch';\nimport styles from './AddNewSiteStyles';\n// img icon\nimport { ReactComponent as ImgIcon } from '../../assets/img/icons/image.svg';\nimport { ReactComponent as LinkIcon } from '../../assets/img/icons/attachment-link.9.svg';\nimport { ReactComponent as UploadIcon } from '../../assets/img/icons/cloud-upload-outline.svg';\nimport { SnTextInput, SnSelect } from '../Utils/SnFormikControlls';\nimport { skylinkToUrl } from \"../../service/skynet-api\";\nimport { getInitValAndValidationSchemaFromSnFormikObj } from '../../service/SnFormikUtilService';\nimport { getHNSSkyDBURL, setMyHostedApp } from '../../service/SnSkappService';\nimport { useHistory } from 'react-router-dom';\nimport SnUpload from '../../uploadUtil/SnUpload';\nimport { UPLOAD_SOURCE_DEPLOY, UPLOAD_SOURCE_NEW_HOSTING, UPLOAD_SOURCE_NEW_HOSTING_IMG } from '../../utils/SnConstants';\nimport { DropzoneArea } from 'material-ui-dropzone';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setUploadList } from '../../redux/action-reducers-epic/SnUploadListAction';\nimport SnInfoModal from '../Modals/SnInfoModal';\nimport { getPortalList } from '../../utils/SnNewObject';\nimport { setLoaderDisplay } from '../../redux/action-reducers-epic/SnLoaderAction';\nimport Loader from \"react-loader-spinner\";\nimport {getPortalUrl} from '../../service/skynet-api'\n\nconst useStyles = makeStyles(styles)\nconst versionOptions = [\n { value: '1.0', label: '1.0' },\n { value: '1.01', label: '1.01' },\n { value: '1.02', label: '1.02' },\n]\nconst optionsAge = [\n { value: '17', label: '17' },\n { value: '18', label: '18' },\n { value: '19', label: '19' },\n]\nconst socialOption = [\n { value: 'facebook', label: 'facebook' },\n { value: 'Reddit', label: 'Reddit' },\n { value: 'Twitter', label: 'Twitter' },\n]\n\nconst storageGatewayOption = getPortalList().map(portal => ({ \"value\": portal, \"label\": portal }));\n\nconst reactSelectStyles = {\n control: styles => ({\n ...styles,\n backgroundColor: 'white',\n height: 55,\n boxShadow: 0,\n borderColor: '#D9E1EC',\n color: '#000',\n borderRadius: 8,\n '@media only screen and (max-width: 1440px)': {\n height: 50,\n // width: '100%',\n fontSize: 16,\n },\n '@media only screen and (max-width: 575px)': {\n height: 43,\n // width: '100%',\n fontSize: 14,\n },\n '&:hover': {\n borderColor: '#1DBF73'\n }\n }),\n option: (styles, { data, isDisabled, isFocused, isSelected }) => ({\n ...styles, backgroundColor: isSelected ? '#1DBF73' : '#fff',\n '&:foucs': {\n backgroundColor: '#1DBF73'\n }\n }),\n};\n\nconst formikObj = {\n appName: ['', Yup.string().required('This field is required')],\n storageGateway: ['', Yup.string().required('This field is required')],\n hns: ['', Yup.string().required('This field is required')],\n skylink: ['', Yup.string().required('This field is required')],\n defaultPath: ['index.html', Yup.string().required('This field is required')],\n portalMinVersion: ['', Yup.string().required('This field is required')],\n sourceCode: ['', Yup.string().required('This field is required')],\n imgSkylink: [''],\n imgThumbnailSkylink: ['']\n};\nexport default function AddNewSite({ toggle }) {\n const [selectedOption, setSelectedOption] = useState(null);\n const classes = useStyles();\n let history = useHistory();\n const dispatch = useDispatch();\n const uploadEleRef = createRef();\n const imgUploadEleRef = createRef();\n const dropZoneRef = createRef();\n const snUploadListStore = useSelector((state) => state.snUploadListStore);\n\n const [isFileUpload, setIsFileUpload] = useState(false);\n const [isLogoUploaded, setIsLogoUploaded] = useState(false);\n\n const [showInfoModal, setShowInfoModal] = useState(false);\n const [infoModalTitle, setInfoModalTitle] = useState(\"\");\n const [infoModalContent, setInfoModalContent] = useState(\"\");\n const [infoModalShowCopyToClipboard, setInfoModalShowCopyToClipboard] = useState(false);\n const [infoModalClipboardTooltip, setInfoModalClipboardTooltip] = useState(\"\");\n\n useEffect(() => {\n return () => {\n snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING].length = 0;\n snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING_IMG].length = 0;\n dispatch(setUploadList(snUploadListStore));\n };\n }, []);\n\n const cancelUpload = (e, formik) => {\n e.preventDefault();\n e.stopPropagation();\n snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING].length = 0;\n dispatch(setUploadList(snUploadListStore));\n formik.setFieldValue(\"skylink\", '', false)\n formik.setFieldValue(\"sourceCode\", '', false)\n }\n\n const submitForm = async (values) => {\n dispatch(setLoaderDisplay(true));\n await setMyHostedApp(values);\n dispatch(setLoaderDisplay(false));\n const hnsSkyDBURL = await getHNSSkyDBURL(null,values.hns,values.skylink);\n setInfoModalParams({\n title: `HNS SkyDB URL`,\n content: hnsSkyDBURL,\n showClipboardCopy: true,\n });\n };\n\n const setInfoModalParams = ({ title, content, showClipboardCopy = false, clipboardCopyTooltip, open = true }) => {\n setInfoModalContent(content);\n setInfoModalTitle(title);\n setInfoModalShowCopyToClipboard(showClipboardCopy);\n setInfoModalClipboardTooltip(clipboardCopyTooltip);\n setShowInfoModal(open);\n };\n\n const onInfoModalClose = () => {\n setInfoModalParams({ open: false });\n history.push(\"/hosting\");\n };\n\n\n const onCancel = async (evt, formik) => {\n evt.preventDefault();\n evt.stopPropagation();\n formik.resetForm();\n snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING].length = 0;\n snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING_IMG].length = 0;\n dispatch(setUploadList(snUploadListStore));\n };\n\n const handleDropZoneClick = (evt, dropZoneRef) => {\n evt.preventDefault();\n evt.stopPropagation();\n dropZoneRef.current.gridRef.current.click();\n };\n\n const handleImgUpload = (obj, formik) => {\n formik.setFieldValue(\"imgSkylink\", obj.skylink, true);\n formik.setFieldValue(\"imgThumbnailSkylink\", obj.thumbnail, true);\n setIsLogoUploaded(false);\n };\n\n const copyToClipboard = (url) => {\n navigator.clipboard.writeText(url);\n };\n\n const setValueOfForm = (obj, formik) => {\n formik.setFieldValue(\"skylink\", obj.skylink, true)\n formik.setFieldValue(\"sourceCode\", getPortalUrl() + `${obj.skylink}`, true)\n }\n\n { toggle ? document.body.className = \"darkBodyColor\" : document.body.className = \"lightBodyColor\" }\n\n return (\n <>\n <Box >\n <Formik\n initialValues={getInitValAndValidationSchemaFromSnFormikObj(formikObj).initialValues}\n validationSchema={Yup.object(getInitValAndValidationSchemaFromSnFormikObj(formikObj).validationSchema)}\n validateOnChange={true}\n validateOnBlur={true}\n onSubmit={submitForm}>\n {formik => (<form onSubmit={formik.handleSubmit}>\n <Box display=\"flex\" alignItems=\"center\" justifyContent='space-between' marginTop='7px'>\n <h1 className={toggle ? classes.darkh1 : classes.lighth1}>New App Deployment</h1>\n <Box className={classes.btnBox}>\n <Button className={classes.cancelBtn} onClick={(e) => onCancel(e, formik)}><b>Reset Form</b></Button>\n <Button className={classes.submitBtn} onClick={formik.handleSubmit}><Add /><b>Deploy App</b></Button>\n </Box>\n </Box>\n <p className={classes.text}>( Note: Hosted App will NOT be Published to AppStore by default. If you wish to publish, you can do so after deployment from \"App Hosting\" or \"Publish App\" link)</p>\n <Box component=\"form\">\n <Box>\n {/* <label className={classes.label}>Site Logo</label> */}\n <div className=\"d-none\">\n <SnUpload\n name=\"files\"\n source={UPLOAD_SOURCE_NEW_HOSTING_IMG}\n ref={imgUploadEleRef}\n directoryMode={false}\n onUpload={(obj) => handleImgUpload(obj, formik)}\n uploadStarted={(e) => setIsLogoUploaded(e)}\n />\n </div>\n <div className={toggle ? classes.darkSiteLogo : classes.lightSiteLogo} onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef)} >\n {!isLogoUploaded && formik.values.imgThumbnailSkylink.trim() === \"\" && <Box style={{ flexDirection: \"column\", justifyItems: 'center' }}>\n <Box style={{ position: \"relative\", textAlign: 'center' }}>\n <ImgIcon />\n </Box>\n <Box style={{ position: \"relative\", color: \"grey\", textAlign: 'center' }}>click to upload App Logo</Box>\n </Box>}\n {!isLogoUploaded && formik.values.imgThumbnailSkylink.trim() !== \"\" && <img\n alt=\"app\"\n src={skylinkToUrl(formik.values.imgThumbnailSkylink)}\n style={{\n width: \"250px\",\n height: \"150px\",\n // border: props.arrSelectedAps.indexOf(app) > -1 ? \"2px solid #1ed660\" : null,\n }}\n onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef)}\n name=\"1\"\n />}\n {isLogoUploaded ? <Loader type=\"Oval\" color=\"#57C074\" height={50} width={50} /> : null}\n </div>\n {/* <div className={classes.inputGuide}>\n Note: Image Upload May Take sometime\n </div> */}\n <input type=\"text\" hidden />\n </Box>\n <Box display='flex' className={`${classes.formRow} formSiteRow`}>\n <Box className={`${classes.inputContainer}`} flex={1} style={{ maxWidth: 700 }}>\n <SnTextInput\n label={<span>App Name <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></span>}\n name=\"appName\"\n className={toggle ? classes.darkInput : classes.lightInput}\n type=\"text\" />\n </Box>\n <Box className={classes.inputContainer} flex={1}>\n <SnTextInput\n label={<span>Default Path <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></span>}\n name=\"defaultPath\"\n className={toggle ? classes.darkInput : classes.lightInput}\n type=\"text\" />\n </Box>\n </Box>\n <Box display='flex' className={`${classes.formRow} formSiteRow`}>\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnTextInput\n label={<span>Domain <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></span>}\n name=\"hns\"\n className={toggle ? classes.darkInput : classes.lightInput}\n type=\"text\" />\n </Box>\n <Box className={`${classes.inputContainer}`} flex={1} >\n <label>Skynet Portal <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <Box>\n <SnSelect\n toggle={toggle}\n label=\"Storage Gateway\"\n name=\"storageGateway\"\n options={storageGatewayOption}\n />\n </Box>\n </Box>\n <Box className={`${classes.inputContainer}`} flex={1} >\n <SnTextInput\n label={<span>App Version <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></span>}\n name=\"portalMinVersion\"\n className={toggle ? classes.darkInput : classes.lightInput}\n type=\"text\" />\n </Box>\n </Box>\n\n\n <Box display='flex' className={`${classes.formRow} formSiteRow`}>\n <Box className={classes.inputContainer} flex={1} position=\"relative\">\n <SnTextInput\n label={<span>Deployed Code Skylink <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></span>}\n name=\"sourceCode\"\n className={toggle ? classes.darkInput : classes.lightInput}\n type=\"text\" />\n </Box>\n </Box>\n <div className={classes.OneRowInput}>\n <div className=\"d-none temp\">\n <FormGroup>\n <FormControlLabel style={{ color: '#5A607F', marginBottom: 5 }}\n label={`Upload ${isFileUpload ? \"File\" : \"Folder\"}`}\n control={<IOSSwitch\n onChange={(evt) => setIsFileUpload(evt.target.checked)}\n name=\"toggleFileUpload\" />}\n\n />\n </FormGroup>\n </div>\n <Grid container spacing={2}>\n <Grid item md={12} sm={12} xs={12}>\n <Box>\n <div className=\"d-none\">\n <SnUpload\n toggle={toggle}\n name=\"files\"\n source={UPLOAD_SOURCE_NEW_HOSTING}\n ref={uploadEleRef}\n directoryMode={!isFileUpload}\n onUpload={(obj) => setValueOfForm(obj, formik)}\n />\n\n </div>\n <div className={toggle ? classes.darkPreviewImg : classes.lightPreviewImg} style={{ flexDirection: 'column', width: '100%', minHeight: '230px' }}>\n {/* <div><UploadIcon /></div>\n\n <div>\n Drop file here or <span style={{ color: '#1DBF73' }}>click here to upload</span>\n </div> */}\n <DropzoneArea\n showPreviewsInDropzone={false}\n onDrop={(files) => {\n uploadEleRef.current.handleDrop(files)\n }}\n // className={classes.dropZonArea}\n Icon={\"none\"}\n inputProps={{ webkitdirectory: true, mozdirectory: true }}\n ref={dropZoneRef}\n webkitdirectory={true}\n mozdirectory={true}\n maxFileSize={210000000}\n // onDelete={delImg}\n filesLimit={100}\n showAlerts={false}\n dropzoneText={\n <div id=\"dropzone-text\" onClick={(evt) => handleDropZoneClick(evt, uploadEleRef)}>\n {snUploadListStore && snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING] && snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING].length <= 0 &&\n <>\n <div><UploadIcon /></div>\n <div style={{ color: '#5C757D' }}>\n Drag and drop files or folder here\n </div>\n <Button className={classes.uploadBtn}>\n Select {isFileUpload ? \"Files\" : \"Folder\"}\n </Button>\n </>\n }\n {snUploadListStore && snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING] && snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING].length > 0 && snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING]\n .filter((fileObj, idx) => idx === 0)\n .map((fileObj) => (\n <Grid\n item\n xs={12}\n className={classes.show_img_title_grid}\n style={{ paddingTop: \"20px\", paddingBottom: \"20px\" }}\n >\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n width: \"100%\",\n minHeight: 150,\n flexDirection: 'column'\n }}\n >\n <div >\n\n <Typography className={classes.linkName}>\n <span>\n <DescriptionIcon className={classes.descIcon} />\n </span>\n {fileObj?.file?.path || fileObj?.file?.name}\n </Typography>\n {fileObj?.status && fileObj?.status === 'complete' && (<Typography className={classes.linkName}>\n Skylink: {fileObj?.url}\n </Typography>)}\n {fileObj?.status && fileObj?.status !== 'complete' && (<Typography className={classes.linkName}>\n <><Loader type=\"Oval\" color=\"#57C074\" height={50} width={50} /></>\n {fileObj?.status.toUpperCase()} {fileObj?.status === 'uploading' && !isNaN(fileObj.progress) && `${(Math.trunc(fileObj.progress * 100))} %`}\n </Typography>)}\n <Button className={classes.uploadBtn} style={{ zIndex: 100 }} onClick={(e) => cancelUpload(e, formik)}>\n Cancel\n </Button>\n </div>\n {/* <div style={{ display: \"flex\", alignItems: \"center\" }}>\n {fileObj?.status === 'complete' && <FileCopyIcon\n className={classes.descIcon}\n style={{\n cursor: \"pointer\",\n }}\n onClick={() => copyToClipboard(fileObj?.url)}\n />}\n </div> */}\n </div>\n </Grid>))}\n\n </div>\n }\n />\n </div>\n <input type=\"text\" hidden />\n </Box>\n </Grid>\n </Grid>\n </div>\n </Box>\n\n\n </form>)}\n </Formik>\n </Box>\n <SnInfoModal\n open={showInfoModal}\n onClose={onInfoModalClose}\n title={infoModalTitle}\n content={infoModalContent}\n showClipboardCopy={infoModalShowCopyToClipboard}\n />\n\n </>\n )\n};","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Domain/NoDomain.js",["877"],"import React, { Fragment } from 'react'\nimport { Box, Button, makeStyles } from '@material-ui/core'\nimport { Link } from 'react-router-dom'\nimport styles from '../../assets/jss/no-apps/NoAppsStyle'\nimport { ReactComponent as DomainIcon } from '../../assets/img/icons/domain.svg'\nconst useStyles = makeStyles(styles)\n\nconst NoDomain = ({toggle}) => {\n const classes = useStyles()\n\n {toggle ? document.body.className = \"darkBodyColor\" : document.body.className = \"lightBodyColor\"}\n\n return (\n <Fragment>\n <h1 className={toggle ? classes.lighth1 : classes.darkh1}>Domain Manager</h1>\n <p className={classes.h3}>(Under Active Development. Coming soon...)</p>\n <Box display=\"flex\" alignItems=\"center\" justifyContent=\"center\" minHeight=\"calc(100vh - 200px)\" flexDirection=\"column\" paddingTop=\"1rem\" paddingBottom=\"1rem\">\n <DomainIcon className={classes.domainIcon} />\n\n\n <h2 className={toggle ? classes.lighth2 : classes.darkh2}>No Custom Domains</h2>\n <p className={classes.p}>You don't have any custom domains. Click below button to add new domain</p>\n <Link to='domains'>\n <Button className={classes.button}>\n Add domain\n </Button>\n </Link>\n </Box>\n </Fragment>\n )\n}\nexport default NoDomain\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/Hosting.js",["878","879","880"],"import React, { Fragment, useEffect, useState } from 'react'\nimport { Box, InputBase, Typography, Button } from '@material-ui/core'\nimport { useHistory } from \"react-router-dom\";\nimport { fade, makeStyles } from '@material-ui/core/styles'\nimport SearchIcon from '@material-ui/icons/Search'\nimport UtilitiesItem from '../AppsComp/UtilitiesItem'\nimport ListFilter from '../AppsComp/ListFilter'\nimport SubmitBtn from '../AppsComp/SubmitBtn'\nimport useWindowDimensions from '../../hooks/useWindowDimensions'\nimport HostingItem from './HostingItem'\nimport AddNewSite from './AddNewSiteBtn'\nimport { getMyHostedApps, deleteMyHostedApp } from '../../service/SnSkappService';\nimport SnInfoModal from '../Modals/SnInfoModal';\nimport { isStrInObj } from '../../utils/SnUtility';\nimport { useDispatch } from 'react-redux';\nimport { setLoaderDisplay } from '../../redux/action-reducers-epic/SnLoaderAction';\nimport Modal from '@material-ui/core/Modal';\nimport Backdrop from '@material-ui/core/Backdrop';\nimport Fade from '@material-ui/core/Fade';\n\nconst useStyles = makeStyles(theme => (\n {\n search: {\n position: 'relative',\n borderRadius: theme.shape.borderRadius,\n backgroundColor: fade('#fff', 1),\n '&:hover': {\n backgroundColor: fade(\"#fff\", 0.9),\n },\n marginRight: theme.spacing(2),\n width: '100%',\n [theme.breakpoints.up('sm')]: {\n marginLeft: theme.spacing(3),\n width: 'auto',\n },\n color: '#8B9DA5',\n boxShadow: '0px 1px 2px #15223214',\n border: '1px solid #7070701A;',\n\n marginLeft: '16px!important',\n '@media (max-width: 1650px)': {\n width: 'auto'\n },\n\n },\n text: {\n color: '#FF6060',\n fontSize: 20,\n fontWeight: 500,\n marginTop: '.5rem',\n '@media only screen and (max-width: 1440px)': {\n fontSize: 16,\n },\n '@media only screen and (max-width: 575px)': {\n fontSize: 12,\n marginTop: '1rem',\n }\n \n },\n modal: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n closeBtn: {\n border: '1px solid #1DBF73',\n borderRadius: '5px',\n boxShadow: '0px 2px 5px #15223221',\n height: 48,\n marginTop: '2rem',\n textTransform: 'none'\n },\n okBtn: {\n border: '1px solid #ea052f',\n marginRight: '10px',\n borderRadius: '5px',\n boxShadow: '0px 2px 5px #15223221',\n height: 48,\n marginTop: '2rem',\n textTransform: 'none'\n },\n modalTitle: {\n fontSize: 32,\n color: '#333333',\n fontWeight: 700,\n marginBottom: '1rem'\n },\n shareCardContainer: {\n background: '#fff',\n boxShadow: '0px 2px 5px #15223221',\n borderRadius: 15,\n padding: '48px 60px',\n '@media only screen and (max-width: 575px)': {\n padding: '40px 20px',\n paddingTop: '50px'\n },\n '&:focus': {\n outline: 0,\n border: 0\n },\n width: '90%',\n maxWidth: 500,\n '& p': {\n color: '#5A607F',\n marginBottom: '5px'\n },\n '& .s-links-title': {\n marginTop: '.4rem'\n },\n '& a': {\n marginRight: '1rem',\n '&:focus': {\n textDecoration: 'none',\n opacity: .8,\n transition: '.25s ease'\n }\n }\n \n },\n searchIcon: {\n padding: theme.spacing(0, 2),\n height: '100%',\n position: 'absolute',\n pointerEvents: 'none',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#B4C6CC'\n },\n inputRoot: {\n color: 'inherit',\n },\n inputInput: {\n paddingLeft: `calc(1em + ${theme.spacing(4)}px)`,\n transition: theme.transitions.create('width'),\n width: '100%',\n [theme.breakpoints.up('md')]: {\n width: '100%',\n },\n [theme.breakpoints.up('lg')]: {\n width: '50ch',\n },\n paddingTop: '10px',\n paddingBottom: '10px',\n '@media (max-width: 1660px)': {\n width: '34ch'\n },\n '@media (max-width: 1460px)': {\n width: '100%'\n }\n\n },\n\n lightPageHeading: {\n color: '#131523',\n fontSize: '28px',\n },\n darkPageHeading: {\n color: '#fff',\n fontSize: '28px',\n },\n smallText: {\n alignSelf: \"flex-end\",\n color: '#5A607F',\n paddingLeft: '1rem',\n fontWeight: '400'\n },\n Media1249: {\n width: 'calc(100% - 230px)',\n marginLeft: 'auto!important',\n marginRight: 0,\n '@media only screen and (max-width: 890px)': {\n width: '100%',\n },\n\n },\n margnBottomMediaQuery: {\n '@media only screen and (max-width: 1249px)': {\n marginBottom: '.75rem'\n },\n\n\n },\n\n secondNavRow2: {\n '@media only screen and (max-width: 890px)': {\n justifyContent: 'space-between'\n },\n '@media only screen and (max-width: 575px) and (min-width: 509px)': {\n marginBottom: '.6rem'\n }\n , '@media only screen and (max-width: 510px)': {\n flexWrap: 'wrap',\n \"& > div\": {\n width: '50%',\n minWidth: '50%',\n maxWidth: '50%',\n marginBottom: '.75rem'\n },\n \"& > div:nth-child(odd)\": {\n paddingRight: '1rem'\n\n }\n },\n },\n MobileFontStyle: {\n '@media only screen and (max-width: 575px) ': {\n marginBottom: '.7rem',\n marginTop: '.4rem',\n '& h1': {\n fontSize: '18px'\n }\n }\n }\n\n }\n))\nfunction Hosting({toggle}) {\n\n const { width } = useWindowDimensions()\n const classes = useStyles()\n let history = useHistory();\n const dispatch = useDispatch();\n \n const [hostedAppListObj, setHostedAppListObj] = useState();\n const [searchStr, setSearchStr] = useState(\"\");\n const [isDelete, setIsDelete] = useState(false);\n const [selectedApp, setAppForDelete] = useState(null);\n const [showInfoModal, setShowInfoModal] = useState(false);\n const [infoModalTitle, setInfoModalTitle] = useState(\"\");\n const [infoModalContent, setInfoModalContent] = useState(\"\");\n const [infoModalShowCopyToClipboard, setInfoModalShowCopyToClipboard] = useState(false);\n const [infoModalClipboardTooltip, setInfoModalClipboardTooltip] = useState(\"\");\n\n useEffect(() => {\n loadHostedApps();\n }, []);\n\n const loadHostedApps = async () => {\n dispatch(setLoaderDisplay(true));\n const hostedAppListObj = await getMyHostedApps([]);\n setHostedAppListObj(hostedAppListObj);\n dispatch(setLoaderDisplay(false));\n };\n\n const filterApps = (searchStr, app) => isStrInObj(searchStr, app);\n\n const handleClose = () => {\n setIsDelete(false);\n }\n \n const handleOpen = (app, appId) => {\n app['appId'] = appId;\n setAppForDelete(app);\n setIsDelete(true);\n }\n \n const handleDelete = async () => {\n dispatch(setLoaderDisplay(true));\n setIsDelete(false);\n const check = await deleteMyHostedApp(selectedApp.appId);\n dispatch(setLoaderDisplay(false));\n setInfoModalParams({\n title: check ? `Success` : `Error`,\n content: check ? `Site Deleted Successfully!` : `Unexpected Error occured`,\n showClipboardCopy: false,\n });\n }\n\n const setInfoModalParams = ({ title, content, showClipboardCopy = false, clipboardCopyTooltip, open = true }) => {\n setInfoModalContent(content);\n setInfoModalTitle(title);\n setInfoModalShowCopyToClipboard(showClipboardCopy);\n setInfoModalClipboardTooltip(clipboardCopyTooltip);\n setShowInfoModal(open);\n };\n\n const onInfoModalClose = () => {\n setInfoModalParams({ open: false });\n loadHostedApps();\n };\n\n {toggle ? document.body.className = \"darkBodyColor\" : document.body.className = \"lightBodyColor\"}\n \n return (\n\n <Fragment >\n <Box display=\"flex\" className='second-nav' alignItems=\"center\">\n <Box display=\"flex\" alignItems=\"center\" className={`${classes.margnBottomMediaQuery} ${classes.MobileFontStyle}`}>\n <h1 className={toggle ? classes.darkPageHeading : classes.lightPageHeading}>Hosted Apps(Websites)</h1>\n </Box>\n {width < 1250 && <div className={`${classes.search} ${classes.Media1249} ${classes.margnBottomMediaQuery}`}>\n <Box>\n <div className={classes.searchIcon}>\n <SearchIcon />\n </div>\n </Box>\n <InputBase\n placeholder=\"Search Apps\"\n classes={{\n root: classes.inputRoot,\n input: classes.inputInput,\n }}\n inputProps={{ 'aria-label': 'search' }}\n />\n </div>}\n <Box className={classes.secondNavRow2} display=\"flex\" alignItems=\"center\" flex={1} justifyContent='flex-end'>\n <Box className=\"d-none temp\">\n <UtilitiesItem />\n </Box>\n\n {width > 1249 && <div className={classes.search + \" d-none temp\"}>\n <Box>\n <div className={classes.searchIcon}>\n <SearchIcon />\n </div>\n </Box>\n <InputBase\n placeholder=\"Search Apps\"\n classes={{\n root: classes.inputRoot,\n input: classes.inputInput,\n }}\n inputProps={{ 'aria-label': 'search' }}\n onChange={(evt)=>setSearchStr(evt.target.value)}\n />\n </div>}\n <Box className=\"d-none temp\">\n <ListFilter />\n </Box>\n\n <Box>\n <SubmitBtn addSite={true} styles={{ justifyContent: \"space-around\" }}\n onClick={() => history.push(\"/submitsite\")}>\n <b>Deploy New App</b>\n </SubmitBtn>\n </Box>\n </Box>\n\n </Box>\n <p className={classes.text}>( Note: Hosted App will NOT be Published to AppStore by default. If you wish to publish deployed app/site to Apptore, you can do so after deploying your code from this page or \"Publish App\" link)</p>\n <Box marginTop=\"1rem\">\n {hostedAppListObj?.appDetailsList &&\n (Object.keys(hostedAppListObj.appDetailsList))\n .filter((appId)=>filterApps(searchStr, hostedAppListObj.appDetailsList[appId]))\n .sort((appId1, appId2)=>(hostedAppListObj.appDetailsList[appId2].ts-hostedAppListObj.appDetailsList[appId1].ts))\n .map((appId, idx) =>\n hostedAppListObj.appDetailsList[appId] && <HostingItem handleOpen={handleOpen} key={idx} ActiveSite={true} id={appId} app={hostedAppListObj.appDetailsList[appId]} />\n )}\n <AddNewSite toggle={toggle} onClick={() => history.push(\"/submitsite\")} />\n </Box>\n\n <Modal\n aria-labelledby=\"transition-modal-title\"\n aria-describedby=\"transition-modal-description\"\n className={classes.modal}\n open={false || isDelete}\n onClose={handleClose}\n closeAfterTransition\n BackdropComponent={Backdrop}\n BackdropProps={{\n timeout: 500,\n }}\n >\n <Fade in={isDelete}>\n <Box className={classes.shareCardContainer}>\n <Typography component='h2' className={classes.modalTitle}>\n Confirm Delete\n </Typography>\n <Typography component=\"p\">\n Do you want to delete { selectedApp ? `${selectedApp.appName}`: ''}?\n </Typography>\n <Box style={{ textAlign: 'right' }}>\n <Button onClick={handleDelete} className={classes.okBtn}>\n Ok\n </Button>\n <Button onClick={handleClose} className={classes.closeBtn}>\n Cancel\n </Button>\n </Box>\n </Box>\n </Fade>\n </Modal>\n \n <SnInfoModal\n open={showInfoModal}\n onClose={onInfoModalClose}\n title={infoModalTitle}\n content={infoModalContent}\n showClipboardCopy={infoModalShowCopyToClipboard}\n />\n </Fragment>\n )\n}\n\nexport default Hosting\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/EditSite.js",["881","882","883","884","885","886","887","888","889","890","891","892","893","894","895","896","897","898","899"],"import React, { createRef, useEffect, useState } from 'react';\nimport { Box, Button, makeStyles, Grid, FormGroup, FormControlLabel, Typography, Tooltip } from '@material-ui/core';\n\nimport Select from 'react-select';\nimport { Field, Formik, useFormik } from 'formik';\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\nimport DescriptionIcon from \"@material-ui/icons/Description\";\nimport * as Yup from 'yup';\nimport { Add, HelpOutline } from '@material-ui/icons';\nimport Switch, { IOSSwitch } from './Switch';\nimport styles from './AddNewSiteStyles';\n// img icon\nimport { ReactComponent as ImgIcon } from '../../assets/img/icons/image.svg';\nimport { ReactComponent as LinkIcon } from '../../assets/img/icons/attachment-link.9.svg';\nimport { ReactComponent as UploadIcon } from '../../assets/img/icons/cloud-upload-outline.svg';\nimport { SnTextInput, SnSelect } from '../Utils/SnFormikControlls';\nimport { getInitValAndValidationSchemaFromSnFormikObj } from '../../service/SnFormikUtilService';\nimport { getHNSSkyDBURL, setMyHostedApp } from '../../service/SnSkappService';\nimport { useHistory } from 'react-router-dom';\nimport SnUpload from '../../uploadUtil/SnUpload';\nimport { UPLOAD_SOURCE_DEPLOY, UPLOAD_SOURCE_NEW_HOSTING, UPLOAD_SOURCE_NEW_HOSTING_IMG } from '../../utils/SnConstants';\nimport { DropzoneArea } from 'material-ui-dropzone';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setUploadList } from '../../redux/action-reducers-epic/SnUploadListAction';\nimport SnInfoModal from '../Modals/SnInfoModal';\nimport { getPortalList } from '../../utils/SnNewObject';\nimport { setLoaderDisplay } from '../../redux/action-reducers-epic/SnLoaderAction';\nimport { getMyHostedApps } from '../../service/SnSkappService';\nimport { useParams } from \"react-router-dom\";\nimport Loader from \"react-loader-spinner\";\nimport {getPortalUrl,skylinkToUrl} from '../../service/skynet-api';\n\nconst useStyles = makeStyles(styles)\nconst versionOptions = [\n { value: '1.0', label: '1.0' },\n { value: '1.01', label: '1.01' },\n { value: '1.02', label: '1.02' },\n]\nconst optionsAge = [\n { value: '17', label: '17' },\n { value: '18', label: '18' },\n { value: '19', label: '19' },\n]\nconst socialOption = [\n { value: 'facebook', label: 'facebook' },\n { value: 'Reddit', label: 'Reddit' },\n { value: 'Twitter', label: 'Twitter' },\n]\n\nconst storageGatewayOption = getPortalList().map(portal => ({ \"value\": portal, \"label\": portal }));\n\nconst reactSelectStyles = {\n control: styles => ({\n ...styles, backgroundColor: 'white', height: 55, boxShadow: 0, borderColor: '#D9E1EC', color: '#000', borderRadius: 8,\n '@media only screen and (max-width: 1440px)': {\n height: 50,\n // width: '100%',\n fontSize: 16,\n\n },\n '@media only screen and (max-width: 575px)': {\n height: 43,\n // width: '100%',\n fontSize: 14,\n\n },\n '&:hover': {\n borderColor: '#1DBF73'\n }\n }),\n option: (styles, { data, isDisabled, isFocused, isSelected }) => ({\n ...styles, backgroundColor: isSelected ? '#1DBF73' : '#fff',\n '&:foucs': {\n backgroundColor: '#1DBF73'\n }\n }),\n};\n\nconst formikObj = {\n appName: ['', Yup.string().required('This field is required')],\n storageGateway: ['', Yup.string().required('This field is required')],\n hns: ['', Yup.string().required('This field is required')],\n skylink: ['', Yup.string().required('This field is required')],\n defaultPath: ['', Yup.string().required('This field is required')],\n portalMinVersion: ['', Yup.string().required('This field is required')],\n sourceCode: ['', Yup.string().required('This field is required')],\n imgSkylink: [''],\n imgThumbnailSkylink: ['']\n};\n\nexport default function EditSite({toggle}) {\n const [selectedOption, setSelectedOption] = useState(null);\n const classes = useStyles();\n let history = useHistory();\n const dispatch = useDispatch();\n const uploadEleRef = createRef();\n const imgUploadEleRef = createRef();\n const dropZoneRef = createRef();\n const snUploadListStore = useSelector((state) => state.snUploadListStore);\n\n const [isFileUpload, setIsFileUpload] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n\n const [showInfoModal, setShowInfoModal] = useState(false);\n const [infoModalTitle, setInfoModalTitle] = useState(\"\");\n const [infoModalContent, setInfoModalContent] = useState(\"\");\n const [infoModalShowCopyToClipboard, setInfoModalShowCopyToClipboard] = useState(false);\n const [infoModalClipboardTooltip, setInfoModalClipboardTooltip] = useState(\"\");\n\n const [isLogoUploaded, setIsLogoUploaded] = useState(false);\n const [hostedAppObj, setHostedAppObj] = useState();\n const { appId } = useParams();\n\n useEffect(() => {\n loadHostedApp();\n return () => {\n snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING].length = 0;\n snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING_IMG].length = 0;\n dispatch(setUploadList(snUploadListStore));\n };\n }, []);\n\n const loadHostedApp = async () => {\n dispatch(setLoaderDisplay(true));\n setIsLoading(true);\n const hostedAppObj = await getMyHostedApps([appId]);\n await setHostedAppObj(hostedAppObj);\n setFormicObj(hostedAppObj);\n setIsLoading(false);\n dispatch(setLoaderDisplay(false));\n };\n\n\n const setFormicObj = (hostedAppObj) => {\n formikObj.appName[0] = `${hostedAppObj.appDetailsList[appId].content.appName}`;\n formikObj.storageGateway[0] = `${hostedAppObj.appDetailsList[appId].content.storageGateway}`;\n formikObj.hns[0] = `${hostedAppObj.appDetailsList[appId].content.hns}`;\n formikObj.skylink[0] = `${hostedAppObj.appDetailsList[appId].content.skylink}`;\n formikObj.defaultPath[0] = `${hostedAppObj.appDetailsList[appId].content.defaultPath}`;\n formikObj.portalMinVersion[0] = `${hostedAppObj.appDetailsList[appId].content.portalMinVersion}`;\n formikObj.sourceCode[0] = `${hostedAppObj.appDetailsList[appId].content.sourceCode}`;\n formikObj.imgSkylink[0] = `${hostedAppObj.appDetailsList[appId].content.imgSkylink}`;\n formikObj.imgThumbnailSkylink[0] = `${hostedAppObj.appDetailsList[appId].content.imgThumbnailSkylink}`;\n }\n\n const submitForm = async (values) => {\n dispatch(setLoaderDisplay(true));\n await setMyHostedApp(values, appId);\n dispatch(setLoaderDisplay(false));\n const hnsSkyDBURL = await getHNSSkyDBURL(null,values.hns,values.skylink);\n \n if(values.hns != `${hostedAppObj.appDetailsList[appId].content.hns}`) {\n setInfoModalParams({\n title: `HNS SkyDB URL`,\n content: hnsSkyDBURL,\n showClipboardCopy: true,\n });\n } else {\n setInfoModalParams({\n title: `Success`,\n content: `Site updated successfully!`,\n showClipboardCopy: false,\n });\n }\n \n };\n \n const setInfoModalParams = ({ title, content, showClipboardCopy = false, clipboardCopyTooltip, open = true }) => {\n setInfoModalContent(content);\n setInfoModalTitle(title);\n setInfoModalShowCopyToClipboard(showClipboardCopy);\n setInfoModalClipboardTooltip(clipboardCopyTooltip);\n setShowInfoModal(open);\n };\n\n const onInfoModalClose = () => {\n setInfoModalParams({ open: false });\n history.push(\"/hosting\");\n };\n\n\n const onCancel = async (evt) => {\n evt.preventDefault();\n evt.stopPropagation();\n history.push(\"/hosting\");\n };\n\n const handleDropZoneClick = (evt, dropZoneRef) => {\n evt.preventDefault();\n evt.stopPropagation();\n dropZoneRef.current.gridRef.current.click();\n };\n\n const handleImgUpload = (obj, formik) => {\n formik.setFieldValue(\"imgSkylink\", obj.skylink, true);\n formik.setFieldValue(\"imgThumbnailSkylink\", obj.thumbnail, true)\n setIsLogoUploaded(false);\n };\n\n const copyToClipboard = (url) => {\n navigator.clipboard.writeText(url);\n };\n \n const cancelUpload = (e, formik) => {\n e.preventDefault();\n e.stopPropagation();\n snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING].length = 0;\n dispatch(setUploadList(snUploadListStore));\n formik.setFieldValue(\"skylink\", '', false);\n formik.setFieldValue(\"sourceCode\", ``, false);\n }\n\n const setValueOfForm = (obj, formik) => {\n formik.setFieldValue(\"skylink\", obj.skylink, true)\n formik.setFieldValue(\"sourceCode\", getPortalUrl() + `${obj.skylink}`, true)\n }\n\n {toggle ? document.body.className = \"darkBodyColor\" : document.body.className = \"lightBodyColor\"}\n \n return (\n <>\n <Box >\n {\n !isLoading ?\n <Formik\n initialValues={getInitValAndValidationSchemaFromSnFormikObj(formikObj).initialValues}\n validationSchema={Yup.object(getInitValAndValidationSchemaFromSnFormikObj(formikObj).validationSchema)}\n validateOnChange={true}\n validateOnBlur={true}\n onSubmit={submitForm}>\n {formik => (<form onSubmit={formik.handleSubmit}>\n <Box display=\"flex\" alignItems=\"center\" justifyContent='space-between' marginTop='7px'>\n <h1 className={toggle ? classes.darkh1 : classes.lighth1}>Edit Site</h1>\n <Box className={classes.btnBox}>\n <Button className={classes.cancelBtn} onClick={onCancel}>Cancel </Button>\n <Button className={classes.submitBtn} onClick={formik.handleSubmit}><Add /> Save </Button>\n </Box>\n </Box>\n <Box component=\"form\">\n <Box>\n <label className={classes.label}>Site Logo</label>\n <div className=\"d-none\">\n <SnUpload\n name=\"files\"\n source={UPLOAD_SOURCE_NEW_HOSTING_IMG}\n ref={imgUploadEleRef}\n directoryMode={false}\n onUpload={(obj) => handleImgUpload(obj, formik)}\n uploadStarted={(e) => setIsLogoUploaded(e)}\n />\n </div>\n <div className={toggle ? classes.darkSiteLogo : classes.lightSiteLogo} onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef)} >\n {!isLogoUploaded && formik.values.imgThumbnailSkylink.trim() === \"\" &&<Box style={{ flexDirection: \"column\", justifyItems: 'center' }}> \n <Box style={{ position: \"relative\", textAlign: 'center' }}>\n <ImgIcon />\n </Box> \n <Box style={{ position: \"relative\", color: \"grey\", textAlign: 'center' }}>click to upload Image</Box> \n </Box>}\n {!isLogoUploaded && formik.values.imgThumbnailSkylink.trim() !== \"\" && <img\n alt=\"app\"\n src={skylinkToUrl(formik.values.imgThumbnailSkylink)}\n style={{\n width: \"250px\",\n height: \"150px\",\n // border: props.arrSelectedAps.indexOf(app) > -1 ? \"2px solid #1ed660\" : null,\n }}\n onClick={(evt) => handleDropZoneClick(evt, imgUploadEleRef)}\n name=\"1\"\n />}\n {isLogoUploaded ? <Loader type=\"Oval\" color=\"#57C074\" height={50} width={50} /> : null}\n </div>\n <div className={classes.inputGuide}>\n Max. size of 5 MB in: JPG or PNG. 300x500 or larger recommended\n </div>\n <input type=\"text\" hidden />\n </Box>\n <Box display='flex' className={`${classes.formRow} formSiteRow`}>\n <Box className={`${classes.inputContainer}`} flex={1} style={{ maxWidth: 700 }}>\n <SnTextInput\n label={<span>App Name <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></span>}\n name=\"appName\"\n disabled={true}\n className={toggle ? classes.darkInput : classes.lightInput}\n type=\"text\" />\n </Box>\n <Box className={classes.inputContainer} flex={1}>\n <SnTextInput\n label={<span>Default Path <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></span>}\n name=\"defaultPath\"\n className={toggle ? classes.darkInput : classes.lightInput}\n type=\"text\" />\n </Box>\n </Box>\n <Box display='flex' className={`${classes.formRow} formSiteRow`}>\n <Box className={`${classes.inputContainer}`} flex={1} style={{ maxWidth: 700 }}>\n <SnTextInput\n label={<span>HNS Domain <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></span>}\n name=\"hns\"\n className={toggle ? classes.darkInput : classes.lightInput}\n type=\"text\" />\n </Box>\n <Box className={`${classes.inputContainer}`} flex={1}>\n <label>Skynet Portal <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></label>\n <Box>\n <SnSelect\n label=\"Storage Gateway\"\n name=\"storageGateway\"\n options={storageGatewayOption}\n />\n </Box>\n </Box>\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnTextInput\n label={<span>App Version <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></span>}\n name=\"portalMinVersion\"\n className={toggle ? classes.darkInput : classes.lightInput}\n type=\"text\" />\n </Box>\n </Box>\n <Box display='flex' className={`${classes.formRow} formSiteRow`}>\n <Box className={classes.inputContainer} flex={1} position=\"relative\">\n <SnTextInput\n label={<span>Source Code <Tooltip className=\"iconLablel\" title=\"site logo\"><HelpOutline /></Tooltip></span>}\n name=\"sourceCode\"\n className={toggle ? classes.darkInput : classes.lightInput}\n type=\"text\" />\n </Box>\n </Box>\n <div className={classes.OneRowInput}>\n <div className=\"d-none temp\">\n <FormGroup>\n <FormControlLabel style={{ color: '#5A607F', marginBottom: 5 }}\n label={`Upload ${isFileUpload ? \"File\" : \"Folder\"}`}\n control={<IOSSwitch\n onChange={(evt) => setIsFileUpload(evt.target.checked)}\n name=\"toggleFileUpload\" />}\n\n />\n </FormGroup>\n </div>\n\n <Grid container spacing={2}>\n <Grid item md={12} sm={12} xs={12}>\n <Box>\n <div className=\"d-none\">\n <SnUpload\n name=\"files\"\n source={UPLOAD_SOURCE_NEW_HOSTING}\n ref={uploadEleRef}\n directoryMode={!isFileUpload}\n onUpload={(obj) => setValueOfForm(obj, formik)}\n />\n\n </div>\n <div className={toggle ? classes.darkPreviewImg : classes.lightPreviewImg} style={{ flexDirection: 'column', width: '100%', minHeight: '230px' }}>\n {/* <div><UploadIcon /></div>\n\n <div>\n Drop file here or <span style={{ color: '#1DBF73' }}>click here to upload</span>\n </div> */}\n <DropzoneArea\n showPreviewsInDropzone={false}\n onDrop={(files) => {\n uploadEleRef.current.handleDrop(files)\n }}\n // className={classes.dropZonArea}\n Icon={\"none\"}\n inputProps={{ webkitdirectory: true, mozdirectory: true }}\n ref={dropZoneRef}\n webkitdirectory={true}\n mozdirectory={true}\n maxFileSize={210000000}\n // onDelete={delImg}\n filesLimit={100}\n showAlerts={false}\n dropzoneText={\n <div id=\"dropzone-text\" onClick={(evt) => handleDropZoneClick(evt, uploadEleRef)}>\n { snUploadListStore && snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING] && snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING].length <= 0 && \n <>\n <div><UploadIcon /></div>\n <div style={{ color: '#5C757D' }}>\n Drag and drop files or folder here\n </div>\n <Button className={classes.uploadBtn}>\n Select {isFileUpload ? \"Files\" : \"Folder\"}\n </Button>\n </>\n }\n {snUploadListStore && snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING] && snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING].length > 0 && snUploadListStore[UPLOAD_SOURCE_NEW_HOSTING]\n .filter((fileObj, idx) => idx === 0)\n .map((fileObj) => (\n <Grid\n item\n xs={12}\n className={classes.show_img_title_grid}\n style={{ paddingTop: \"20px\", paddingBottom: \"20px\" }}\n >\n <div\n style={{\n display: \"flex\",\n justifyContent: \"center\",\n width: \"100%\",\n minHeight: 150,\n flexDirection: 'column'\n }}\n >\n <div>\n <Typography className={classes.linkName}>\n Folder: {fileObj?.file?.path || fileObj?.file?.name}\n </Typography>\n {fileObj?.status && fileObj?.status === 'complete' && (<Typography className={classes.linkName}>\n Skylink: {fileObj?.url}\n </Typography>)}\n {fileObj?.status && fileObj?.status !== 'complete' && (<Typography className={classes.linkName}>\n <><Loader type=\"Oval\" color=\"#57C074\" height={50} width={50} /></> \n {fileObj?.status.toUpperCase()} {fileObj?.status === 'uploading' && !isNaN(fileObj.progress) && `${(Math.trunc(fileObj.progress * 100))} %`}\n </Typography>)}\n <Button className={classes.uploadBtn} style={{ zIndex: 100 }} onClick={(e)=> cancelUpload(e, formik)}>\n Cancel\n </Button>\n </div>\n {/* <div style={{ display: \"flex\", alignItems: \"center\" }}>\n {fileObj?.status === 'complete' && <FileCopyIcon\n className={classes.descIcon}\n style={{\n cursor: \"pointer\",\n }}\n onClick={() => copyToClipboard(fileObj?.url)}\n />}\n </div> */}\n </div>\n </Grid>))}\n </div>\n }\n />\n </div>\n <input type=\"text\" hidden />\n </Box>\n </Grid>\n </Grid>\n </div>\n </Box>\n\n\n </form>)}\n </Formik>\n : null\n }\n </Box >\n\n\n <SnInfoModal\n open={showInfoModal}\n onClose={onInfoModalClose}\n title={infoModalTitle}\n content={infoModalContent}\n showClipboardCopy={infoModalShowCopyToClipboard}\n />\n\n </>\n )\n};","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppDetails/AppDetailsPage.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Setting/Settings.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/DescoverDev/DescoverDev.js",["900"],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Auth/Login.js",["901","902","903","904","905","906","907","908","909","910","911","912","913"],"import { Button, makeStyles } from '@material-ui/core'\nimport React, { useState, useEffect } from \"react\"\nimport { useSelector, useDispatch } from \"react-redux\"\nimport { Paper, withStyles, Grid, Link, Typography } from '@material-ui/core';\nimport { ReactComponent as Logo } from '../../assets/img/icons/logo.svg'\nimport { ReactComponent as Logo1 } from '../../assets/img/icons/logo1.svg'\nimport { ReactComponent as SiteLogoWhite } from '../../assets/img/icons/siteLogoWhite.svg'\nimport { ReactComponent as SiteLogoDark } from '../../assets/img/icons/siteLogoDark.svg'\nimport SnDisclaimer from \"../Utils/SnDisclaimer\";\nimport { useHistory } from \"react-router-dom\"\nimport { setLoaderDisplay } from '../../redux/action-reducers-epic/SnLoaderAction';\nimport { initMySky } from '../../service/skynet-api';\nimport { getProfile, getPreferences } from '../../service/SnSkappService';\nimport { setUserProfileAction } from '../../redux/action-reducers-epic/SnUserProfileAction';\nimport { setUserPreferencesAction } from '../../redux/action-reducers-epic/SnUserPreferencesAction';\nimport { getMyFollowersAction } from \"../../redux/action-reducers-epic/SnMyFollowerAction\"\nimport { getMyFollowingsAction } from \"../../redux/action-reducers-epic/SnMyFollowingAction\"\nimport { setUserSession } from \"../../redux/action-reducers-epic/SnUserSessionAction\"\n\nconst useStyles = makeStyles({\n input: {\n '&:focus': {\n outline: 'none',\n borderColor: '#1DBF73'\n },\n background: '#fff',\n border: '1px solid #D9E1EC',\n borderRadius: 8,\n height: 45,\n width: '100%',\n fontSize: 18,\n padding: 20,\n '@media only screen and (max-width: 1440px)': {\n height: 45,\n // width: '100%',\n fontSize: 16,\n padding: 15,\n },\n '@media only screen and (max-width: 575px)': {\n height: 45,\n // width: '100%',\n fontSize: '14px !important',\n padding: 10,\n }\n\n },\n loginFormContainer: {\n display: 'flex',\n height: '100%',\n justifyContent: 'center',\n alignItems: 'center',\n \n },\n lightText: {\n color:'#fff'\n },\n darkText: {\n color:'#2A2C34!important'\n },\n poweredBy: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n /* '& span': {\n color: '#fff'\n }, */\n marginTop: '2.5rem',\n marginBottom: '3.5rem'\n },\n})\nconst Login = ({toggle}) => {\n const classes = useStyles()\n const dispatch = useDispatch()\n const history = useHistory()\n const userSession = useSelector((state) => state.userSession)\n\n const [userID, setUserID] = useState();\n // choose a data domain for saving files in MySky\n const { installedAppsStoreForLogin } = useSelector((state) => state.snInstalledAppsStore);\n\n useEffect(() => {\n console.log(\"##### checkActiveLogin :: userSession = \" + userSession);\n if (userSession?.mySky != null) {\n if (installedAppsStoreForLogin) {\n history.push('/');\n } else {\n history.push('/apps');\n }\n }\n }, [userSession]);\n const handleLogin = async () => {\n let result = null;\n try {\n dispatch(setLoaderDisplay(true));\n //console.log(\"BEFORE: userSession\" + userSession);\n // if user session and mysky is present and user is already logged in\n if (userSession != null && userSession?.mySky != null) {\n const loggedIn = await userSession.mySky.checkLogin();\n if (!loggedIn) {\n await userSession.mySky.requestLoginAccess();\n }\n return;\n }\n else {\n result = await initMySky();\n if (!result.loggedIn) {\n await result.userSession.mySky.requestLoginAccess();\n let userID = await result.userSession.mySky.userID();\n result.userSession.userID = userID;\n }\n }\n //innocent motherly hull focus gnaw elapse custom sipped dazed eden sifting jump lush inkling\n dispatch(setUserSession(result.userSession));\n // on success do following\n //alert(\"handleLogin: newSession \" + result.userSession);\n //alert(\"handleLogin: newSession \" + result.userSession.userID);\n const userProfile = await getProfile();\n dispatch(setUserProfileAction(userProfile));\n const userPrefrences = await getPreferences();\n dispatch(setUserPreferencesAction(userPrefrences));\n //const userProfileObj = await getUserProfile(result.userSession);// dont proceed without pulling profile\n //newSession = { ...newSession, userProfile: userProfileObj};\n //alert(\"AFTER: userSession(old)\" + userSession);\n //history.push('/apps');\n // get userFollowers\n //await dispatch(getMyFollowersAction(null));\n // get userFollowings\n //await dispatch(getMyFollowingsAction(null));\n //window.history.pushState({}, '', '/appdetail')\n dispatch(setLoaderDisplay(false));\n } catch (error) {\n console.log(error);\n dispatch(setLoaderDisplay(false));\n }\n }\n\n {toggle ? document.body.className = \"darkBodyColor\" : document.body.className = \"lightBodyColor\"}\n\n return (\n <div className={classes.loginFormContainer}>\n <form className={toggle ? 'darkLogin-form' : 'lightLogin-form'}>\n <div>\n {toggle ? <Logo1 /> : <Logo />}\n <h3 className={toggle ? classes.lightText : classes.darkText}>Sign In to Skapp</h3>\n <Button onClick={handleLogin}> Login using MySky\n </Button>\n <div className={classes.poweredBy}>\n <span className={toggle ? classes.lightText : classes.darkText}>Powered by </span>\n <SiteLogoDark />\n </div>\n </div>\n </form>\n </div>\n )\n}\nexport default Login\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/assets/jss/sidebar/SidebarStyle.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnLoaderAction.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUserProfileAction.js",["914"],"import {\n ACT_TY_SET_USER_PROFILE,\n EPIC_TY_SET_USER_PROFILE\n} from \"../SnActionConstants\"\nimport store from \"..\"\nimport { STORAGE_USER_APP_PROFILE_KEY, BROWSER_STORAGE } from \"../../utils/SnConstants\"\n\n// get internally calls set from epic\nexport const setUserProfileEpic = (userAppProfile) => {\n if (userAppProfile == null) {\n BROWSER_STORAGE.removeItem(STORAGE_USER_APP_PROFILE_KEY)\n } else {\n BROWSER_STORAGE.setItem(STORAGE_USER_APP_PROFILE_KEY,JSON.stringify(userAppProfile))\n }\n return {\n type: EPIC_TY_SET_USER_PROFILE,\n payload: userAppProfile,\n }\n}\n// This method is called during login and on Profile Page\nexport const setUserProfileAction = (userAppProfile) => {\n console.log(\"setUserProfileAction 1\");\n if (userAppProfile == null) {\n userAppProfile = BROWSER_STORAGE.getItem(STORAGE_USER_APP_PROFILE_KEY)\n console.log(\"setUserProfileAction 2\"+userAppProfile);\n if (userAppProfile != null) {\n console.log(\"setUserProfileAction 3\");\n userAppProfile = JSON.parse(userAppProfile)\n }\n \n } else {\n BROWSER_STORAGE.setItem(STORAGE_USER_APP_PROFILE_KEY,JSON.stringify(userAppProfile))\n }\n return {\n type: ACT_TY_SET_USER_PROFILE,\n payload: userAppProfile,\n }\n}","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnPublishAppAction.js",["915"],"import {ACT_TY_SET_MY_PUBLISHED_APPS,EPIC_TY_PUBLISH_APP,EPIC_TY_GET_ALL_PUBLISHED_APPS,EPIC_TY_GET_MY_PUBLISHED_APPS} from \"../SnActionConstants\";\n\nexport const publishAppAction = (data) => ({\n type: EPIC_TY_PUBLISH_APP,\n payload: data,\n})\n\nexport const getMyPublishedAppsAction = () => ({\n type: EPIC_TY_GET_MY_PUBLISHED_APPS,\n payload: null,\n})\n\n// Like, Fav, View, Access \nexport const setPublishedAppsStore = (appsJSON) => ({\n type: ACT_TY_SET_MY_PUBLISHED_APPS,\n payload: appsJSON,\n})","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnInstalledAppAction.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAllPublishAppAction.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAppStatsAction.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAppCommentsAction.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnStorageAction.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUserPreferencesAction.js",["916"],"import {\n ACT_TY_SET_USER_PREFERENCES,\n EPIC_TY_SET_USER_PREFERENCES,\n} from \"../SnActionConstants\"\nimport store from \"..\"\nimport { STORAGE_USER_PREFERENCES_KEY, BROWSER_STORAGE } from \"../../utils/SnConstants\"\n\n// get internally calls set from epic\nexport const setUserPreferencesEpic = (userPreferences) => {\n if (userPreferences == null) {\n BROWSER_STORAGE.removeItem(STORAGE_USER_PREFERENCES_KEY)\n } else {\n BROWSER_STORAGE.setItem(\n STORAGE_USER_PREFERENCES_KEY,\n JSON.stringify(userPreferences)\n )\n }\n return {\n type: EPIC_TY_SET_USER_PREFERENCES,\n payload: userPreferences,\n }\n}\n// This method is called during login and on Profile Page\nexport const setUserPreferencesAction = (userPreferences) => {\n if (userPreferences == null) {\n userPreferences = BROWSER_STORAGE.getItem(STORAGE_USER_PREFERENCES_KEY)\n if (userPreferences != null) {\n userPreferences = JSON.parse(userPreferences)\n }\n } else {\n BROWSER_STORAGE.setItem(\n STORAGE_USER_PREFERENCES_KEY,\n JSON.stringify(userPreferences)\n )\n }\n return {\n type: ACT_TY_SET_USER_PREFERENCES,\n payload: userPreferences,\n }\n}\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/service/SnSkappService.js",["917","918","919","920","921","922","923","924","925","926","927","928","929","930","931","932","933","934","935","936"],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnMyFollowerAction.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Utils/SnDisclaimer.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnMyFollowingAction.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Setting/globalPrefrences.js",["937"],"import { Box, Button, makeStyles, Snackbar } from \"@material-ui/core\";\nimport { Add } from \"@material-ui/icons\";\nimport Alert from \"@material-ui/lab/Alert\";\nimport { Formik } from \"formik\";\nimport React, { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setLoaderDisplay } from \"../../redux/action-reducers-epic/SnLoaderAction\";\nimport { setUserPreferencesAction } from \"../../redux/action-reducers-epic/SnUserPreferencesAction\";\nimport { setPreferences } from \"../../service/SnSkappService\";\nimport { SnSelect, SnSwitch } from \"../Utils/SnFormikControlls\";\n\nconst useStyles = makeStyles((theme) => ({\n ProfileRoot: {\n backgroundColor: \"#fff\",\n boxShadow: \"0px 2px 5px #15223214\",\n borderRadius: 6,\n padding: \"50px 30px\",\n \"@media only screen and (max-width: 575px)\": {\n padding: \"20px 10px\",\n },\n \"& h2\": {\n color: \"#242F57\",\n marginBottom: \"1rem\",\n \"@media only screen and (max-width: 575px)\": {\n fontSize: 22,\n },\n },\n },\n textInfo: {\n color: \"#000\",\n fontSize: 14,\n \"@media only screen and (max-width: 575px)\": {\n fontSize: 13,\n },\n },\n submitBtn: {\n background: \"#1DBF73!important\",\n color: \"#fff\",\n paddingLeft: \"1rem\",\n paddingRight: \"1rem\",\n display: \"inlin-flex\",\n alignItems: \"center\",\n float: \"right\",\n minWidth: 130,\n \"& svg\": {\n fontSize: \"19px\",\n marginRight: \"5px\",\n },\n \"@media only screen and (max-width: 575px)\": {\n fontSize: \"12px\",\n\n paddingLeft: \".5rem\",\n paddingRight: \".5rem\",\n minWidth: 70,\n },\n },\n siteLogo: {\n background: \"#fff\",\n cursor: \"pointer\",\n height: 150,\n width: 150,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n border: \"1px solid #D9E1EC\",\n borderRadius: \"50%\",\n marginBottom: 10,\n marginTop: 10,\n \"@media only screen and (max-width: 575px)\": {\n width: 75,\n height: 75,\n // maxWidth: 340,\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n },\n label: {\n display: \"block\",\n color: \"#5A607F\",\n marginBottom: 8,\n fontSize: 18,\n \"@media only screen and (max-width: 575px)\": {\n fontSize: 16,\n },\n },\n profilePlaceholder: {\n width: 150,\n height: 150,\n background: \"#EFF5F7\",\n display: \"flex\",\n borderRadius: \"50%\",\n justifyContent: \"center\",\n alignItems: \"center\",\n overflow: \"hidden\",\n \"& svg\": {\n fontSize: 89,\n // marginTop: '2.9rem',\n color: \"#B4C6CC\",\n },\n \"@media only screen and (max-width: 575px)\": {\n width: 75,\n height: 75,\n \"& svg\": {\n fontSize: 45,\n // marginTop: '2.9rem',\n color: \"#B4C6CC\",\n },\n },\n },\n btnUpload: {\n backgroundColor: \"#869EA6!important\",\n color: \"#fff\",\n fontSize: 14,\n minWidth: 150,\n \"@media only screen and (max-width: 575px)\": {\n fontSize: 12,\n height: 40,\n },\n \"& svg\": {\n marginRight: 7,\n },\n },\n textHelper: {\n fontSize: 13,\n color: \"#5C757D\",\n marginTop: 5,\n \"@media only screen and (max-width: 575px)\": {\n fontSize: 12,\n },\n },\n form: {\n marginTop: 20,\n },\n inputGuide: {\n color: \"#5C757D\",\n \"@media only screen and (max-width: 575px)\": {\n fontSize: 12,\n },\n },\n input: {\n background: \"#fff\",\n border: \"1px solid #D9E1EC\",\n borderRadius: 8,\n height: 55,\n width: \"100%\",\n fontSize: 18,\n padding: 20,\n \"@media only screen and (max-width: 1440px)\": {\n height: 50,\n // width: '100%',\n fontSize: 16,\n padding: 15,\n },\n \"@media only screen and (max-width: 575px)\": {\n height: 43,\n // width: '100%',\n fontSize: \"14px !important\",\n padding: 10,\n },\n },\n inputContainer: {\n \"& > label\": {\n display: \"block\",\n color: \"#5A607F\",\n marginBottom: 7,\n },\n \"& input:focus, & select:focus\": {\n outline: \"none!important\",\n border: \"1px solid #1DBF73\",\n },\n marginTop: \"25px\",\n \"&\": {\n marginRight: \"1rem\",\n },\n \"& input, & input\": {\n fontSize: 18,\n },\n \"@media only screen and (max-width: 575px)\": {\n marginTop: \"16px\",\n marginRight: \"10px\",\n },\n },\n firstInput: {\n marginTop: 5,\n \"@media only screen and (max-width: 575px)\": {\n marginBottom: 10,\n },\n },\n}));\n\nconst portalOptions = [\n { value: \"https://siasky.net/\", label: \"https://siasky.net/\" },\n { value: \"https://skyportal.xyz\", label: \"https://skyportal.xyz\" },\n];\nconst initailValueFormikObGB = {\n darkmode: true,\n portal: \"https://siasky.net\",\n};\n\nconst GlobalPrefrences = () => {\n const [isSuccess, setIsSuccess] = useState(false);\n const [isError, setIsError] = useState(false);\n const [formikObjGB, setFormikObGB] = useState(initailValueFormikObGB); // to store Formik Form data\n const classes = useStyles();\n const userPreferences = useSelector((state) => state.snUserPreferences);\n const dispatch = useDispatch();\n\n useEffect(() => {\n setFormikObGB({\n darkmode: userPreferences?.darkmode,\n portal: userPreferences?.portal,\n });\n }, [userPreferences]);\n\n const submitGlobalPreferencesForm = async (values) => {\n dispatch(setLoaderDisplay(true));\n let preferencesJSON = {\n darkmode: values.darkmode,\n portal: values.portal,\n };\n await setPreferences(preferencesJSON);\n dispatch(setUserPreferencesAction(preferencesJSON));\n setIsSuccess(true);\n dispatch(setLoaderDisplay(false));\n };\n\n const handleClose = (event, reason) => {\n if (reason === \"clickaway\") {\n return;\n }\n setIsSuccess(false);\n };\n\n//console.log(formikObjGB);\n\n return (\n <div className={classes.ProfileRoot}>\n <Box>\n {isSuccess && (\n <Snackbar\n anchorOrigin={{ vertical: \"top\", horizontal: \"center\" }}\n open={isSuccess}\n autoHideDuration={5000}\n >\n <Alert onClose={handleClose} severity=\"success\">\n User Preferences Successfully Saved!\n </Alert>\n </Snackbar>\n )}\n {isError && (\n <Snackbar\n anchorOrigin={{ vertical: \"top\", horizontal: \"center\" }}\n open={isError}\n autoHideDuration={5000}\n >\n <Alert onClose={handleClose} severity=\"error\">\n Error Occurred while saving User Preferences!\n </Alert>\n </Snackbar>\n )}\n {\n <Formik\n initialValues={formikObjGB}\n validateOnChange={true}\n validateOnBlur={true}\n enableReinitialize={true}\n onSubmit={submitGlobalPreferencesForm}\n >\n {(formik) => (\n <form onSubmit={formik.handleSubmit}>\n <h2>\n Global User Prefrences{\" \"}\n <Button\n className={classes.submitBtn}\n onClick={formik.handleSubmit}\n >\n <Add /> Save Changes{\" \"}\n </Button>\n </h2>\n <Box\n display=\"flex\"\n className={`${classes.formRow} formSiteRow`}\n >\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnSwitch label=\"Dark Mode\" name=\"darkmode\" />\n </Box>\n <Box className={`${classes.inputContainer}`} flex={1}>\n <label>Skynet Portal</label>\n <Box>\n <SnSelect\n label=\"Skynet Portal\"\n name=\"portal\"\n options={portalOptions}\n />\n </Box>\n </Box>\n </Box>\n </form>\n )}\n </Formik>\n }\n </Box>\n </div>\n );\n};\n\nexport default GlobalPrefrences;\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Setting/Profile.js",["938","939","940"],"import {\n Box,\n Button,\n Grid,\n IconButton,\n makeStyles,\n Snackbar,\n Tooltip\n} from \"@material-ui/core\";\nimport {\n Add,\n Facebook,\n GitHub,\n Reddit,\n Remove,\n Telegram,\n Twitter,\n} from \"@material-ui/icons\";\nimport PersonOutlineIcon from \"@material-ui/icons/PersonOutline\";\nimport { ReactComponent as UserProfileBackIcon } from '../../assets/img/icons/user-profile-back.svg'\nimport { ReactComponent as CopyIcon } from '../../assets/img/icons/copy.svg'\n\nimport Alert from \"@material-ui/lab/Alert\";\nimport { FieldArray, Formik } from \"formik\";\nimport React, { createRef, Fragment, useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport Loader from \"react-loader-spinner\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport * as Yup from \"yup\";\nimport { setLoaderDisplay } from \"../../redux/action-reducers-epic/SnLoaderAction\";\nimport { setUserProfileAction } from \"../../redux/action-reducers-epic/SnUserProfileAction\";\nimport { setProfile } from \"../../service/SnSkappService\";\nimport { getUserID } from '../../service/skynet-api';\nimport SnUpload from \"../../uploadUtil/SnUpload\";\nimport { UPLOAD_SOURCE_NEW_HOSTING_IMG } from \"../../utils/SnConstants\";\nimport { skylinkToUrl } from \"../../service/skynet-api\";\nimport {\n SnInputWithIcon,\n SnTextArea,\n SnTextInput,\n SnTextInputTag,\n} from \"../Utils/SnFormikControlls\";\nimport {\n getFollowingCountForUser\n} from \"../../service/SnSkappService\"\n\nconst useStyles = makeStyles((theme) => ({\n ProfileRoot: {\n backgroundColor: \"#fff\",\n boxShadow: \"0px 2px 5px #15223214\",\n borderRadius: 6,\n padding: \"50px 30px\",\n \"@media only screen and (max-width: 575px)\": {\n padding: \"20px 10px\",\n },\n \"& h2\": {\n color: \"#242F57\",\n marginBottom: \"1rem\",\n \"@media only screen and (max-width: 575px)\": {\n fontSize: 22,\n },\n },\n },\n textInfo: {\n color: \"#000\",\n fontSize: 14,\n \"@media only screen and (max-width: 575px)\": {\n fontSize: 13,\n },\n },\n addBtn: {\n border: `1px solid ${theme.palette.primary.main}`,\n color: theme.palette.primary.main,\n },\n removeBtn: {\n border: `1px solid ${theme.palette.error.main}`,\n color: theme.palette.error.main,\n marginTop: 63,\n },\n submitBtn: {\n float: \"right\",\n \"& svg\": {\n fontSize: \"19px\",\n marginRight: \"5px\",\n },\n \"@media only screen and (max-width: 575px)\": {\n fontSize: \"12px\",\n },\n },\n copyBtn: {\n position: 'absolute',\n right: 0,\n top: 0,\n minWidth: 50,\n height: '100%'\n },\n siteLogo: {\n background: \"#fff\",\n cursor: \"pointer\",\n height: 150,\n width: 150,\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n border: \"1px solid #D9E1EC\",\n borderRadius: \"50%\",\n marginBottom: 10,\n marginTop: 10,\n \"@media only screen and (max-width: 575px)\": {\n width: 75,\n height: 75,\n // maxWidth: 340,\n marginLeft: \"auto\",\n marginRight: \"auto\",\n },\n },\n label: {\n display: \"block\",\n color: \"#5A607F\",\n marginBottom: 8,\n fontSize: 18,\n \"@media only screen and (max-width: 575px)\": {\n fontSize: 16,\n },\n },\n profilePlaceholder: {\n width: 150,\n height: 150,\n background: \"#EFF5F7\",\n display: \"flex\",\n borderRadius: \"50%\",\n justifyContent: \"center\",\n alignItems: \"center\",\n overflow: \"hidden\",\n \"& svg\": {\n fontSize: 89,\n // marginTop: '2.9rem',\n color: \"#B4C6CC\",\n },\n \"@media only screen and (max-width: 575px)\": {\n width: 75,\n height: 75,\n \"& svg\": {\n fontSize: 45,\n // marginTop: '2.9rem',\n color: \"#B4C6CC\",\n },\n },\n },\n boxHalf: {\n boxShadow: '15px 15px 25px 0px rgba(29,191,115,0.31)',\n background: '#fff',\n padding: ' 10px 1.5rem',\n '& ._details': {\n marginLeft: '1rem'\n },\n borderRadius: 6,\n width: 230,\n maxWidth: '100%'\n },\n UserProfile: {\n width: 50,\n height: 50,\n background: 'rgb(29 191 115 / 20%)',\n borderRadius: '50%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n },\n WraperUserFollowing: {\n '@media (max-width: 400px)': {\n flexDirection: 'column',\n '& .MuiBox-root': {\n marginLeft: 0,\n marginBottom: 10\n }\n }\n },\n btnUpload: {\n backgroundColor: \"#869EA6!important\",\n color: \"#fff\",\n fontSize: 14,\n minWidth: 150,\n \"@media only screen and (max-width: 575px)\": {\n fontSize: 12,\n height: 40,\n },\n \"& svg\": {\n marginRight: 7,\n },\n },\n textHelper: {\n fontSize: 13,\n color: \"#5C757D\",\n marginTop: 5,\n \"@media only screen and (max-width: 575px)\": {\n fontSize: 12,\n },\n },\n form: {\n marginTop: 20,\n },\n inputGuide: {\n color: \"#5C757D\",\n \"@media only screen and (max-width: 575px)\": {\n fontSize: 12,\n },\n },\n input: {\n background: \"#fff\",\n border: \"1px solid #D9E1EC\",\n borderRadius: 8,\n height: 55,\n width: \"100%\",\n fontSize: 18,\n padding: 20,\n \"@media only screen and (max-width: 1440px)\": {\n height: 50,\n // width: '100%',\n fontSize: 16,\n padding: 15,\n },\n \"@media only screen and (max-width: 575px)\": {\n height: 43,\n // width: '100%',\n fontSize: \"14px !important\",\n padding: 10,\n },\n },\n inputContainer: {\n \"& > label\": {\n display: \"block\",\n color: \"#5A607F\",\n marginBottom: 7,\n },\n \"& input:focus, & select:focus\": {\n outline: \"none!important\",\n border: \"1px solid #1DBF73\",\n },\n marginTop: \"25px\",\n \"&\": {\n marginRight: \"1rem\",\n },\n \"& input, & input\": {\n fontSize: 18,\n },\n \"@media only screen and (max-width: 575px)\": {\n marginTop: \"16px\",\n marginRight: \"10px\",\n },\n },\n firstInput: {\n marginTop: 5,\n \"@media only screen and (max-width: 575px)\": {\n marginBottom: 10,\n },\n },\n small_avatar: {\n margin: 8,\n height: 64,\n width: 64,\n cursor: \"pointer\",\n },\n}));\n\nconst validationSchema = Yup.object().shape({\n username: Yup.string().required(\"This field is required\"),\n emailID: Yup.string().email(\"Invalid email\"),\n contact: Yup.string()\n .matches(/[0-9+-]/, \"Invalid contact\")\n .max(20),\n otherConnections: Yup.array().of(\n Yup.object().shape({\n channel: Yup.string().required(\"This field is required\"),\n url: Yup.string().required(\"This field is required\"),\n })\n ),\n});\n\nconst initailValueFormikObj = {\n username: \"\",\n emailID: \"\",\n firstName: \"\",\n lastName: \"\",\n contact: \"\",\n aboutMe: \"\",\n location: \"\",\n topicsHidden: [],\n topicsDiscoverable: [],\n topics: [],\n avatar: {},\n facebook: \"\",\n twitter: \"\",\n github: \"\",\n reddit: \"\",\n telegram: \"\",\n otherConnections: [],\n};\n\nconst socialConnectionList = [\n { name: \"Github\", icon: <GitHub /> },\n { name: \"Twitter\", icon: <Twitter /> },\n { name: \"Facebook\", icon: <Facebook /> },\n { name: \"Reddit\", icon: <Reddit /> },\n { name: \"Telegram\", icon: <Telegram /> },\n];\n\nconst Profile = () => {\n const [isInitialDataAvailable, setIsInitialDataAvailable] = useState(false);\n const [followingCount, setFollowingCount] = useState(0);\n const [MyUserID, setMyUserID] = useState(\"\");\n const [isSuccess, setIsSuccess] = useState(false); // to show Model\n const [isError, setIsError] = useState(false); // to show Model\n const [formikObj, setFormikObj] = useState(initailValueFormikObj); // to store Formik Form data\n const [isLogoUploaded, setIsLogoUploaded] = useState(false);\n\n const classes = useStyles();\n const history = useHistory();\n const dispatch = useDispatch();\n\n const imgUploadEleRef = createRef();\n\n const userProfile = useSelector((state) => state.snUserProfile);\n const userSession = useSelector((state) => state.userSession);\n\n useEffect(() => {\n setProfileFormicObj(userProfile);\n setIsInitialDataAvailable(true);\n (async () => {\n //console.log(\"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ useEffect userProfile \"+JSON.stringify(userProfile))\n //console.log(\"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ useEffect userSession \"+userSession)\n const userID = await getUserID();\n setMyUserID(userID);\n })();\n }, [userProfile]);\n\n useEffect(() => {\n if (userSession == null) {\n history.push(\"/login\");\n }\n })\n\n useEffect(() => {\n (async () => {\n //console.log(\"^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ useEffect userSession \"+userSession)\n if (userSession) {\n const count = await getFollowingCountForUser(null);\n setFollowingCount(count);\n }\n })();\n }, [userSession])\n\n const handleClose = (event, reason) => {\n if (reason === \"clickaway\") {\n return;\n }\n setIsSuccess(false);\n };\n const copyToClipboard = (e) => {\n const el = document.createElement('textarea');\n el.value = MyUserID;\n el.setAttribute('readonly', '');\n el.style.position = 'absolute';\n el.style.left = '-9999px';\n document.body.appendChild(el);\n el.select();\n document.execCommand('copy');\n document.body.removeChild(el);\n }\n const handleDropZoneClick = (evt, dropZoneRef) => {\n evt.preventDefault();\n evt.stopPropagation();\n dropZoneRef.current.gridRef.current.click();\n };\n\n const handleImgUpload = (obj, formik) => {\n formik.setFieldValue(\"avatar\", {\n ext: \"jpeg\",\n w: 300,\n h: 300,\n url: `sia:${obj.thumbnail}`\n }, true);\n setIsLogoUploaded(false);\n };\n\n const setProfileFormicObj = (profile) => {\n //console.log(\"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ profile from DAC =\"+ JSON.stringify(profile))\n if (profile && profile?.username) {\n let temp = { ...initailValueFormikObj, ...profile };\n temp.otherConnections = [];\n temp.avatar = (profile.avatar && profile.avatar[0]) || {};\n\n profile?.connections?.forEach((item) => {\n for (const key in item) {\n if (\n [\"facebook\", \"twitter\", \"reddit\", \"github\", \"telegram\"].includes(\n key\n )\n ) {\n temp[key] = item[key];\n } else {\n temp.otherConnections.push({\n channel: key,\n url: item[key],\n });\n }\n }\n });\n\n //console.log(temp.otherConnections);\n\n //temp.topicsHidden = profile?.topicsHidden || [];\n temp.topicsDiscoverable = profile?.topics || [];\n\n setFormikObj(temp);\n } else {\n setFormikObj(initailValueFormikObj);\n }\n };\n\n const submitProfileForm = async ({\n twitter,\n facebook,\n reddit,\n github,\n telegram,\n avatar,\n ...rest\n }) => {\n dispatch(setLoaderDisplay(true));\n let profileJSON = {\n version: 1,\n username: rest.username,\n firstName: rest.firstName,\n lastName: rest.lastName,\n emailID: rest.emailID,\n contact: rest.contact,\n aboutMe: rest.aboutMe,\n location: rest.location,\n topics: rest.topicsDiscoverable,\n connections: [\n { twitter },\n { facebook },\n { github },\n { reddit },\n { telegram },\n ...rest.otherConnections\n .filter((item) => !!item.channel)\n .map((item) => ({ [item.channel]: item.url })),\n ],\n avatar: [avatar],\n };\n console.log(\"$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ BEFORE SAVING PROFILE using DAC =\" + JSON.stringify(profileJSON))\n await setProfile(profileJSON);\n dispatch(setUserProfileAction(profileJSON));\n setIsSuccess(true);\n dispatch(setLoaderDisplay(false));\n };\n\n const handleAddChannelRow = (arrayHelpers) => () => {\n arrayHelpers.push({\n channel: \"\",\n url: \"\",\n });\n };\n\n const handleRemoveChannelRow = (arrayHelpers, ind) => () => {\n arrayHelpers.remove(ind);\n };\n\n const generateRandomAvatarUrl = (setFieldValue) => () => {\n let rand = Math.floor(Math.random() * (0 - 99) + 99);\n\n const imgObj = {\n ext: \"jpeg\",\n w: 300,\n h: 300,\n url: `sia://RABycdgWznT8YeIk57CDE9w0CiwWeHi7JoYOyTwq_UaSXQ/${rand}/300`,\n };\n setFieldValue(\"avatar\", imgObj);\n };\n \n\n return (\n <div className={classes.ProfileRoot}>\n <Box>\n <Snackbar\n anchorOrigin={{ vertical: \"top\", horizontal: \"center\" }}\n open={isSuccess}\n autoHideDuration={5000}\n >\n <Alert onClose={handleClose} severity=\"success\">\n User Profile Successfully Saved!\n </Alert>\n </Snackbar>\n <Snackbar\n aranchorOrigin={{ vertical: \"top\", horizontal: \"center\" }}\n open={isError}\n autoHideDuration={5000}\n >\n <Alert onClose={handleClose} severity=\"error\">\n Error Occurred while saving profile!\n </Alert>\n </Snackbar>\n {isInitialDataAvailable ? (\n <Formik\n initialValues={formikObj}\n validationSchema={validationSchema}\n validateOnChange={true}\n validateOnBlur={true}\n enableReinitialize={true}\n onSubmit={submitProfileForm}\n >\n {({ values, ...formik }) => (\n \n <form onSubmit={formik.handleSubmit}>\n <h2>\n Global User Profile{\" \"}\n <Button\n variant=\"contained\"\n color=\"primary\"\n disableElevation\n className={classes.submitBtn}\n onClick={formik.handleSubmit}\n >\n <Add /> Save Changes{\" \"}\n </Button>\n </h2>\n\n <Box display=\"flex\" alignItems=\"center\" >\n <Box marginRight=\".5rem\"><h3>UserID : </h3></Box>\n {MyUserID ? <>\n <Tooltip title={MyUserID}>\n <Box textOverflow=\"ellipsis\" overflow=\"hidden\" style={{ width: 200, whiteSpace: 'nowrap' }} >\n {/* <Box> */}\n {MyUserID}\n </Box>\n </Tooltip>\n <Button onClick={() => copyToClipboard()}>\n <CopyIcon />\n </Button></>\n :\n \"Loading UserID...\"}\n </Box>\n <Box component=\"form\">\n <Box className={classes.WraperUserFollowing} display=\"flex\" justifyContent=\"flex-start\" alignItems=\"center\" marginTop=\"1rem\">\n <Box marginLeft=\"1rem\" alignItems=\"center\">\n <div className=\"d-none\">\n <SnUpload\n name=\"files\"\n source={UPLOAD_SOURCE_NEW_HOSTING_IMG}\n ref={imgUploadEleRef}\n directoryMode={false}\n onUpload={(obj) => handleImgUpload(obj, formik)}\n uploadStarted={(e) => setIsLogoUploaded(e)}\n />\n </div>\n <div\n className={classes.siteLogo}\n onClick={(evt) =>\n handleDropZoneClick(evt, imgUploadEleRef)\n }\n >\n {!isLogoUploaded &&\n Object.keys(values.avatar).length === 0 &&(\n <div className={classes.profilePlaceholder}>\n <PersonOutlineIcon className={classes.avatarIcon} />\n </div>\n )}\n {!isLogoUploaded &&\n Object.keys(values.avatar).length > 0 && \n values.avatar.url == \"\" &&(\n <div className={classes.profilePlaceholder}>\n <PersonOutlineIcon className={classes.avatarIcon} />\n </div>\n )}\n {!isLogoUploaded &&\n Object.keys(values.avatar).length > 0 && \n values.avatar.url !== \"\" && (\n <img\n alt=\"Image\"\n src={skylinkToUrl(values.avatar.url)}\n className={classes.siteLogo}\n onClick={(evt) =>\n handleDropZoneClick(evt, imgUploadEleRef)\n }\n name=\"1\"\n />\n )}\n {isLogoUploaded ? (\n <Loader\n type=\"Oval\"\n color=\"#57C074\"\n height={50}\n width={50}\n />\n ) : null}\n </div>\n <input type=\"text\" hidden />\n <Box justifyContent=\"center\" alignContent=\"center\">\n <div className={classes.inputGuide}>Upload Image(JPG/PNG) <br /><b>OR</b></div>\n <Button\n variant=\"contained\"\n color=\"primary\"\n disableElevation\n onClick={generateRandomAvatarUrl(formik.setFieldValue)}\n >\n Get Avatar\n </Button>\n </Box>\n </Box>\n <Box className={classes.boxHalf} display=\"flex\" marginLeft=\"1rem\" alignItems=\"center\">\n <div className={classes.UserProfile}>\n <UserProfileBackIcon />\n </div>\n <div className='_details'>\n <h3 className={classes.h3}>{followingCount}</h3>\n <p className={classes.p}>Following</p>\n </div>\n </Box>\n </Box>\n\n <Box\n display=\"flex\"\n className={`${classes.formRow} formSiteRow`}\n >\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnTextInput\n label={\n <span>\n {\" \"}\n Username <span style={{ color: \"red\" }}>*</span>\n </span>\n }\n name=\"username\"\n className={classes.input}\n type=\"text\"\n />\n </Box>\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnTextInput\n label=\"First Name\"\n name=\"firstName\"\n className={classes.input}\n type=\"text\"\n />\n </Box>\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnTextInput\n label=\"Last Name\"\n name=\"lastName\"\n className={classes.input}\n type=\"text\"\n />\n </Box>\n </Box>\n <Box\n display=\"flex\"\n className={`${classes.formRow} formSiteRow`}\n >\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnTextInput\n label=\"Location\"\n name=\"location\"\n className={classes.input}\n type=\"text\"\n />\n </Box>\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnTextInput\n label=\"Email\"\n name=\"emailID\"\n className={classes.input}\n type=\"text\"\n />\n </Box>\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnTextInput\n label=\"Contact\"\n name=\"contact\"\n className={classes.input}\n type=\"text\"\n />\n </Box>\n </Box>\n <Box\n display=\"flex\"\n className={`${classes.formRow} formSiteRow`}\n >\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnTextArea\n label=\"About me\"\n name=\"aboutMe\"\n className={classes.input}\n />\n </Box>\n </Box>\n <Box\n display=\"flex\"\n className={`${classes.formRow} formSiteRow`}\n >\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnTextInputTag disabled\n label=\"Topics Hidden - Disabled (coming soon)\"\n name=\"topicsHidden\"\n className={classes.input}\n />\n </Box>\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnTextInputTag\n label=\"Topics Discoverable\"\n name=\"topicsDiscoverable\"\n className={classes.input}\n />\n </Box>\n </Box>\n\n <Box\n display=\"flex\"\n className={`${classes.formRow} formSiteRow`}\n >\n <Box className={`${classes.inputContainer}`} flex={1}>\n <label>Social Connections</label>\n </Box>\n </Box>\n\n <Grid container spacing={0}>\n {socialConnectionList.map((item) => (\n <Grid item sm={6} xs={12} key={item.name}>\n <Box className={`${classes.inputContainer}`}>\n <SnInputWithIcon\n icon={item.icon}\n label={item.name}\n name={item.name.toLocaleLowerCase()}\n type=\"text\"\n />\n </Box>\n </Grid>\n ))}\n </Grid>\n\n <FieldArray name=\"otherConnections\">\n {(arrayHelpers) => (\n <Fragment>\n <Grid container spacing={0}>\n {values.otherConnections?.map((item, ind) => (\n <Fragment key={ind}>\n <Grid item sm={5} xs={12}>\n <Box className={`${classes.inputContainer}`}>\n <SnTextInput\n className={classes.input}\n label=\"Channel\"\n name={`otherConnections[${ind}].channel`}\n type=\"text\"\n />\n </Box>\n </Grid>\n <Grid item sm={6} xs={12}>\n <Box className={`${classes.inputContainer}`}>\n <SnTextInput\n className={classes.input}\n label=\"Channel Url\"\n name={`otherConnections[${ind}].url`}\n type=\"text\"\n />\n </Box>\n </Grid>\n <Grid item sm={1} xs={12}>\n <IconButton\n className={classes.removeBtn}\n size=\"small\"\n type=\"button\"\n onClick={handleRemoveChannelRow(\n arrayHelpers,\n ind\n )}\n >\n <Remove />\n </IconButton>\n </Grid>\n </Fragment>\n ))}\n </Grid>\n\n <Box textAlign=\"center\" mt=\"1.5rem\">\n <IconButton\n className={classes.addBtn}\n type=\"button\"\n onClick={handleAddChannelRow(arrayHelpers)}\n >\n <Add />\n </IconButton>\n </Box>\n </Fragment>\n )}\n </FieldArray>\n </Box>\n </form>\n )}\n </Formik>\n ) : null}\n </Box>\n </div>\n );\n};\n\nexport default Profile;\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/DescoverDev/DevTable.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/hooks/useWindowDimensions.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppDetails/AppInfo.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppDetails/AppDetailsHeader.js",["941"],"import {\n Box,\n Button,\n IconButton,\n makeStyles,\n Typography,\n} from \"@material-ui/core\";\nimport {\n FavoriteBorder,\n FavoriteOutlined,\n OpenInNew,\n Share,\n ThumbUpSharp,\n} from \"@material-ui/icons\";\nimport ThumbUpAltOutlinedIcon from \"@material-ui/icons/ThumbUpAltOutlined\";\nimport VisibilityIcon from \"@material-ui/icons/Visibility\";\nimport React, { useEffect, useState } from \"react\";\nimport { useDispatch } from \"react-redux\";\nimport cubsImg from \"../../assets/img/cubs.png\";\nimport { ReactComponent as MsgIcon } from \"../../assets/img/icons/Messages, Chat.15.svg\";\nimport { setAppStatsAction } from \"../../redux/action-reducers-epic/SnAppStatsAction\";\nimport {\n getAggregatedAppStatsByAppId,\n getAppStats,\n transformImageUrl,\n} from \"../../service/SnSkappService\";\nimport {\n EVENT_APP_FAVORITE,\n EVENT_APP_FAVORITE_REMOVED,\n EVENT_APP_LIKED,\n EVENT_APP_LIKED_REMOVED,\n} from \"../../utils/SnConstants\";\n\nconst useStyles = makeStyles({\n AppHeaderContainer: {\n padding: \"2rem\",\n color: \"#fff\",\n maxWidth: \"1440px\",\n borderRadius: 15,\n background: (props) => props.bgColor || \"#1DBF73\",\n \"@media only screen and (max-width: 575px)\": {\n paddingLeft: \"20px\",\n paddingRight: \"20px\",\n paddingTop: \"25px\",\n },\n },\n HeartIcon: {\n \"& #Path_52298\": {\n stroke: \"#fff\",\n },\n // color: '#fff'\n },\n ShareIcon: {\n color: \"inherit\",\n \"& g > path\": {\n stroke: \"#fff\",\n },\n },\n MsgIcon: {\n \"& path:not(:first-child)\": {\n stroke: \"#fff\",\n },\n transform: \"scale(1.4)\",\n marginRight: \"8px\",\n \"@media only screen and (max-width: 575px)\": {\n transform: \"scale(1.2)\",\n marginRight: \"4px\",\n \"& p\": {\n fontSize: 14,\n },\n },\n },\n addFav: {\n color: \"white\",\n fontSize: 25,\n },\n StarIcon: {\n \"& path:not(:first-child)\": {\n stroke: \"#fff\",\n fill: \"#fff\",\n },\n // cursor: \"pointer\",\n transform: \"scale(1.4)\",\n marginRight: \"8px\",\n\n \"@media only screen and (max-width: 575px)\": {\n transform: \"scale(1.2)\",\n marginRight: \"4px\",\n\n \"& p\": {\n fontSize: 14,\n },\n },\n },\n h1: {\n fontSize: \"48px\",\n fontWeight: \"700\",\n lineHeight: 1,\n marginRight: \"1rem\",\n // marginTop: 5,\n // marginBottom: 10,\n \"@media only screen and (max-width: 575px)\": {\n fontSize: \"25px\",\n },\n },\n programBtn: {\n background: \"rgba(255,255,255,0.7)!important\",\n color: (props) => props.bgColor || \"#1DBF73\",\n paddingLeft: \"10px\",\n paddingRight: \"10px\",\n fontSize: 14,\n fontWeight: 600,\n },\n installBtn: {\n background: \"#fff!important\",\n minWidth: 165,\n margin: \"22px 0\",\n fontSize: 12,\n },\n text: {\n fontSize: 18,\n lineHeight: \"21px\",\n whiteSpace: \"pre-wrap\",\n \"@media only screen and (max-width: 575px)\": {\n fontSize: \"14px\",\n lineHeight: \"17px\",\n },\n },\n box1: {\n marginRight: \"3rem\",\n },\n box2: {\n textAlign: \"center\",\n \"@media only screen and (max-width: 575px)\": {\n display: \"none\",\n },\n },\n favrIcon: {\n marginLeft: \".8rem\",\n\n \"@media only screen and (max-width: 575px)\": {\n marginLeft: \".5rem\",\n },\n },\n sharIcon: {\n marginLeft: \".5rem\",\n\n \"@media only screen and (max-width: 575px)\": {\n marginLeft: \"0\",\n },\n },\n VisiIconContainer: {\n marginRight: \"1rem\",\n \"@media only screen and (max-width: 575px)\": {\n marginRight: \"8px\",\n },\n },\n msgIconContainer: {\n marginLeft: \".5rem\",\n marginRight: \"1rem\",\n \"@media only screen and (max-width: 575px)\": {\n marginRight: \"8px\",\n marginLeft: \"0\",\n },\n },\n tags: {\n marginLeft: \"1rem\",\n },\n});\n\nconst AppDetailsHeader = ({ data }) => {\n const classes = useStyles({\n bgColor: appBg[data?.content?.category],\n });\n const dispatch = useDispatch();\n const [appStats, setAppStats] = useState(false);\n const [aggregatedAppStats, setAggregatedAppStats] = useState(false);\n\n useEffect(() => {\n if (data) {\n fetchMyAppStats();\n fetchAggregatedAppStats();\n // onload get apps stats data and load in store\n //dispatch(getAppStatsAction(data.id));\n }\n }, [data]);\n\n // View|access|likes|fav\n const fetchMyAppStats = async () => {\n const result = await getAppStats(data.id);\n setAppStats(result);\n };\n\n // View|access|likes|fav\n const fetchAggregatedAppStats = async () => {\n const result = await getAggregatedAppStatsByAppId(data.id);\n setAggregatedAppStats(result);\n };\n\n const appStatsAction = async (eventType) => {\n // EVENT_APP_FAVORITE, EVENT_APP_FAVORITE_REMOVED\n await dispatch(setAppStatsAction(eventType, data.id));\n };\n\n // useEffect(() => {\n // if (data) {\n // // onload get apps stats data and load in store\n // //dispatch(getAppStatsAction(data.id));\n // setAppStats(getAppStats(data.id));\n // }\n // }, [data,appStats]);\n\n return (\n <Box\n className={classes.AppHeaderContainer}\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n >\n <Box className={classes.box1}>\n <Box display=\"flex\" alignItems=\"center\">\n <Box\n display=\"flex\"\n alignItems=\"center\"\n className={classes.VisiIconContainer}\n >\n <VisibilityIcon />\n <Typography>{aggregatedAppStats[0]}</Typography>\n </Box>\n <Box\n display=\"flex\"\n alignItems=\"center\"\n className={classes.VisiIconContainer}\n >\n <OpenInNew />\n <Typography>{aggregatedAppStats[1]}</Typography>\n </Box>\n <Box display=\"flex\" alignItems=\"center\">\n {/* <ThumbUpAltIcon/> */}\n {parseInt(appStats?.content?.liked) === parseInt(1) ? (\n <ThumbUpSharp\n fontSize=\"small\"\n className={classes.StarIcon}\n onClick={() => appStatsAction(EVENT_APP_LIKED_REMOVED)}\n />\n ) : (\n <ThumbUpAltOutlinedIcon\n className={classes.StarIcon}\n onClick={() => appStatsAction(EVENT_APP_LIKED)}\n />\n )}\n <Typography>{aggregatedAppStats[2]}</Typography>\n </Box>\n <Box\n display=\"flex\"\n alignItems=\"center\"\n mr=\"0.5rem\"\n className={classes.favrIcon}\n >\n {/* <FavoriteOutlinedIcon/> */}\n {parseInt(appStats?.content?.favorite) === parseInt(1) ? (\n <FavoriteOutlined\n className={classes.HeartIcon}\n onClick={() => appStatsAction(EVENT_APP_FAVORITE_REMOVED)}\n />\n ) : (\n <FavoriteBorder\n className={classes.addFav}\n onClick={() => appStatsAction(EVENT_APP_FAVORITE)}\n />\n )}\n <Typography>{aggregatedAppStats[3]}</Typography>\n </Box>\n\n <Box\n display=\"flex\"\n alignItems=\"center\"\n className={classes.msgIconContainer}\n >\n <MsgIcon className={classes.MsgIcon} />\n <Typography>1.3k</Typography>\n </Box>\n\n <Box className={classes.sharIcon}>\n <IconButton aria-label=\"Share Button\" color=\"inherit\" size=\"small\">\n <Share className={classes.ShareIcon} color=\"inherit\" />\n </IconButton>\n </Box>\n </Box>\n\n <Box marginTop=\"10px\">\n <Box display=\"flex\" alignItems=\"center\">\n <Typography component=\"h1\" className={classes.h1}>\n {data && data.content.appname}\n </Typography>\n <Button size=\"small\" className={classes.programBtn}>\n {data?.content?.appStatus} | {data?.version}\n </Button>\n </Box>\n\n {data?.content?.appUrl && (\n <a\n href={data?.content?.appUrl}\n target=\"_blank\"\n rel=\"noreferrer noopener\"\n >\n <Box mt=\"1rem\" display=\"flex\" alignItems=\"center\">\n <Box mr=\"0.25rem\">{data?.content?.appUrl}</Box>\n\n <OpenInNew fontSize=\"small\" />\n </Box>\n </a>\n )}\n\n <Box display=\"flex\" mt=\"1rem\" alignItems=\"center\">\n <Button size=\"small\" className={classes.programBtn}>\n {data && data.content.category}\n </Button>\n\n <Typography className={classes.tags}>\n {data?.content?.tags?.map((i) => `#${i}`).join(\" \")}\n </Typography>\n </Box>\n </Box>\n </Box>\n <img\n src={\n (data?.content?.skappLogo?.thumbnail &&\n transformImageUrl(data?.content?.skappLogo?.thumbnail)) ||\n cubsImg\n }\n width=\"180px\"\n alt=\"igm\"\n />\n </Box>\n );\n};\n\nconst appBg = {\n Social: \"rgb(29, 191, 115)\",\n Video: \"lightgray\",\n Pictures: \"gray\",\n Music: \"#8ad4c5\",\n Productivity: \"#cf4cac\",\n Utilities: \"#cf4cac\",\n Games: \"#cf4cac\",\n Blogs: \"#cf4cac\",\n Software: \"#cf4cac\",\n DAC: \"#cf4cac\",\n Livestream: \"#cf4cac\",\n Books: \"#cf4cac\",\n Marketplace: \"#cf4cac\",\n Finance: \"#cf4cac\",\n SkynetPortal: \"#cf4cac\",\n Portal: \"#cf4cac\",\n};\n\nexport default AppDetailsHeader;\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/utils/SnNewObject.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnUploadListAction.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/service/SnFormikUtilService.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Utils/SnFormikControlls.js",["942","943","944","945","946","947","948","949"],"import React from 'react';\nimport { Formik, Form, useField, useFormikContext } from 'formik';\nimport Select from 'react-select';\nimport TagsInput from \"react-tagsinput\";\nimport '../SubmitApp/taginput.css';\nimport { TextareaAutosize, InputBase, Box, Switch } from '@material-ui/core';\nimport { fade, makeStyles } from \"@material-ui/core/styles\";\n\nconst useStyles = makeStyles((theme) => ({\n search: {\n position: \"relative\",\n borderRadius: theme.shape.borderRadius,\n backgroundColor: fade(\"#fff\", 1),\n \"&:hover\": {\n backgroundColor: fade(\"#fff\", 0.9),\n },\n marginRight: theme.spacing(2),\n // marginLeft: 0,\n width: \"100%\",\n [theme.breakpoints.up(\"sm\")]: {\n marginLeft: theme.spacing(3),\n width: \"auto\",\n },\n // color: \"#8B9DA5\",\n boxShadow: \"0px 1px 2px #15223214\",\n // border: \"1px solid #7070701A;\",\n border: \"1px solid rgba(0, 0, 0, 0.8);\",\n // hieght: '41px',\n marginLeft: \"16px!important\",\n \"@media (max-width: 1650px)\": {\n width: \"auto\",\n },\n },\n searchIcon: {\n padding: theme.spacing(0, 2),\n height: \"100%\",\n position: \"absolute\",\n pointerEvents: \"none\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n // color: \"#B4C6CC\",\n },\n inputRoot: {\n color: \"inherit\",\n width: '100%',\n },\n \n lightInputInput: {\n color: '#2A2C34',\n background: '#fff',\n border: '1px solid rgba(0, 0, 0, 0.2)',\n // padding: theme.spacing(1, 1, 1, 0),\n paddingLeft: `calc(1em + ${theme.spacing(4)}px)`,\n transition: theme.transitions.create(\"width\"),\n width: \"100%\",\n [theme.breakpoints.up(\"md\")]: {\n width: \"100%\",\n },\n [theme.breakpoints.up(\"lg\")]: {\n width: \"100%\",\n },\n paddingTop: \"10px\",\n paddingBottom: \"10px\",\n \"@media (max-width: 1660px)\": {\n width: \"100%\",\n },\n \"@media (max-width: 1460px)\": {\n width: \"100%\",\n },\n },\n darkInputInput: {\n color: '#fff',\n background: '#2A2C34',\n // padding: theme.spacing(1, 1, 1, 0),\n paddingLeft: `calc(1em + ${theme.spacing(4)}px)`,\n transition: theme.transitions.create(\"width\"),\n width: \"100%\",\n [theme.breakpoints.up(\"md\")]: {\n width: \"100%\",\n },\n [theme.breakpoints.up(\"lg\")]: {\n width: \"100%\",\n },\n paddingTop: \"10px\",\n paddingBottom: \"10px\",\n \"@media (max-width: 1660px)\": {\n width: \"100%\",\n },\n \"@media (max-width: 1460px)\": {\n width: \"100%\",\n },\n },\n\n pageHeading: {\n color: \"#131523\",\n fontSize: \"28px\",\n },\n smallText: {\n alignSelf: \"flex-end\",\n color: \"#5A607F\",\n paddingLeft: \"1rem\",\n fontWeight: \"400\",\n },\n Media1249: {\n // width: \"calc(100% - 230px)\",\n marginLeft: \"auto!important\",\n marginRight: 0,\n \"@media only screen and (max-width: 890px)\": {\n width: \"100%\",\n },\n },\n margnBottomMediaQuery: {\n /* '& .MuiSvgIcon-root': {\n background: '#fff',\n }, */\n \"@media only screen and (max-width: 1249px)\": {\n marginBottom: \".75rem\",\n },\n },\n // PerfectScrollbarContainer: {\n // padding: '1rem 1.4rem',\n // paddingBottom: '0',\n // height: 'calc(100vh - 64px)',\n // '@media only screen and (max-width: 575px)': {\n // padding: '.5rem',\n // },\n // },\n // mobileSave: {\n // padding: '1rem 1.4rem',\n // paddingBottom: '0',\n // height: 'calc(100vh - 64px)',\n // overflow: \"auto\",\n // '@media only screen and (max-width: 575px)': {\n // padding: '.5rem',\n // },\n // },\n secondNavRow2: {\n \"@media only screen and (max-width: 890px)\": {\n justifyContent: \"space-between\",\n },\n \"@media only screen and (max-width: 575px) and (min-width: 509px)\": {\n marginBottom: \".6rem\",\n },\n \"@media only screen and (max-width: 510px)\": {\n flexWrap: \"wrap\",\n \"& > div\": {\n width: \"50%\",\n minWidth: \"50%\",\n maxWidth: \"50%\",\n marginBottom: \".75rem\",\n },\n \"& > div:nth-child(odd)\": {\n paddingRight: \"1rem\",\n },\n },\n },\n MobileFontStyle: {\n \"@media only screen and (max-width: 575px) \": {\n marginBottom: \".7rem\",\n marginTop: \".4rem\",\n \"& h1\": {\n fontSize: \"18px\",\n },\n },\n },\n}))\n\nconst darkText = {\n color: '#8B9DA5',\n}\n\nconst darkInput = {\n color: '#fff',\n backgroundColor: fade('#2A2C34', 1),\n border: '1px solid #48494E'\n}\n\nexport const SnTextInput = ({ toggle, label, className, showError, ...props }) => {\n const [field, meta] = useField(props);\n const { submitCount } = useFormikContext();\n return (\n <>\n <label style={toggle ? darkText : {}} htmlFor={props.id || props.name}>{label}</label>\n <input style={toggle ? darkInput : {}} className={className} {...field} {...props} />\n {(showError ?? true) && submitCount>0 && meta.error ? (\n <div className=\"required-field\">{meta.error}</div>\n ) : null}\n </>\n );\n};\n\n\nexport const SnSwitch = ({ label, className, showError, ...props }) => {\n const [field, meta] = useField(props);\n const { submitCount } = useFormikContext();\n return (\n <>\n <label htmlFor={props.id || props.name}>{label}</label>\n <Switch defaultChecked={field.value} {...field} {...props} />\n {(showError ?? true) && submitCount>0 && meta.error ? (\n <div className=\"required-field\">{meta.error}</div>\n ) : null}\n </>\n );\n};\n\nexport const SnTextArea = ({ label, className, showError, ...props }) => {\n const [field, meta] = useField(props);\n const { submitCount } = useFormikContext();\n return (\n <>\n <label htmlFor={props.id || props.name}>{label}</label>\n <TextareaAutosize\n {...field} {...props}\n className={className}\n rowsMin={4}\n />\n {(showError ?? true) && submitCount>0 && meta.error ? (\n <div className=\"required-field\">{meta.error}</div>\n ) : null}\n </>\n );\n};\n\nexport const SnInputWithIcon = ({ icon, label, className, showError, toggle, ...props }) => {\n const [field, meta] = useField(props);\n const { submitCount } = useFormikContext();\n const classes = useStyles();\n \n return (\n <>\n <label htmlFor={props.id || props.name}>{label}</label>\n <div className={`${classes.search} ${classes.Media1249} ${classes.margnBottomMediaQuery}`}>\n <Box>\n <div className={classes.searchIcon}>\n {icon}\n </div>\n </Box>\n <InputBase\n {...field} {...props}\n classes={{\n root: classes.inputRoot,\n input: toggle ? classes.darkInputInput : classes.lightInputInput,\n }}\n inputProps={{ \"aria-label\": \"search\" }}\n />\n </div>\n {(showError ?? true) && submitCount>0 && meta.error ? (\n <div className=\"required-field\">{meta.error}</div>\n ) : null}\n </>\n );\n};\n \nexport const SnTextInputTag = ({ label, className, showError, ...props }) => {\n const [field, meta, helpers] = useField(props);\n const { touched, error, value } = meta;\n const { setValue } = helpers;\n const { submitCount } = useFormikContext();\n\n return (\n <>\n <label htmlFor={props.id || props.name}>{label}</label>\n <TagsInput\n {...field} {...props}\n onChange={(tags) => setValue(tags)}\n instanceId={props.iid}\n className={className}\n />\n {(showError ?? true) && submitCount>0 && meta.error ? (\n <div className=\"required-field\">{meta.error}</div>\n ) : null}\n </> \n );\n};\n\nconst lightReactSelectStyles = {\n control: styles => ({\n ...styles, \n backgroundColor: 'white', \n height: 55, \n boxShadow: 0, \n borderColor: '#D9E1EC',\n borderRadius: 8,\n '@media only screen and (max-width: 1440px)': {\n height: 50,\n // width: '100%',\n fontSize: 16,\n background: '#fff',\n borderColor: '#D9E1EC'\n },\n '@media only screen and (max-width: 575px)': {\n height: 43,\n // width: '100%',\n fontSize: 14,\n background: '#fff',\n borderColor: '#D9E1EC'\n },\n '&:hover': {\n borderColor: '#1DBF73'\n }\n }),\n option: (styles, { data, isDisabled, isFocused, isSelected }) => ({\n ...styles, backgroundColor: isSelected ? '#1DBF73' : '#fff',\n '&:foucs': {\n backgroundColor: '#1DBF73'\n }\n }),\n};\n\nconst darkReactSelectStyles = {\n control: styles => ({\n ...styles, \n height: 55, \n boxShadow: 0,\n borderColor: \"#48494E\",\n color: \"#fff!important\",\n borderRadius: 8,\n '@media only screen and (min-width: 300px)': {\n height: 50,\n // width: '100%',\n fontSize: 16,\n background: '#1E2029',\n borderColor: 'rgba(255, 255, 255, 0.1)',\n color: \"#fff!important\",\n },\n '@media only screen and (max-width: 1440px)': {\n height: 50,\n // width: '100%',\n fontSize: 16,\n background: '#1E2029!important',\n // borderColor: '#48494E',\n borderColor: 'rgba(255, 255, 255, 0.1)',\n color: \"#fff!important\",\n },\n '@media only screen and (max-width: 575px)': {\n height: 43,\n // width: '100%',\n fontSize: 14,\n background: '#1E2029!important',\n borderColor: 'rgba(255, 255, 255, 0.1)',\n color: \"#fff!important\",\n },\n '&:hover': {\n borderColor: '#1DBF73'\n }\n }),\n option: (styles, { data, isDisabled, isFocused, isSelected }) => ({\n ...styles, backgroundColor: isSelected ? '#1DBF73' : '#2A2C34',\n color: '#fff',\n '&:foucs': {\n backgroundColor: '#1DBF73',\n }\n }),\n};\n\nexport const SnSelect1 = ({ label, className, showError, options, toggle, ...props }) => {\n const [field, meta] = useField(props);\n return (\n <>\n <label htmlFor={props.id || props.name}>{label}</label>\n <>\n <Select {...field} {...props}\n options={options}\n styles={toggle ? darkReactSelectStyles : lightReactSelectStyles}\n />\n </> \n {(showError ?? true) && meta.error ? (\n <div className=\"required-field\">{meta.error}</div>\n ) : <></>}\n </>\n );\n};\n\nexport const SnSelect = ({ label, className, showError, options, toggle, ...props }) => {\n const [field, meta, helpers] = useField(props);\n const { touched, error, value } = meta;\n const { setValue } = helpers;\n const { submitCount } = useFormikContext();\n return (\n\n <div>\n <Select\n value={{ label: field.value, value: field.value } }\n options={options}\n name={field.name}\n onChange={(option) => setValue(option.value)}\n instanceId={props.iid}\n styles={toggle ? darkReactSelectStyles : lightReactSelectStyles}\n />\n\n {(showError ?? true) && submitCount>0 && meta.error ? (\n <div className=\"required-field\">{meta.error}</div>\n ) : <></>}\n </div>\n );\n};\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Modals/SnInfoModal.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/uploadUtil/SnUpload.js",["950","951","952","953","954","955","956","957","958","959","960"],"import React, { useState, useEffect, useImperativeHandle, useRef } from \"react\";\nimport { BsFileEarmarkArrowUp } from \"react-icons/bs\";\nimport HttpStatus from \"http-status-codes\";\nimport bytes from \"bytes\";\nimport Grid from \"@material-ui/core/Grid\";\nimport Switch from \"@material-ui/core/Switch\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport classNames from \"classnames\";\nimport { setUploadList } from \"../redux/action-reducers-epic/SnUploadListAction\";\nimport imageCompression from \"browser-image-compression\";\nimport path from \"path-browserify\";\nimport Snackbar from \"@material-ui/core/Snackbar\";\nimport { useDropzone } from \"react-dropzone\";\nimport { getCompressedImageFile, generateThumbnailFromVideo, skylinkToUrl, hashFromSkylinkUploadResponse } from \"../utils/SnUtility\";\n// import \"./sn.upload.scss\";\nimport MuiAlert from \"@material-ui/lab/Alert\";\nimport CloudUploadOutlinedIcon from \"@material-ui/icons/CloudUploadOutlined\";\nimport { SkynetClient, parseSkylink } from \"skynet-js\";\nimport UploadFile from \"./UploadFile\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {getPortalUrl} from '../service/skynet-api'\n\nfunction Alert(props) {\n return <MuiAlert elevation={6} variant=\"filled\" {...props} />;\n}\n\nconst SnUpload = React.forwardRef((props, ref) => {\n const dispatch = useDispatch();\n\n const [files, setFiles] = useState([]);\n const [uploadErr, setUploadErr] = useState(false);\n const [isDir, setIsDir] = useState(false);\n const snUploadListStore = useSelector((state) => state.snUploadListStore);\n const apiUrl = props.portal != null ? props.portal : getPortalUrl();\n const gridRef = useRef();\n const client = new SkynetClient(apiUrl);\n\n const setFileToStore = ()=>{\n if (props.source) {\n snUploadListStore[props.source] = files;\n dispatch(setUploadList(snUploadListStore));\n }\n }\n\n useEffect(() => {\n setFileToStore();\n props.onUploadProgress && props.onUploadProgress(files);\n }, [files]);\n\n useEffect(() => {\n if (props.directoryMode || isDir) {\n inputRef.current.setAttribute(\"webkitdirectory\", \"true\");\n } else {\n inputRef.current.removeAttribute(\"webkitdirectory\");\n }\n }, [props.directoryMode, isDir]);\n\n const videoToImg = async (video) => {\n let canvas = document.createElement(\"canvas\");\n let w = video.videoWidth;\n let h = video.videoHeight;\n canvas.width = w;\n canvas.height = h;\n let ctx = canvas.getContext(\"2d\");\n ctx.drawImage(video, 0, 0, w, h);\n let file = await imageCompression.canvasToFile(canvas, \"image/jpeg\");\n return file;\n };\n\n const getFilePath = (file) =>\n file.webkitRelativePath || file.path || file.name;\n\n const getRelativeFilePath = (file) => {\n const filePath = getFilePath(file);\n const { root, dir, base } = path.parse(filePath);\n const relative = path\n .normalize(dir)\n .slice(root.length)\n .split(path.sep)\n .slice(1);\n\n return path.join(...relative, base);\n };\n\n const getRootDirectory = (file) => {\n const filePath = getFilePath(file);\n const { root, dir } = path.parse(filePath);\n\n return path.normalize(dir).slice(root.length).split(path.sep)[0];\n };\n\n\n const createUploadErrorMessage = (error) => {\n // The request was made and the server responded with a status code that falls out of the range of 2xx\n if (error.response) {\n if (error.response.data.message) {\n return `Upload failed with error: ${error.response.data.message}`;\n }\n\n const statusCode = error.response.status;\n const statusText = HttpStatus.getStatusText(error.response.status);\n\n return `Upload failed, our server received your request but failed with status code: ${statusCode} ${statusText}`;\n }\n\n // The request was made but no response was received. The best we can do is detect whether browser is online.\n // This will be triggered mostly if the server is offline or misconfigured and doesn't respond to valid request.\n if (error.request) {\n if (!navigator.onLine) {\n return \"You are offline, please connect to the internet and try again\";\n }\n\n // TODO: We should add a note \"our team has been notified\" and have some kind of notification with this error.\n return \"Server failed to respond to your request, please try again later.\";\n }\n\n // TODO: We should add a note \"our team has been notified\" and have some kind of notification with this error.\n return `Critical error, please refresh the application and try again. ${error.message}`;\n };\n\n const handleDrop = async (acceptedFiles) => {\n // if (props.uploadStarted) {\n props.uploadStarted && props.uploadStarted(true);\n // }\n if ((props.directoryMode || isDir) && acceptedFiles.length) {\n const rootDir = getRootDirectory(acceptedFiles[0]); // get the file path from the first file\n\n acceptedFiles = [\n { name: rootDir, directory: true, files: acceptedFiles },\n ];\n }\n\n setFiles((previousFiles) => [\n ...acceptedFiles.map((file) => ({ file, status: \"uploading\" })),\n ...previousFiles,\n ]);\n\n const onFileStateChange = (file, state) => {\n setFiles((previousFiles) => {\n const index = previousFiles.findIndex((f) => f.file === file);\n return [\n ...previousFiles.slice(0, index),\n {\n ...previousFiles[index],\n ...state,\n },\n ...previousFiles.slice(index + 1),\n ];\n });\n };\n\n await acceptedFiles.reduce(async (memo, file) => {\n await memo;\n // Reject files larger than our hard limit of 1 GB with proper message\n if (file.size > bytes(\"1 GB\")) {\n onFileStateChange(file, {\n status: \"error\",\n error: \"This file size exceeds the maximum allowed size of 1 GB.\",\n });\n\n return;\n }\n props.onUploadStart && props.onUploadStart();\n const fileType = file.type;\n let resForCompressed;\n if (fileType && fileType.startsWith(\"image\")) {\n const compressedFile = await getCompressedImageFile(file);\n resForCompressed = await client.uploadFile(compressedFile);\n }\n if (fileType && fileType.startsWith(\"video\")) {\n const videoThumbnail = await generateThumbnailFromVideo({ file });\n resForCompressed = await client.uploadFile(videoThumbnail);\n }\n const onUploadProgress = (progress) => {\n const status = progress === 1 ? \"processing\" : \"uploading\";\n onFileStateChange(file, { status, progress });\n };\n\n const upload = async () => {\n try {\n let response;\n if (file.directory) {\n\n const directory = file.files.reduce((accumulator, file) => {\n const path = getRelativeFilePath(file);\n \n return { ...accumulator, [path]: file };\n }, {});\n\n response = await client.uploadDirectory(\n directory,\n getRootDirectory(file.files[0]),\n { onUploadProgress }\n );\n } else {\n response = await client.uploadFile(file, { onUploadProgress });\n }\n await props.onUpload({\n skylink: hashFromSkylinkUploadResponse(response),\n name: file.name,\n contentType: fileType,\n thumbnail:\n resForCompressed != null ? hashFromSkylinkUploadResponse(resForCompressed) : null,\n contentLength: file.size,\n });\n onFileStateChange(file, {\n status: \"complete\",\n url: await client.getSkylinkUrl(hashFromSkylinkUploadResponse(response)),\n });\n props.onUploadEnd && props.onUploadEnd();\n //send event to parent\n } catch (error) {\n props.uploadStarted && props.uploadStarted(true);\n \n if (\n error.response &&\n error.response.status === HttpStatus.TOO_MANY_REQUESTS\n ) {\n onFileStateChange(file, { progress: -1 });\n\n return new Promise((resolve) =>\n setTimeout(() => resolve(upload()), 3000)\n );\n }\n onFileStateChange(file, {\n status: \"error\",\n error: createUploadErrorMessage(error),\n });\n setUploadErr(true);\n props.onUploadEnd && props.onUploadEnd();\n }\n };\n await upload();\n }, undefined);\n };\n\n useImperativeHandle(ref, () => ({\n\n handleDrop,\n gridRef\n\n }));\n\n const { getRootProps, getInputProps, isDragActive, inputRef } = useDropzone({\n onDrop: handleDrop,\n });\n\n return (\n <React.Fragment>\n <div className=\"\">\n {/* <div\n className={classNames(\"home-upload-dropzone\", {\n \"drop-active\": isDragActive,\n })}\n {...getRootProps()}\n ref={gridRef}\n > */}\n {/* <span className=\"home-upload-text\">\n <h3>\n <CloudUploadOutlinedIcon /> Upload your {(props.directoryMode || isDir) ? \"Directory\" : \"Files\"}\n </h3>\n </span> */}\n <div container spacing={3} className=\"drpZone_main_grid\"\n {...getRootProps()}\n ref={gridRef}>\n <Grid item xs={12} className=\"MuiDropzoneArea-root\" >\n <div style={{ paddingTop: \"20px\", paddingBottom: \"20px\" }}>\n <div>\n <BsFileEarmarkArrowUp\n style={{\n fontSize: \"55px\",\n color: \"#c5c5c5\",\n marginBottom: \"10px\",\n }}\n />\n </div>\n <span\n style={{\n fontSize: 14,\n fontWeight: \"bold\",\n color: \"#c5c5c5\",\n }}\n >\n Drop a {(props.directoryMode || isDir) ? \"directory\" : \"file\"} here or\n <span style={{ color: \"#1ed660\", marginLeft: \"3px\" }}>\n click here to upload\n </span>\n </span>\n </div>\n </Grid></div>\n {/* </div> */}\n <input id=\"idInp\" {...getInputProps()} className=\"offscreen\" />\n </div>\n {files.length > 0 && (\n <div className=\"home-uploaded-files d-none\">\n {files.map((file, i) => {\n return <UploadFile toggle={props.toggle} key={i} {...file} />;\n })}\n </div>\n )}\n <Snackbar\n open={uploadErr}\n autoHideDuration={4000}\n onClose={() => setUploadErr(false)}\n >\n <Alert onClose={() => setUploadErr(false)} severity=\"error\">\n Error on upload!\n </Alert>\n </Snackbar>\n </React.Fragment>\n );\n})\n\n\nexport default SnUpload;","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/AddNewSiteStyles.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/Switch.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/service/SnSkynet.js",["961","962","963","964","965","966","967","968","969","970","971","972","973","974","975","976","977","978","979","980","981","982","983","984","985"],"import { ajax } from \"rxjs/ajax\"\nimport { map, catchError } from \"rxjs/operators\"\nimport { getRelativeFilePath, getRootDirectory, parseSkylink, SkynetClient, genKeyPairFromSeed } from \"skynet-js\"\nimport { of } from \"rxjs\"\nimport prettyBytes from \"pretty-bytes\"\nimport {\n getJSONfromIDB,\n setJSONinIDB,\n IDB_STORE_SKAPP,\n IDB_STORE_SKYDB_CACHE,\n} from \"./SnIndexedDB\"\nimport { encryptData, decryptData } from \"./SnEncryption\"\nimport { getPortalUrl } from './skynet-api';\n/* global BigInt */\n//above comment is required to enable BigInt\n// ################################ SkyDB Methods ######################\n\n// pick skynet portal\nconst skynetClient = new SkynetClient(\"https://siasky.net\");\n//const skynetClient = new SkynetClient();\nlet REGISTRY_MAX_REVISION = BigInt(\"18446744073709551615\");\n// \"Options\"\n// skydb = true | false | undefined. Fetch from IndexedDB first and then SkyDB\n// publicKey = null | \"PubKey Value\". If it has PubKey value, that means we need to fetch data of another user. \n// encrypt = true|false\n// decrypt = true|false\n// contentOnly = true|false // If true will return onlu content from SkyDB (not revision number)\n// store = IDB_STORE_SKAPP | IDB_STORE_SKYDB_CACHE , IDB_STORE_SKAPP = loggedin users Key/value. IDB_STORE_SKYDB_CACHE = otehr users key/Value\n// export function getSkappKeys() {\n// return {\n// publicKey: \"01846241b88a741741445d982eff80092b105795349fa071715f451e9101ca4a\",\n// privateKey: \"b1d00ff5070ad41ee67b518cc1220caeac0da5e0e2f276cc65a0a9c9549f867b01846241b88a741741445d982eff80092b105795349fa071715f451e9101ca4a\"\n// };\n// }\n\nexport function getProviderKeysByType(keyType) {\n let keys = { privateKey: null, publicKey: null };\n switch (keyType) {\n case \"GEQ\":\n keys = {\n publicKey:\"c570f61ef7482622addcdd6cfe1c00a3b08a31d7fa9ba172515cace63570042a\",\n privateKey: \"57dde68330fbcf3799964d8af7dc78229856d6038e83efdf547a937f8e14c0e4c570f61ef7482622addcdd6cfe1c00a3b08a31d7fa9ba172515cace63570042a\"\n };\n break;\n case \"AGGREGATOR\":\n keys = {\n publicKey: \"96682842f92cb14f257e023e812178ca4304bf963c3758929966746154f59539\"\n };\n break;\n default:\n console.log(\"In Dafault loop: \" + keyType)\n break;\n }\n return keys;\n}\n\nexport const getFile_SkyDB = async (publicKey, dataKey, options) => {\n return await skynetClient.db.getJSON(publicKey, dataKey);\n}\nexport const putFile_SkyDB = async (publicKey, dataKey, content, options) => {\n return await skynetClient.db.setJSON(options.privateKey, dataKey, content)\n}\n// gets JSON file from SkyDB\nexport const getFile = async (publicKey, dataKey, options) => {\n // Get User Public Key\n if (publicKey == null && options?.publicKey == null) {\n throw new Error(\"Invalid Keys\")\n }\n try {\n // Fetch from local First and then SkyDB\n if (options?.skydb === undefined || options?.skydb === false) {\n // Below condition means, we are fetching other user's data\n if (options?.publicKey) {\n let tempKey = options.publicKey + \"#\" + dataKey\n // Fetch value for key - [PubKey#DataKey] from IndexedDB\n let result = await getJSONfromIDB(tempKey, { store: IDB_STORE_SKYDB_CACHE })\n // get revision number using dataKey - getEntry method\n let registryEntry = await getRegistryEntry(options.publicKey, dataKey)\n const skyDBRevisionNo =\n registryEntry && registryEntry != \"undefined\"\n ? registryEntry.revision\n : 0\n //check if [PubKey#DataKey ] exist in skydb_cache and revision numbers are same.\n if (\n result &&\n result.length === 2 &&\n parseInt(result[0]) === parseInt(skyDBRevisionNo)\n ) {\n //if revision numbers are same, return Skylink content from IndexedDB\n return result[1]\n } else {\n // If revision numbers are different, return Skylink content from SkyDB/Skynet\n // Fetch content fromSkynet\n const { data, contentType, metadata, skylink } = await skynetClient.getFileContent(registryEntry.data);\n //setcontent in IndexedDB - \"SkyDB Cache\"\n await setJSONinIDB(tempKey, [skyDBRevisionNo, data], {\n store: IDB_STORE_SKYDB_CACHE,\n })\n // TODO: decrypt method\n return data\n }\n } else { // ### Loggedin User - Fetch request ###\n //step1: check if [DataKey] exist in app_metadata\n //step2: if Found, fetch content\n //step3: get revision number using dataKey - getEntry method\n //step4: if both revision numbers are same return value obtained in step#2\n //Step3: if both values are different OR dataKey does NOT exist in skydb_cache, fetch content using SkyDB method getJSON\n //Step4: Update, \"IDB_STORE_SKAPP\"\n //Step5: return;\n // Fetch value for [DataKey] from IndexedDB\n let result = await getJSONfromIDB(dataKey, { store: IDB_STORE_SKAPP })// TODO: need to fix IDB store. we cant hardcode store value. must take from options\n // get revision number using dataKey - getEntry method\n let registryEntry = await getRegistryEntry(publicKey, dataKey)\n const skyDBRevisionNo =\n registryEntry && registryEntry != \"undefined\"\n ? registryEntry.revision\n : 0\n //check if [PubKey#DataKey ] exist in skydb_cache and revision numbers are same.\n if (\n result &&\n result.length > 0 &&\n parseInt(result[0]) === parseInt(skyDBRevisionNo)\n ) {\n //if revision numbers are same, return Skylink content from IndexedDB\n return result[1]\n } else {\n // If revision numbers are different, return Skylink content from SkyDB/Skynet\n // Fetch content fromSkynet\n //let content = getSkylinkContent(registryEntry.data)\n const { data, contentType, metadata, skylink } = await skynetClient.getFileContent(registryEntry.data);\n // TODO: convert array to JSOn object\n // Example:\n // {\n // data: {\n // example: \"This is some example JSON data.\"\n // },\n // revision: 11\n // }\n await setJSONinIDB(dataKey, [skyDBRevisionNo, data], {\n store: IDB_STORE_SKAPP,\n }) // TODO: need to fix IDB store. we cant hardcode store value. must take from options\n // TODO: decrypt method\n return data\n }\n }\n } else { //If we need to fetch directly from SkyDB\n let result = null;\n let entryObj = null;\n // Below condition means, we are fetching other user's data\n if (options?.publicKey) {\n let tempKey = options.publicKey + \"#\" + dataKey\n // fetch content from SkyDB\n entryObj = await getContent(options?.publicKey, dataKey, { ...options, contentOnly: false });\n // update IndexedDB cache\n await setJSONinIDB(tempKey, result, { store: IDB_STORE_SKYDB_CACHE, })\n }\n else {\n // fetching loggedin users data from SkyDB\n entryObj = await getContent(publicKey, dataKey, { ...options, contentOnly: false });\n // update IndexedDB cache\n await setJSONinIDB(dataKey, entryObj, { store: IDB_STORE_SKAPP, })\n }\n // Return data\n return entryObj?.data;\n }\n } catch (error) {\n // setErrorMessage(error.message);\n console.log(`error.message ${error.message}`)\n return null\n }\n}\n\nexport const getContent = async (publicKey, dataKey, options) => {\n //TODO - get privateKey from localstorage\n const privateKey = \"\";\n try {\n // Get User Public Key\n if (publicKey == null) {\n throw new Error(\"Invalid Keys\")\n }\n let registryEntry = await getRegistryEntry(publicKey, dataKey)\n //var { data, revision } =await skynetClient.db.getJSON(publicKey, 'profile'); \n const { data, contentType, metadata, skylink } = await skynetClient.getFileContent(registryEntry.data);\n //const entryObj = await skynetClient.db.getJSON(publicKey, dataKey)\n const entryObj = { revision: registryEntry.revision, data }\n if (entryObj) {\n if (options.contentOnly) {\n // decrypt it\n if (privateKey && options?.decrypt == true) {\n // decrypt it\n const fileData = await decryptData(privateKey, publicKey, entryObj.data)\n // return data;\n return fileData\n }\n return entryObj.data\n }\n else {\n // return results;\n return entryObj\n }\n }\n else {\n return null;\n }\n }\n catch (error) {\n console.log(`error.message ${error.message}`)\n return null\n }\n}\n\n// sets JSON file in SkyDB\nexport const putFile = async (publicKey, dataKey, content, options) => {\n // fetch private key from localstorage\n const privateKey = options.privateKey;\n try {\n // get previous skylink \n // create linked list to track history\n if (options.historyflag == true) {\n const registryEntry = await getRegistryEntry(publicKey, dataKey)\n //const revision = (registryEntry ? registryEntry.revision : 0) + 1\n const skylink = registryEntry ? registryEntry.data : null\n content.prevSkylink = skylink\n }\n // set new data in SkyDB with\n let status = false\n // encrypt it\n if (options?.encrypt == true) {\n const cypherContent = await encryptData(privateKey, publicKey, JSON.stringify(content))\n status = await skynetClient.db.setJSON(privateKey, dataKey, cypherContent)\n } else {\n status = await skynetClient.db.setJSON(privateKey, dataKey, content)\n }\n await setJSONinIDB(dataKey, content, { store: IDB_STORE_SKAPP })\n return true\n } catch (error) {\n // setErrorMessage(error.message);\n console.log(`error.message ${error.message}`)\n return false\n }\n}\nexport const getRegistryEntry = async (publicKey, dataKey, options) => {\n try {\n // Get User Public Key\n if (publicKey == null) {\n throw new Error(\"Invalid Keys\")\n }\n const { entry, signature } = await skynetClient.registry.getEntry(publicKey, dataKey)\n return entry\n } catch (error) {\n // setErrorMessage(error.message);\n console.log(`error.message ${error.message}`)\n return null\n }\n return null\n}\n\nexport const setRegistryEntry = async (dataKey, content, options) => {\n let revision = 0;\n try {\n // fetch private key from localstorage\n const privateKey = options.privateKey ?? getProviderKeysByType(\"AGGREGATOR\").privateKey;\n const publicKey = options.publicKey ?? getProviderKeysByType(\"AGGREGATOR\").publicKey;\n if (options?.maxRevisionFlag) {\n revision = REGISTRY_MAX_REVISION;\n }\n else {\n let entry = await getRegistryEntry(publicKey, dataKey, null)\n revision = entry && entry != \"undefined\" && entry?.revision != NaN && entry.revision != \"undefined\" ? entry.revision : 0\n revision++;\n }\n let entry = { dataKey: dataKey, data: content + \"\", revision: BigInt(revision) };\n let value = await skynetClient.registry.setEntry(privateKey, entry);\n if (options.skipIDB && options.skipIDB != true) {\n await setJSONinIDB(dataKey, [BigInt(revision), content], options)\n }\n return { resultFlag: true, revision }\n } catch (error) {\n // setErrorMessage(error.message);\n console.log(`error.message ${error.message}`)\n return { resultFlag: false, revision }\n }\n}\n\nexport async function getRegistryEntryURL(publicKey, dataKey) {\n try {\n const url = await skynetClient.registry.getEntryUrl(publicKey, dataKey);\n return url;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n\n// ################################ Skylink Methods ######################\n// gets Skylink Content.\n// TODO : ahandling for Folder ?\n// client.downloadFile(skylink, { path: \"dir2/file3\" });\n// export const getSkylinkContent = async (skylink, options) => {\n\n// const skynetOptions = {\n// method: \"GET\",\n// headers: {\n// Accept: \"application/json\",\n// \"Content-Type\": \"application/json\",\n// },\n// }\n// const url = getPortal() + `${skylink}?format=concat`;\n// return fetch(url, options)\n// .then((res) => {\n// res.json()\n// })\n// .catch((err) => err);\n\n// // ajax({\n// // url: getPortal() + `${skylink}?format=concat`,\n// // method: \"GET\",\n// // responseType: \"\",\n// // }).pipe(\n// // map((res) => {\n// // return res\n// // }),\n// // catchError((error) => {\n// // console.log(\"getSkylinkHeader::error: \", error)\n// // return of(error)\n// // })\n// }\n\nexport const getSkylinkMetadata = async (skylink) => {\n try {\n const md = await skynetClient.getMetadata(skylink);\n return md;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n// TODO: below method can be removed once all functionality is implemented. From getSkylinkMetadata we shall get all data.\nexport const getSkylinkHeader = (skylink) => {\n //TODO: create URL from Skylink\n const skylinkUrl = getPortalUrl + skylink;\n try {\n ajax({\n url: `${skylinkUrl}?format=concat`,\n method: \"HEAD\",\n responseType: \"\",\n }).pipe(\n map((res) => {\n const headerMap = {}\n const contentType = res.xhr.getResponseHeader(\"content-type\")\n headerMap.contentType = contentType\n console.log(`contentType:${contentType}`)\n const contentLength = res.xhr.getResponseHeader(\"content-length\")\n headerMap.contentLength = contentLength\n ? prettyBytes(Number(contentLength))\n : \"\"\n console.log(`contentLength:${contentLength}`)\n const skynetFileMetadata = res.xhr.getResponseHeader(\"Skynet-File-Metadata\")\n headerMap.skynetFileMetadata = skynetFileMetadata\n // console.log(\"skynetFileMetadata:\"+skynetFileMetadata);\n // let headerParams = res.xhr.getAllResponseHeaders();\n // console.log(\"headerParams\"+headerParams);\n // console.log(\"headerMap: \"+headerMap);\n return headerMap\n }),\n catchError((error) => {\n console.log(\"getSkylinkHeader::error: \", error)\n return of(error)\n })\n )\n } catch (e) { }\n}\n\n// this method will upload content and return skylink\nexport const uploadFile = async (file) => {\n try {\n const md = await skynetClient.uploadFile(file);\n return md;\n } catch (error) {\n console.log(error);\n return null;\n }\n}\n\n// this method will upload content and return skylink\nexport const uploadDirectory = async (files) => {\n try {\n // Get the directory name from the list of files.\n // Can also be named manually, i.e. if you build the files yourself\n // instead of getting them from an input form.\n const filename = getRootDirectory(files[0]);\n\n // Use reduce to build the map of files indexed by filepaths\n // (relative from the directory).\n const directory = files.reduce((accumulator, file) => {\n const path = getRelativeFilePath(file);\n\n return { ...accumulator, [path]: file };\n }, {});\n\n const skylink = await skynetClient.uploadDirectory(directory, filename);\n } catch (error) {\n console.log(error);\n }\n}\nexport const snKeyPairFromSeed = (userSeed) => genKeyPairFromSeed(userSeed)\n// export const getPublicApps = async (hash) =>\n// await fetch(\n// `${document.location.origin.indexOf(\"localhost\") === -1\n// ? document.location.origin\n// : DEFAULT_PORTAL\n// }/${hash}`\n// ).then((res) => res.json())\n\n// export const getSkylinkPublicShareFile = (arrApps) => {\n// const strArrApps = JSON.stringify(arrApps)\n// return new File([strArrApps], `public${new Date()}.txt`, {\n// type: \"text/plain\",\n// lastModified: new Date(),\n// })\n// }\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/service/SnSkyMQEventEmitter.js",["986","987","988","989","990","991","992","993"],"import { getRegistryEntry, getProviderKeysByType, setRegistryEntry } from './SnSkynet'\nimport {getUserID, putFile_MySky, getFile_MySky} from './skynet-api'\n\n// \"Shared Global Event Queue\" is mechanism built on SkyDB for storing EVENTS emitted by all Skapp \n// users in Sequence. You can think of it as MessagingQueue. \n// If bad actor is identified, key will be automatically rotated. \n// Its experimental feature and may change over time.\n// It used SkyDB Registry entry with max revision number. \"Sequential Immutable registry\"\n// In case of anonymous users, we will not have publickey. anonymous#\n\nconst GEQ_CURSOR_DATA_KEY = \"cursorPosition\"\nconst GEQ_HEADER_DATA_KEY = \"0\"; // registry entry - [prevSeed,lastValidatedCursorPosition]\nconst ANONYMOUS = \"anonymous\";\n\n// Global EVENT QUEUE (GEQ) - user Events\n//PublicKey#AppID#EVENT_NAME OR anonymous#AppID#EVENT_NAME\n\n// PUSH \"User Action Event\" at ( Current Cursor Position + 1)\n// EVENT_PUBLISHED_APP = DK_PUBLISHED_APPS;\n// EVENT_APP_VIEWED = '1';\n// EVENT_APP_ACCESSED = '2';\n// EVENT_APP_LIKED = '3';\n// EVENT_APP_FAVORITE = '4';\n// EVENT_APP_COMMENT = '5';\n// This method can go in ServiceWorker\nexport const emitEvent = async (userID, appId, eventType) => {\n //DataKey -> PublicKey#AppID#EVENT_NAME OR anonymous#AppID#EVENT_NAME\n //let eventData = publicKey + \"#\" + appId + \"#\" + eventType;\n let eventData = userID + \"#\" + appId + \"#\" + eventType;\n let isSuccess = false;\n let isleqSuccess = false;\n //STEP1: Get Current Cursor Position of \"GEQ\"\n let cursorPositionOfGEQ = (await getCurrentCursorPosition()) ?? 0;\n let revision = 0;\n let coolDownCounter = 0;\n while (!isSuccess && !isleqSuccess) {\n cursorPositionOfGEQ++\n console.log(\"getCurrentCursorPosition(): eventData= \" + eventData + \" cursorPositionOfGEQ=\" + cursorPositionOfGEQ);\n //STEP2: ** MOST IMPORTANT STEP ** PUSH USER ACTION EVENT in \"GEQ\". Its important to set maxRevisionFlag = true\n let result = await setRegistryEntry((cursorPositionOfGEQ).toString(), eventData, { publicKey: getProviderKeysByType(\"GEQ\").publicKey, privateKey: getProviderKeysByType(\"GEQ\").privateKey, maxRevisionFlag: true, skipIDB: true });\n isSuccess = result?.resultFlag;\n revision = result?.revision;\n console.log(\"setRegistryEntry(): GEQ eventData= \" + eventData + \" revision=\" + revision + \" isSuccess=\" + isSuccess);\n if (isSuccess == true && userID != ANONYMOUS) {\n //STEP3: on GEQ PUSH success, PUSH USER ACTION EVENT in \"LEQ\". Its important to set maxRevisionFlag = true\n //(with DAC this STEP 3 is not required)\n // let leqResult = await setRegistryEntry((cursorPositionOfGEQ).toString(), eventData, { publicKey, privateKey, maxRevisionFlag: true, skipIDB: true });\n // isleqSuccess = leqResult?.resultFlag;\n // //let leqResult = await setRegistryEntry((cursorPositionOfGEQ).toString(), eventData, { publicKey, privateKey, maxRevisionFlag: true, skipIDB: true });\n let leqResult = await putFile_MySky((cursorPositionOfGEQ).toString(),{e : eventData});\n isleqSuccess = leqResult ? true : false ;\n console.log(\"setRegistryEntry(): LEQ : eventData= \" + eventData + \" revision=\" + revision + \" isleqSuccess=\" + isleqSuccess);\n\n } else {\n console.log(\"setRegistryEntry(): ** Skipping LEQ ** : ANONYMOUS eventData= \" + eventData);\n }\n coolDownCounter++;\n if (coolDownCounter >= 5) {\n break;\n console.log(\"emitEvent : Sleeping for 10 Seconds\");\n sleep(10000);\n coolDownCounter = 0;\n }\n }\n //STEP3: incrementCursorPosition. If its already incremented by some other user, dont worry and \n // skip update. This is becoze, entry is added by you so noone will be able to change that entry.\n await incrementCursorPosition(cursorPositionOfGEQ, eventData);\n}\n\n// Get Current Cursor Position\nconst getCurrentCursorPosition = async () => {\n let entry = await getRegistryEntry(getProviderKeysByType(\"GEQ\").publicKey, GEQ_CURSOR_DATA_KEY, { publicKey: getProviderKeysByType(\"GEQ\").publicKey, privateKey: getProviderKeysByType(\"GEQ\").privateKey });\n let revision = entry && entry != \"undefined\" ? entry.revision : 0;\n return revision;\n}\n// Increment CursorPosition in \"GEQ\"\nconst incrementCursorPosition = async (cursorPositionOfGEQ, eventData) => {\n // get current cursor position. Match Revision# with counter value. if mismatch ask for new Key.\n let { resultFlag, revision } = await setRegistryEntry(GEQ_CURSOR_DATA_KEY, cursorPositionOfGEQ, { publicKey: getProviderKeysByType(\"GEQ\").publicKey, privateKey: getProviderKeysByType(\"GEQ\").privateKey, skipIDB: true });\n console.log(\"incrementCursorPosition(): eventData= \" + eventData + \" resultFlag=\" + resultFlag);\n}\nfunction sleep(milliseconds) {\n let timeStart = new Date().getTime();\n while (true) {\n let elapsedTime = new Date().getTime() - timeStart;\n if (elapsedTime > milliseconds) {\n break;\n }\n }\n}","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/DescoverDev/UserCard.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/Spiner.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppDetails/AppComments.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/service/SnEncryption.js",["994","995"],"import _sodium from 'libsodium-wrappers-sumo';\nimport { pki, pkcs5, md } from 'node-forge';\nimport randomBytes from \"randombytes\";\nimport nacl from 'tweetnacl';\nimport naclutil from 'tweetnacl-util';\n\nlet sodium: any = null;\n\n(async () => {\n await _sodium.ready;\n sodium = _sodium;\n})();\n\nfunction toHexString(byteArray: Uint8Array): string {\n let s = \"\";\n // tslint:disable-next-line:only-arrow-functions\n byteArray.forEach(function (byte) {\n // tslint:disable-next-line:no-bitwise\n s += (\"0\" + (byte & 0xff).toString(16)).slice(-2);\n });\n return s;\n}\n\nfunction hexStringToArrayBuffer(hexString: string): Uint8Array {\n // remove the leading 0x\n hexString = hexString.replace(/^0x/, '');\n \n // ensure even number of characters\n if (hexString.length % 2 != 0) {\n console.log('WARNING: expecting an even number of characters in the hexString');\n }\n \n // check for some non-hex characters\n var bad = hexString.match(/[G-Z\\s]/i);\n if (bad) {\n console.log('WARNING: found non-hex characters', bad); \n }\n \n // split the string into pairs of octets\n var pairs = hexString.match(/[\\dA-F]{2}/gi);\n \n // convert the octets to integers\n var integers = pairs?.map(function(s) {\n return parseInt(s, 16);\n });\n \n var array = new Uint8Array(integers? integers:[]);\n console.log(array);\n \n return array;\n}\n\n\nfunction genKeyPairFromSeed(seed: string): { publicKey: Uint8Array; privateKey: Uint8Array } {\n // Get a 32-byte seed.\n seed = pkcs5.pbkdf2(seed, \"\", 1000, 32, md.sha256.create());\n const { publicKey, privateKey } = pki.ed25519.generateKeyPair({ seed });\n // return { publicKey: toHexString(publicKey), privateKey: toHexString(privateKey) };\n return { publicKey, privateKey };\n}\nfunction makeSeed(length: number): string {\n // Cryptographically-secure random number generator. It should use the\n // built-in crypto.getRandomValues in the browser.\n const array = randomBytes(length);\n return toHexString(array);\n}\nfunction genKeyPairAndSeed(length = 64): { publicKey: Uint8Array; privateKey: Uint8Array; seed: string } {\n const seed = makeSeed(length);\n return { ...genKeyPairFromSeed(seed), seed };\n}\n\n// ########### BOB #############\n// \"6cffb176971ad1978618c8ed2f84bd2f59a73be9c916614974ef62ef82e23fe5\"\n// ED25519 : publicKey : 9da11916898665c2b21099e827d6f19d9d466db43a57d47d48b02882cdbb1076\n// ED25519 : publicKey : base64 : naEZFomGZcKyEJnoJ9bxnZ1GbbQ6V9R9SLAogs27EHY=\n// ED25519 : privateKey : 244a06a7dd2b145b6511fa0fed9126af5a7d9ab39c30a22857612a1d6d06f8409da11916898665c2b21099e827d6f19d9d466db43a57d47d48b02882cdbb1076\n// ED25519 : privateKey : base64 : JEoGp90rFFtlEfoP7ZEmr1p9mrOcMKIoV2EqHW0G+EA=\n// X25519 : publicKey : 224530721ac618f0d98f57affb5efab5bdfd82120876875298d6f9049c901e2967ty\n// X25519 : publicKey : base64 : IkUwchrGGPDZj1ev+176tb39ghIIdodSmNb5BJyQHik=\n// X25519 : privateKey : 98aaa8f218c4250d6bccd0b6dbc9a6a499bf39d738340c272d9f29c7a412126e\n// X25519 : privateKey : base64 : mKqo8hjEJQ1rzNC228mmpJm/Odc4NAwnLZ8px6QSEm4=\n// ########### ALICE #############\n// ED25519 : publicKey : ce8fe6d1e9d258ae55abc5216a9e301341329d26b728acc500df07e6b5456902\n// ED25519 : publicKey : base64 : zo/m0enSWK5Vq8Uhap4wE0EynSa3KKzFAN8H5rVFaQI=\n// ED25519 : privateKey : 03ba0678b600f33435d75bfd7bbd49dbc7ff5dc031a52cd2428e9fe158ec3a81ce8fe6d1e9d258ae55abc5216a9e301341329d26b728acc500df07e6b5456902\n// ED25519 : privateKey : base64 : A7oGeLYA8zQ111v9e71J28f/XcAxpSzSQo6f4VjsOoE=\n// X25519 : publicKey : 21776783cceda1333eed237387f23e6f1f32d1e8283007286e0f393801007e02\n// X25519 : publicKey : base64 : IXdng8ztoTM+7SNzh/I+bx8y0egoMAcobg85OAEAfgI=\n// X25519 : privateKey : 781a5c29e486ba9f383a9a4239be53fe0974452a20ecc6f3b07b335c1f55bc6f\n// X25519 : privateKey : base64 : eBpcKeSGup84OppCOb5T/gl0RSog7MbzsHszXB9VvG8=\n\n// ### Data Encryption for loggedIn user\nexport async function encryptData(hexPrivateKey: string, hexPublicKey: string, data: string, strNonce: string): Promise<any> {\n try {\n //await _sodium.ready;\n // const sodium = _sodium;\n let publicKey: Uint8Array = hexStringToArrayBuffer(hexPublicKey);\n let privateKey: Uint8Array = hexStringToArrayBuffer(hexPrivateKey);\n let nonce: Uint8Array = nacl.randomBytes(nacl.box.nonceLength);\n\n const xPublicKey = sodium.crypto_sign_ed25519_pk_to_curve25519(publicKey); // Public key is of current logged in user(ephemeralPublicKey) OR Public key of another user.\n\n //console.log(\"xPublicKey: \" + naclutil.decodeBase64(publicKey));\n const xPrivateKey = sodium.crypto_sign_ed25519_sk_to_curve25519(privateKey); // LoggedIn users Private Key\n //console.log(\"xPublicKey: \" + naclutil.decodeBase64(privateKey));\n // Bob encrypts message for Alice or Bobs encrypts his own file using ephemeral/drived publicKeys\n const box = nacl.box(\n naclutil.decodeUTF8(data),\n nonce,\n xPublicKey,\n xPrivateKey\n )\n // we may add public key here\n const cipherObject = { version: \"v1\", ciphertext: naclutil.encodeBase64(box), nonce: naclutil.encodeBase64(nonce) };\n // tslint:disable-next-line:no-console\n console.log(\"box: \" + cipherObject.ciphertext);\n // tslint:disable-next-line:no-console\n console.log(\"nonce: \" + cipherObject.nonce);\n //return Buffer.from(message).toString('base64');\n\n console.log(\"cipherObject\" + JSON.stringify(cipherObject));\n return cipherObject;\n }\n catch (e) {\n throw e;\n }\n};\n//encryptData (\"P4UPEMoG1qWOfe3soMQRoQPyRZvIuL/95ByWpYBUQIa8m3WMFN3PdUgFb3PIguSV1dJPD9tamqCLX76Ag9t2Gw==\",\"gvvJpIAE27HKX40s520U8atHAx1cErQp2B/uRe2wmBo=\",\"Hello SkySpaces !!\",\"ldB22oYZh/HP46XVJCRh/J6qOsbV/v7s\");\n\n\nexport const decryptData = async (hexPrivateKey: string, hexPublicKey: string, data: any): Promise<any> => {\n try {\n // await _sodium.ready;\n // const sodium = _sodium;\n\n let publicKey: Uint8Array = hexStringToArrayBuffer(hexPublicKey);\n let privateKey: Uint8Array = hexStringToArrayBuffer(hexPrivateKey);\n\n const cipherObj = data;\n const box = naclutil.decodeBase64(cipherObj.ciphertext);\n const nonce = naclutil.decodeBase64(cipherObj.nonce);\n const xPrivateKey = sodium.crypto_sign_ed25519_sk_to_curve25519(privateKey); // LoggedIn users Private Key\n const xPublicKey = sodium.crypto_sign_ed25519_pk_to_curve25519(publicKey); // Public key is of current logged in user(ephemeralPublicKey) OR Public key of another user.\n // Alice decrypts message from Bob(using her PubKey) or Alice decrypts his own file using ephemeral/drived privatekey\n const payload = nacl.box.open(box, nonce, xPublicKey, xPrivateKey);\n\n const plainTextMessage = payload ? naclutil.encodeUTF8(payload) : \"\";\n // tslint:disable-next-line:no-console\n console.log(\"Decrypted: \" + plainTextMessage);\n return JSON.parse(plainTextMessage);\n }\n catch (e) {\n throw e;\n }\n};\n//decryptData (\"e8v2WhHuXaz2JhLhlt4ny+I0xEgKxdCzXsjQ2oZRgleC+8mkgATbscpfjSznbRTxq0cDHVwStCnYH+5F7bCYGg==\",\"vJt1jBTdz3VIBW9zyILkldXSTw/bWpqgi1++gIPbdhs=\",\"{\\\"version\\\":\\\"v1\\\",\\\"ciphertext\\\":\\\"YYFFrfY0xd6PqPNzrx5soLOtXsmkPviEzoh0ine4h6+oMQ==\\\",\\\"nonce\\\":\\\"ldB22oYZh/HP46XVJCRh/J6qOsbV/v7s\\\"}\");\nconst convertEdToCurve = async (): Promise<void> => {\n try {\n await _sodium.ready;\n const sodium = _sodium;\n // BOB\n // tslint:disable-next-line:no-console\n console.log(\"########### BOB #############\");\n const bob = genKeyPairAndSeed(32);\n // tslint:disable-next-line:no-console\n console.log(\"ED25519 : publicKey : \" + toHexString(bob.publicKey));\n // tslint:disable-next-line:no-console\n console.log(\"ED25519 : publicKey : base64 : \" + Buffer.from(bob.publicKey).toString('base64'));\n // tslint:disable-next-line:no-console\n console.log(\"ED25519 : privateKey : \" + toHexString(bob.privateKey));\n // tslint:disable-next-line:no-console\n console.log(\"ED25519 : privateKey : base64 : \" + Buffer.from(bob.privateKey.slice(0, 32)).toString('base64'));\n // function buf2hex(buffer) { // buffer is an ArrayBuffer\n // return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');\n // }\n // tslint:disable-next-line:variable-name\n const bob_curve_pk = sodium.crypto_sign_ed25519_pk_to_curve25519(bob.publicKey);\n // tslint:disable-next-line:no-console\n console.log(\"X25519 : publicKey : \" + toHexString(bob_curve_pk));\n // tslint:disable-next-line:no-console\n console.log(\"X25519 : publicKey : base64 : \" + Buffer.from(bob_curve_pk).toString('base64'));\n // tslint:disable-next-line:variable-name\n const bob_curve_sk = sodium.crypto_sign_ed25519_sk_to_curve25519(bob.privateKey);\n // tslint:disable-next-line:no-console\n console.log(\"X25519 : privateKey : \" + toHexString(bob_curve_sk));\n // tslint:disable-next-line:no-console\n console.log(\"X25519 : privateKey : base64 : \" + Buffer.from(bob_curve_sk).toString('base64'));\n // ALICE\n // tslint:disable-next-line:no-console\n console.log(\"########### ALICE #############\");\n const alice = genKeyPairAndSeed(32);\n // tslint:disable-next-line:no-console\n console.log(\"ED25519 : publicKey : \" + toHexString(alice.publicKey));\n // tslint:disable-next-line:no-console\n console.log(\"ED25519 : publicKey : base64 : \" + Buffer.from(alice.publicKey).toString('base64'));\n // tslint:disable-next-line:no-console\n console.log(\"ED25519 : privateKey : \" + toHexString(alice.privateKey));\n // tslint:disable-next-line:no-console\n console.log(\"ED25519 : privateKey : base64 : \" + Buffer.from(alice.privateKey.slice(0, 32)).toString('base64'));\n // function buf2hex(buffer) { // buffer is an ArrayBuffer\n // return Array.prototype.map.call(new Uint8Array(buffer), x => ('00' + x.toString(16)).slice(-2)).join('');\n // }\n // tslint:disable-next-line:variable-name\n const alice_curve_pk = sodium.crypto_sign_ed25519_pk_to_curve25519(alice.publicKey);\n // tslint:disable-next-line:no-console\n console.log(\"X25519 : publicKey : \" + toHexString(alice_curve_pk));\n // tslint:disable-next-line:no-console\n console.log(\"X25519 : publicKey : base64 : \" + Buffer.from(alice_curve_pk).toString('base64'));\n // tslint:disable-next-line:variable-name\n const alice_curve_sk = sodium.crypto_sign_ed25519_sk_to_curve25519(alice.privateKey);\n // tslint:disable-next-line:no-console\n console.log(\"X25519 : privateKey : \" + toHexString(alice_curve_sk));\n // tslint:disable-next-line:no-console\n console.log(\"X25519 : privateKey : base64 : \" + Buffer.from(alice_curve_sk).toString('base64'));\n\n\n // tslint:disable-next-line:no-console\n console.log(\"########### STARTING ENCRYPTION #############\");\n // generating key pairs\n // const bob = nacl.box.keyPair()\n // const alice = nacl.box.keyPair()\n // generating one time nonce for encryption\n const nonce = nacl.randomBytes(24)\n // message for Alice\n const utf8 = 'Hello Alice'\n // Bob encrypts message for Alice\n const box = nacl.box(\n naclutil.decodeUTF8(utf8),\n nonce,\n alice_curve_pk,\n bob_curve_sk\n )\n // somehow send this message to Alice\n const message = { box, nonce }\n // tslint:disable-next-line:no-console\n console.log(\"box: \" + Buffer.from(message.box).toString('base64'));\n // tslint:disable-next-line:no-console\n console.log(\"nonce: \" + Buffer.from(nonce).toString('base64'));\n\n }\n catch (e) {\n throw e;\n }\n};\n//convertEdToCurve();","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppDetails/CommentForm.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppDetails/AppComment.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/uploadUtil/UploadFile.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/utils/SnUtility.js",["996","997","998","999"],"import imageCompression from \"browser-image-compression\";\nimport {DEFAULT_PORTAL} from \"./SnConstants\";\nimport base64 from \"base64-js\";\nimport base32Encode from \"base32-encode\";\nimport store from \"../redux\";\n\nexport function decodeBase64(input = \"\") {\n return base64.toByteArray(\n input.padEnd(input.length + 4 - (input.length % 4), \"=\")\n );\n}\n\nexport function encodeBase32(input) {\n return base32Encode(input, \"RFC4648-HEX\", { padding: false }).toLowerCase();\n}\n\nexport function getBase32Skylink(skylink) {\n return encodeBase32(decodeBase64(skylink));\n}\n\nexport const getCompatibleTags = (resCategory) => {\n let category = []\n if (resCategory != null) {\n if (Array.isArray(resCategory)) {\n category = resCategory.map((cat) => cat.toLowerCase())\n } else {\n category = [resCategory.toLowerCase()]\n }\n }\n return JSON.parse(JSON.stringify(category))\n}\n\nexport const getSkyspaceListForCarousalMenu = (snSkyspaceList) => {\n if (snSkyspaceList != null) {\n const carousalMenuObj = {}\n snSkyspaceList.forEach((skyspace) => {\n carousalMenuObj[skyspace] = {\n label: skyspace,\n }\n })\n return carousalMenuObj\n }\n}\n\n// It will generate base32 url for any Skapp\nconst getbase32URlForSkapp = (skylink) => {\n let base32URL = null;\n return base32URL;\n}\n/**\n * Compresses Image file to Skyspace params. Returns an Object of type File\n * \n * @param {File} originalFile Original File.\n */\n\nexport const getCompressedImageFile = async (originalFile) => {\n const compressedBlob = await imageCompression(originalFile, {\n maxSizeMB: 1,\n maxWidthOrHeight: 256,\n useWebWorker: true,\n });\n return new File([compressedBlob], compressedBlob.name);\n};\n\n/**\n * Generates thumbnail image file out of the first frame of the video file.\n * \n * @param {Object} Object\n * @param {string?} Object.url - The video source Url.\n * @param {string?} Object.file - Optional video file object reference. If the Url s not provided, \n * then this property must have a value. If the url does have a valu then this property will be ignored.\n */\n\nexport const generateThumbnailFromVideo = async ({ file, url }) => {\n let videoResolve = null;\n const videoPromise = new Promise((resolve) => {\n videoResolve = resolve;\n });\n let video = document.createElement('video');\n video.crossOrigin = \"anonymous\";\n video.src = url ? url : URL.createObjectURL(file);\n video.load();\n await videoPromise;\n const videoThumbnail = await videoToImg(video);\n return videoThumbnail;\n};\n\n/**\n * Takes a video element and that has image already loaded and returns an image file which is a thumbnail\n * generated out of the first frame of the video \n * \n * @param {Element} video Video Element.\n */\n\nexport const videoToImg = async (video) => {\n let canvas = document.createElement(\"canvas\");\n let w = video.videoWidth;\n let h = video.videoHeight;\n canvas.width = w;\n canvas.height = h;\n let ctx = canvas.getContext(\"2d\");\n ctx.drawImage(video, 0, 0, w, h);\n let file = await imageCompression.canvasToFile(canvas, \"image/jpeg\");\n return file;\n};\n\nexport const hashFromSkylinkUploadResponse = (response) => response.skylink.replace(\"sia:\", \"\");\n\nexport const flattenObject = (obj) => {\n const flattened = {};\n Object.keys(obj).forEach((key) => {\n if (typeof obj[key] === 'object' && obj[key] !== null) {\n Object.assign(flattened, flattenObject(obj[key]));\n } else {\n flattened[key] = obj[key]\n }\n });\n return flattened;\n};\n\n/**\n * \n * @param {String} searchStr Required. The string to search for in the object\n * @param {Object} obj Required. The object in which the searchStr will be searched. \n * \n * @description Searches for the searchStr in the value of every leaf node of the object. \n * The method performs a case agnostic substring search. It returns true id searchStr in null.\n */\nexport const isStrInObj = (searchStr, obj) => {\n if (obj) {\n const flattenedObj = flattenObject(obj);\n return (searchStr == null) || Object.keys(flattenedObj).some(key => flattenedObj[key] != null && flattenedObj[key].toString().toLowerCase().includes(searchStr.toLowerCase()));\n } else {\n return true;\n }\n};\nexport const genHostedAppSkappUrl = (hostedAppDetail) => hostedAppDetail?.content?.hns && hostedAppDetail?.content?.storageGateway &&\n `https://${hostedAppDetail.content.hns}.hns.${hostedAppDetail.content.storageGateway}`;\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/uploadUtil/LoadingSpinner.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/index.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Deco7.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Deco6.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Deco8.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Deco4.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Deco5.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Deco3.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Deco2.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Deco1.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Folder.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/DownArrow.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Built.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/FooterCube.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/FooterOrb.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Copy.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/FileError.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Loading.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/FileCheck.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/File.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Skynet.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/LogoSolid.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/SmallOrb.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Pyramid.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Cylinder.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Arrow.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Discord.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Twitter.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/DoubleRight.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Github.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Download.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/svg/Logo.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/AddNewSiteBtn.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/HostingItem.js",["1000"],"import React from 'react'\nimport { Box, Button, IconButton, makeStyles } from '@material-ui/core'\nimport HostingImg from '../../assets/img/hostingSc.png'\nimport EditIcon from '@material-ui/icons/Edit'\nimport ChevronRightOutlinedIcon from '@material-ui/icons/ChevronRightOutlined'\nimport MoreVertOutlinedIcon from '@material-ui/icons/MoreVertOutlined'\nimport { ReactComponent as FolderIcon } from '../../assets/img/icons/folderIcon.svg'\nimport { ReactComponent as ShareIcon } from '../../assets/img/icons/shareSite.svg'\nimport styles from '../../assets/jss/hosting/HostingItemStyle'\nimport { skylinkToUrl } from \"../../service/skynet-api\";\nimport moment from 'moment'\nimport { useHistory } from 'react-router-dom'\nimport { useDispatch } from 'react-redux'\nimport { setSelectedHostedApp } from '../../redux/action-reducers-epic/SnSelectedHostedAppAction'\nimport { Delete } from '@material-ui/icons';\n\nconst useStyles = makeStyles(styles)\nconst HostingItem = ({ ActiveSite, app, handleOpen, id }) => {\n const classes = useStyles();\n let history = useHistory();\n const dispatch = useDispatch();\n\n const appContent = app.content;\n\n const onManageDeployment = (evt) => {\n dispatch(setSelectedHostedApp(app.id));\n history.push(`/deploysite/${app.id}`);\n };\n\n const onPublish = (evt) => {\n dispatch(setSelectedHostedApp(app.id));\n history.push(`/submitapp/${app.id}`);\n };\n\n const onEdit = (evt) => {\n dispatch(setSelectedHostedApp(app.id));\n history.push(`/editsite/${app.id}`);\n };\n\n return (\n <Box display=\"flex\" className={classes.root} position=\"relative\">\n <div className={classes.HostingImgContainer}>\n {(appContent.imgThumbnailSkylink == null || appContent.imgThumbnailSkylink.trim() === \"\") && <img src={HostingImg} alt=\"\" />}\n {appContent.imgThumbnailSkylink != null && appContent.imgThumbnailSkylink.trim() !== \"\" &&\n <img alt=\"app\"\n src={skylinkToUrl(appContent.imgThumbnailSkylink)}\n style={{\n width: \"250px\",\n height: \"150px\",\n // border: props.arrSelectedAps.indexOf(app) > -1 ? \"2px solid #1ed660\" : null,\n }}\n name=\"1\"\n />}\n </div>\n <div className={classes.detailsCol}>\n <h2 className={classes.h2}>{appContent.appName}</h2>\n <Box display=\"flex\" alignItems=\"center\" className={classes.verisonAndLink}>\n <p>{appContent.hns}\n <ShareIcon />\n </p>\n <span>version:{app.version}</span>\n </Box>\n <Box className={classes.updateText}>\n Last Updated: {moment(app.ts).format(\n \"h:mm:ss A, MMMM D, YYYY\"\n )}\n </Box>\n <Box display='flex' className={classes.btnContainer}>\n {\n ActiveSite\n ?\n <Button className={classes.ActiveBtn}>\n Active\n </Button>\n :\n <Button className={classes.inActiveBtn}>\n Inactive\n </Button>\n }\n <Button className={classes.manageBtn} onClick={onPublish}>\n <span>Publish</span>\n </Button>\n <Button className={classes.manageBtn} onClick={onEdit}>\n <span>Edit</span>\n </Button>\n <Button className={classes.trashBtn} onClick={()=> handleOpen(appContent, id)}>\n <Delete />\n </Button>\n <Button className={classes.manageBtn} onClick={onManageDeployment}>\n <FolderIcon />\n <span>Manage Deployment</span>\n <ChevronRightOutlinedIcon />\n </Button>\n </Box>\n </div>\n\n\n {/* Button More */}\n <IconButton className={classes.moreBtn}>\n <MoreVertOutlinedIcon />\n </IconButton>\n </Box>\n )\n}\n\nexport default HostingItem\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/SubmitBtn.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/ListFilter.js",["1001","1002","1003","1004","1005"],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/UtilitiesItem.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Domain/AddNewDomain.js",["1006"],"import React from 'react'\nimport { Box, Button, makeStyles, Modal } from '@material-ui/core'\nimport Backdrop from '@material-ui/core/Backdrop'\nimport Fade from '@material-ui/core/Fade'\nconst useStyles = makeStyles((theme) => ({\n modal: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n },\n\n lightModalHeader: {\n fontSize: 32,\n fontWeight: 'bold',\n color: '#333333',\n borderBottom: '1px solid #70707085',\n padding: '1.3rem',\n '@media only screen and (max-width: 1440px)': {\n fontSize: 24,\n padding: '1rem',\n }\n },\n darkModalHeader: {\n fontSize: 32,\n fontWeight: 'bold',\n color: '#fff',\n borderBottom: '1px solid #70707085',\n padding: '1.3rem',\n '@media only screen and (max-width: 1440px)': {\n fontSize: 24,\n padding: '1rem',\n }\n },\n lightRoot: {\n width: 1180,\n maxWidth: '95%',\n boxShadow: '0px 2px 5px #15223221',\n borderRadius: 15,\n opacity: 1,\n '&, &:focus': {\n background: '#fff',\n border: 0,\n outline: 0,\n }\n },\n darkRoot: {\n width: 1180,\n maxWidth: '95%',\n boxShadow: '0px 2px 5px #15223221',\n borderRadius: 15,\n opacity: 1,\n '&, &:focus': {\n background: '#1E2029',\n border: 0,\n outline: 0,\n }\n },\n lightInputContainer: {\n '& input': {\n borderTopLeftRadius: 4,\n borderBottomLeftRadius: 4,\n paddingLeft: '1rem',\n paddingRight: '1rem',\n flex: 1,\n height: 60,\n color: '#2A2C34',\n background: '#fff',\n '@media only screen and (max-width: 575px)': {\n flex: '100%',\n marginBottom: '1rem', borderRadius: 10\n },\n // border: '1px solid #D9E1EC',\n border: '1px solid rgba(0, 0, 0, 0.4)',\n '&:focus': {\n border: '1px solid #1DBF73',\n outline: 0\n },\n '@media only screen and (max-width: 1440px)': {\n height: 50,\n },\n\n },\n '@media only screen and (max-width: 575px)': {\n flexWrap: 'wrap',\n\n\n }\n },\n darkInputContainer: {\n '& input': {\n borderTopLeftRadius: 4,\n borderBottomLeftRadius: 4,\n paddingLeft: '1rem',\n paddingRight: '1rem',\n flex: 1,\n height: 60,\n color: '#fff',\n background: '#2A2C34',\n '@media only screen and (max-width: 575px)': {\n flex: '100%',\n marginBottom: '1rem', borderRadius: 10\n },\n // border: '1px solid #D9E1EC',\n border: '1px solid rgba(0, 0, 0, 0.4)',\n '&:focus': {\n border: '1px solid #1DBF73',\n outline: 0\n },\n '@media only screen and (max-width: 1440px)': {\n height: 50,\n },\n\n },\n '@media only screen and (max-width: 575px)': {\n flexWrap: 'wrap',\n\n\n }\n },\n lightLabel: {\n fontSize: 21,\n color: '#000',\n marginBottom: 10,\n display: 'block',\n '@media only screen and (max-width: 1440px)': {\n fontSize: 19,\n },\n '@media only screen and (max-width: 575px)': {\n fontSize: 16,\n }\n },\n darkLabel: {\n fontSize: 21,\n color: '#fff',\n marginBottom: 10,\n display: 'block',\n '@media only screen and (max-width: 1440px)': {\n fontSize: 19,\n },\n '@media only screen and (max-width: 575px)': {\n fontSize: 16,\n }\n },\n submitBtn: {\n // height: '100%',\n borderTopLeftRadius: 0,\n borderBottomLeftRadius: 0,\n backgroundColor: '#1DBF73!important',\n minWidth: 150,\n color: '#fff',\n fontSize: 21,\n fontWeight: 400,\n '@media only screen and (max-width: 1440px)': {\n fontSize: 18,\n },\n '@media only screen and (max-width: 575px)': {\n flex: '100%',\n borderRadius: 10,\n fontSize: 18,\n height: 50\n }\n },\n form: {\n marginTop: 70,\n marginBottom: 150,\n maxWidth: '90%',\n marginLeft: 'auto',\n marginRight: 'auto',\n '@media only screen and (max-width: 1440px)': {\n marginTop: 60,\n marginBottom: 120,\n },\n '@media only screen and (max-width: 575px)': {\n marginTop: 50,\n marginBottom: 90,\n }\n\n }\n}))\n\nconst AddNewDomain = ({ openModal, openModalHandler, toggle }) => {\n const classes = useStyles()\n\n // const [open, setOpen] = React.useState(true)\n\n // const handleOpen = () => {\n // openModalHandler()\n // }\n\n const handleClose = () => {\n // setOpen(false)\n openModalHandler()\n }\n\n {toggle ? document.body.className = \"darkBodyColor\" : document.body.className = \"lightBodyColor\"}\n\n return (\n\n <div>\n <Modal\n aria-labelledby=\"transition-modal-title\"\n aria-describedby=\"transition-modal-description\"\n className={classes.modal}\n open={openModal}\n onClose={handleClose}\n closeAfterTransition\n BackdropComponent={Backdrop}\n BackdropProps={{\n timeout: 500,\n }}\n >\n <Fade in={openModal}>\n <Box className={toggle ? classes.darkRoot : classes.lightRoot}>\n <div className={toggle ? classes.darkModalHeader : classes.lightModalHeader}>\n New Custom Domain\n </div>\n\n <form className={classes.form}>\n <label className={toggle ? classes.darkLabel : classes.lightLabel} htmlFor=\"domainName\">Enter Domain Name</label>\n <Box display=\"flex\" className={toggle ? classes.darkInputContainer : classes.lightInputContainer}>\n <input required type=\"text\" id=\"domainName\" placeholder='e.g., mysite.com' />\n <Button className={classes.submitBtn} onClick={handleClose}> Next</Button>\n </Box>\n </form>\n </Box>\n </Fade>\n </Modal>\n </div>\n )\n}\n\nexport default AddNewDomain\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnDomainAction.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Domain/AddNewDomainTXT.js",["1007","1008","1009","1010","1011","1012","1013","1014","1015","1016","1017"],"import React, { createRef, Fragment, useEffect, useState } from \"react\";\nimport { Box, Button, Checkbox, FormControlLabel, makeStyles, Modal, Typography } from '@material-ui/core'\nimport Backdrop from '@material-ui/core/Backdrop'\nimport Fade from '@material-ui/core/Fade'\nimport { SnTextInput, SnSelect } from \"../Utils/SnFormikControlls\";\nimport { FieldArray, Formik } from \"formik\";\n\nimport * as Yup from \"yup\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setLoaderDisplay } from \"../../redux/action-reducers-epic/SnLoaderAction\";\n\n\nconst useStyles = makeStyles((theme) => ({\n modal: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n },\n lightModalHeader: {\n fontSize: 32,\n fontWeight: 'bold',\n color: '#333333',\n borderBottom: '1px solid #70707085',\n padding: '1.3rem',\n '@media only screen and (max-width: 1440px)': {\n fontSize: 24,\n padding: '1rem',\n }\n },\n darkModalHeader: {\n fontSize: 32,\n fontWeight: 'bold',\n color: '#ffffff',\n borderBottom: '1px solid #70707085',\n padding: '1.3rem',\n '@media only screen and (max-width: 1440px)': {\n fontSize: 24,\n padding: '1rem',\n }\n },\n lightRoot: {\n width: 1180,\n maxWidth: '60%',\n boxShadow: '0px 2px 5px #15223221',\n borderRadius: 15,\n opacity: 1,\n '&, &:focus': {\n background: '#fff',\n border: 0,\n outline: 0,\n },\n },\n darkRoot: {\n width: 1180,\n maxWidth: '60%',\n boxShadow: '0px 2px 5px #15223221',\n borderRadius: 15,\n opacity: 1,\n '&, &:focus': {\n background: '#1E2029',\n border: 0,\n outline: 0,\n },\n },\n lightInputContainer: {\n '& input': {\n borderRadius: 10,\n paddingLeft: '1rem',\n paddingRight: '1rem',\n flex: 1,\n height: 60,\n fontSize: 21,\n color: '#2A2C34',\n background: '#fff',\n '@media only screen and (max-width: 575px)': {\n flex: '100%',\n marginBottom: 8, borderRadius: 10\n },\n // border: '1px solid #D9E1EC',\n '&:focus': {\n border: '1px solid #1DBF73',\n outline: 0\n },\n '@media only screen and (max-width: 1440px)': {\n height: 50,\n fontSize: 18,\n },\n\n },\n '@media only screen and (max-width: 575px)': {\n flexWrap: 'wrap',\n fontSize: 16,\n\n }\n },\n darkInputContainer: {\n '& input': {\n borderRadius: 10,\n paddingLeft: '1rem',\n paddingRight: '1rem',\n flex: 1,\n height: 60,\n fontSize: 21,\n color: '#fff',\n background: '#2A2C34',\n '@media only screen and (max-width: 575px)': {\n flex: '100%',\n marginBottom: 8, borderRadius: 10\n },\n border: '1px solid rgba(255, 255, 255, 0.1)',\n '&:focus': {\n border: '1px solid #1DBF73',\n outline: 0\n },\n '@media only screen and (max-width: 1440px)': {\n height: 50,\n fontSize: 18,\n },\n\n },\n '@media only screen and (max-width: 575px)': {\n flexWrap: 'wrap',\n fontSize: 16,\n\n }\n },\n label: {\n display: 'block',\n color: '#5A607F',\n marginBottom: 8,\n fontSize: 18,\n '@media only screen and (max-width: 575px)': {\n fontSize: 16,\n }\n },\n submitBtn: {\n // height: '100%',\n borderRadius: 5,\n backgroundColor: '#1DBF73!important',\n minWidth: 210,\n color: '#fff',\n fontSize: 21,\n fontWeight: 300,\n '@media only screen and (max-width: 1440px)': {\n fontSize: 18,\n },\n '@media only screen and (max-width: 575px)': {\n flex: '100%',\n borderRadius: 10,\n fontSize: 18,\n height: 50,\n width: '100%'\n }\n },\n form: {\n\n marginLeft: 'auto',\n marginRight: 'auto',\n // '@media only screen and (max-width: 1440px)': {\n // marginTop: 60,\n // marginBottom: 120,\n // },\n // '@media only screen and (max-width: 575px)': {\n // marginTop: 50,\n // marginBottom: 90,\n // }\n\n },\n varifyText: {\n color: \"#1DBF73\",\n fontWeight: 'bold',\n marginTop: '1rem',\n '@media only screen and (max-width: 575px)': {\n marginTop: 17,\n }\n },\n contentContainer: {\n paddingRight: '7%',\n paddingLeft: '4%',\n paddingBottom: '4%',\n '@media only screen and (max-width: 575px)': {\n paddingRight: '20px',\n paddingLeft: '20px',\n paddingBottom: '35px',\n }\n\n },\n lightSubheading: {\n color: '#333333',\n fontSize: 24,\n fontWeight: 'bold',\n marginTop: '1rem',\n\n '@media only screen and (max-width: 575px)': {\n fontSize: 18,\n marginTop: 9,\n\n }\n },\n darkSubheading: {\n color: '#fff',\n fontSize: 24,\n fontWeight: 'bold',\n marginTop: '1rem',\n\n '@media only screen and (max-width: 575px)': {\n fontSize: 18,\n marginTop: 9,\n\n }\n },\n p: {\n color: '#5A607F'\n },\n checkBox: {\n marginTop: 10,\n marginBottom: 10,\n\n '& span': {\n color: '#5A607F',\n '@media only screen and (max-width: 575px)': {\n fontSize: 16,\n },\n },\n\n '@media only screen and (max-width: 575px)': {\n // flex: '100%',\n // borderRadius: 10,\n // fontSize: 18,\n // height: 50\n }\n },\n input: {\n background: \"#fff\",\n border: \"1px solid #D9E1EC\",\n borderRadius: 8,\n height: 45,\n width: \"100%\",\n fontSize: 19,\n padding: 20,\n \"@media only screen and (max-width: 1440px)\": {\n height: 45,\n // width: '100%',\n fontSize: 16,\n padding: 15,\n },\n \"@media only screen and (max-width: 575px)\": {\n height: 40,\n // width: '100%',\n fontSize: \"14px !important\",\n padding: 10,\n },\n },\n inputContainer: {\n \"& > label\": {\n display: \"block\",\n color: \"#5A607F\",\n marginBottom: 7,\n },\n \"& input:focus, & select:focus\": {\n outline: \"none!important\",\n border: \"1px solid #1DBF73\",\n },\n marginTop: \"5px\",\n \"&\": {\n marginRight: \"1rem\",\n },\n \"& input, & input\": {\n fontSize: 16,\n },\n \"@media only screen and (max-width: 575px)\": {\n marginTop: \"5px\",\n marginRight: \"10px\",\n },\n },\n cancelBtn: {\n background: '#FF6060!important',\n color: '#fff',\n paddingLeft: '1.5rem',\n paddingRight: '1.5rem',\n minWidth: 130,\n marginRight: '1rem',\n '@media only screen and (max-width: 575px)': {\n fontSize: '12px',\n marginRight: '.4rem',\n paddingLeft: '.5rem',\n paddingRight: '.5rem',\n minWidth: 70,\n }\n },\n}))\n\nconst options = [\n { value: 'HNS', label: 'HNS' },\n]\n\nconst AddNewDomainTXT = ({ toggle, error, editDomain, newDomain, initailValueFormikObj, validationSchema, submitProfileForm, setNewDomain }) => {\n const classes = useStyles()\n const [formikObj, setFormikObj] = useState(initailValueFormikObj); // to store Formik Form data\n\n return (\n\n <div>\n <Modal\n aria-labelledby=\"transition-modal-title\"\n aria-describedby=\"transition-modal-description\"\n className={classes.modal}\n open={newDomain}\n onClose={() => setNewDomain(false)}\n closeAfterTransition\n BackdropComponent={Backdrop}\n BackdropProps={{\n timeout: 500,\n }}\n >\n <Fade in={newDomain}>\n <Box className={toggle ? classes.darkRoot : classes.lightRoot}>\n <div className={toggle ? classes.darkModalHeader : classes.lightModalHeader}>\n { editDomain !== null ? \"Edit Custom Domain\" : \"New Custom Domain\" }\n </div>\n <div className={classes.contentContainer}>\n\n <Formik\n initialValues={formikObj}\n validationSchema={validationSchema}\n validateOnChange={true}\n validateOnBlur={true}\n enableReinitialize={true}\n onSubmit={submitProfileForm}\n >\n {({ values, ...formik }) => (\n <form onSubmit={formik.handleSubmit}>\n <Box component=\"form\">\n <Typography className={classes.varifyText}>\n Verification\n </Typography>\n <Typography className={toggle ? classes.darkSubheading: classes.lightSubheading}>\n Add New TXT record to skapp.io\n </Typography>\n <p className={classes.p}>TXT records are simple text notes for your domain and won't affect your email or website settings.</p>\n <Box display=\"flex\" className={`${classes.formRow} formSiteRow`}>\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnTextInput\n label=\"SkyDB Seed\"\n name=\"seed\"\n className={classes.input}\n type=\"text\"\n toggle={toggle}\n />\n </Box>\n </Box>\n <Box display=\"flex\" className={`${classes.formRow} formSiteRow`}>\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnTextInput\n label=\"DomainName\"\n name=\"domainName\"\n className={classes.input}\n type=\"text\"\n toggle={toggle}\n />\n </Box>\n </Box>\n <Box display=\"flex\" style={{ pointerEvents: \"none\" }} className={`${classes.formRow} formSiteRow`}>\n <Box className={`${classes.inputContainer}`} flex={1}>\n <label>Domain Type</label>\n <Box>\n <SnSelect\n toggle={toggle}\n label=\"Domain Type\"\n name=\"domainType\"\n options={options}\n />\n </Box>\n </Box>\n </Box>\n <Box display=\"flex\" className={`${classes.formRow} formSiteRow`}>\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnTextInput\n label=\"DataLink\"\n name=\"dataLink\"\n className={classes.input}\n type=\"text\"\n toggle={toggle}\n />\n </Box>\n </Box>\n <Box display=\"flex\" style={{ float: 'right', marginBottom: 10, marginTop: 10 }} className={`${classes.formRow} formSiteRow`}>\n <Button className={classes.cancelBtn} onClick={()=>setNewDomain(false)}>Cancel</Button> \n <Button className={classes.submitBtn} onClick={formik.handleSubmit}>Save</Button>\n </Box>\n { error ? <Box display=\"flex\" style={{ marginBottom: 10, marginTop: 10 }} className={`${classes.formRow} formSiteRow`}>\n <Typography style={{ color: 'red' }}>\n {error}\n </Typography>\n </Box> : null }\n </Box>\n </form>\n )}\n </Formik>\n </div>\n </Box>\n </Fade>\n </Modal>\n </div>\n )\n}\n\nexport default AddNewDomainTXT","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Domain/DomainTable.js",["1018","1019","1020","1021"],"import React, { Fragment } from 'react'\nimport Menu from '@material-ui/core/Menu'\nimport { makeStyles } from '@material-ui/core/styles'\nimport Table from '@material-ui/core/Table'\nimport TableBody from '@material-ui/core/TableBody'\nimport TableCell from '@material-ui/core/TableCell'\nimport TableContainer from '@material-ui/core/TableContainer'\nimport TableHead from '@material-ui/core/TableHead'\nimport TableRow from '@material-ui/core/TableRow'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faEllipsisH as MoreIcon } from '@fortawesome/free-solid-svg-icons'\nimport { ReactComponent as DomainListIcon } from '../../assets/img/icons/listicon.svg'\nimport { ReactComponent as Arrow } from '../../assets/img/icons/arrowdow.svg'\nimport { faTrashAlt as DeleteIcon } from '@fortawesome/free-solid-svg-icons'\nimport { ReactComponent as CopyIcon } from '../../assets/img/icons/copy.svg'\n\nimport CreateOutlinedIcon from '@material-ui/icons/CreateOutlined'\n\nimport { Box, IconButton, MenuItem, Tooltip, Button } from '@material-ui/core'\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 650,\n },\n lightPaper: {\n marginTop: 10,\n \"& th, & td\": {\n border: 0\n },\n '& tbody tr th ~ td:not(:last-child)': {\n color: '#6E77AA',\n fontWeight: 'normal'\n },\n '& tbody th': {\n fontWeight: 700\n },\n '& thead': {\n\n '& th': {\n color: '#fff',\n lineHeight: '.8rem',\n background: '#1DBF73',\n\n }\n },\n '& tr th, & tr td': {\n fontSize: 18,\n '@media only screen and (max-width: 1440px)': {\n fontSize: 16\n },\n '&:first-child': {\n borderRadius: '5px 0 0px 5px'\n },\n '&:last-child': {\n borderRadius: '0px 5px 5px 0px'\n }\n },\n '& table': {\n borderCollapse: 'separate',\n borderSpacing: '0 8px'\n },\n '& tbody tr td,& tbody tr th': {\n background: '#fff',\n color: '#2A2C34'\n },\n '& tbody th svg': {\n marginRight: 10\n }\n },\n darkPaper: {\n marginTop: 10,\n \"& th, & td\": {\n border: 0\n },\n '& tbody tr th ~ td:not(:last-child)': {\n color: '#6E77AA',\n fontWeight: 'normal'\n },\n '& tbody th': {\n fontWeight: 700\n },\n '& thead': {\n\n '& th': {\n color: '#fff',\n lineHeight: '.8rem',\n background: '#1DBF73',\n\n }\n },\n '& tr th, & tr td': {\n fontSize: 18,\n '@media only screen and (max-width: 1440px)': {\n fontSize: 16\n },\n '&:first-child': {\n borderRadius: '5px 0 0px 5px'\n },\n '&:last-child': {\n borderRadius: '0px 5px 5px 0px'\n }\n },\n '& table': {\n borderCollapse: 'separate',\n borderSpacing: '0 8px'\n },\n '& tbody tr td,& tbody tr th': {\n color: '#fff',\n background: '#2A2C34'\n },\n '& tbody th svg': {\n marginRight: 10\n }\n },\n statusWorking: {\n color: '#1DBF73'\n },\n statusError: {\n color: '#FF6060'\n },\n arrow: {\n marginLeft: 10\n },\n lightMenuAction: {\n marginTop: '3.4rem',\n border: '1px solid #D9E1EC',\n '& ul': {\n background: '#fff',\n color: '#2A2C34',\n minWidth: 230,\n '& li': {\n fontSize: 18,\n paddingBottom: 12,\n '@media only screen and (max-width: 1440px)': {\n fontSize: 16\n }\n }\n },\n '& .MuiPaper-root': {\n boxShadow: '0px 3px 6px #00000029',\n border: '1px solid #7070704F',\n overflow: 'visible'\n },\n '& .MuiPaper-root::before': {\n content: '\"\"',\n width: 0,\n height: 0,\n borderTop: '14px solid transparent',\n borderBottom: '14px solid transparent',\n borderRight: '14px solid #70707057',\n position: 'absolute',\n top: '-22px',\n right: 19,\n transform: 'rotate(90deg)'\n },\n '& .MuiPaper-root::after': {\n content: '\"\"',\n width: 0,\n height: 0,\n borderTop: '14px solid transparent',\n borderBottom: '14px solid transparent',\n borderRight: '14px solid #fff',\n // position: 'relative',\n position: 'absolute',\n top: '-21px',\n right: 19,\n transform: 'rotate(90deg)'\n }\n },\n darkMenuAction: {\n marginTop: '3.4rem',\n '& ul': {\n background: '#1E2029',\n color: '#fff',\n minWidth: 230,\n '& li': {\n fontSize: 18,\n paddingBottom: 12,\n '@media only screen and (max-width: 1440px)': {\n fontSize: 16\n }\n }\n },\n '& .MuiPaper-root': {\n boxShadow: '0px 3px 6px #00000029',\n border: '1px solid #48494E',\n overflow: 'visible'\n },\n '& .MuiPaper-root::before': {\n content: '\"\"',\n width: 0,\n height: 0,\n borderTop: '14px solid transparent',\n borderBottom: '14px solid transparent',\n borderRight: '14px solid #70707057',\n position: 'absolute',\n top: '-22px',\n right: 19,\n transform: 'rotate(90deg)'\n },\n '& .MuiPaper-root::after': {\n content: '\"\"',\n width: 0,\n height: 0,\n borderTop: '14px solid transparent',\n borderBottom: '14px solid transparent',\n borderRight: '14px solid #fff',\n // position: 'relative',\n position: 'absolute',\n top: '-21px',\n right: 19,\n transform: 'rotate(90deg)'\n }\n },\n colorDanger: {\n color: '#FF6060'\n }\n})\n\nfunction createData(domainName, type, status, action) {\n return { domainName, type, status, action }\n}\n\nconst rows = [\n createData('skyspaces.io', 'External DNS', true, { actionType: '' }),\n createData('cloudean.com', 'External DNS', false,),\n createData('mysite.net', 'External DNS', true,),\n]\n\nconst DomainTable = ({ toggle, userDomains, handleDelete, handleEdit }) => {\n const classes = useStyles()\n const [anchorEl, setAnchorEl] = React.useState(null)\n const [clicked, setClicked] = React.useState(false)\n\n const handleClick = (event) => {\n setClicked(true)\n setAnchorEl(event.currentTarget)\n }\n\n const copyToClipboard = (e) => {\n const el = document.createElement('textarea');\n el.value = e;\n el.setAttribute('readonly', '');\n el.style.position = 'absolute';\n el.style.left = '-9999px';\n document.body.appendChild(el);\n el.select();\n document.execCommand('copy');\n document.body.removeChild(el);\n }\n\n const handleClose = () => {\n setClicked(false)\n setAnchorEl(null)\n }\n return (\n <Fragment>\n <TableContainer className={toggle ? classes.darkPaper : classes.lightPaper}>\n <Table className={classes.table} aria-label=\"simple table\">\n <TableHead>\n <TableRow>\n <TableCell>\n Domain\n <Arrow className={classes.arrow} />\n </TableCell>\n <TableCell>Type</TableCell>\n <TableCell>TXT Record</TableCell>\n <TableCell>Status</TableCell>\n <TableCell align=\"right\"> Action</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {userDomains.map((row, index) => (\n <TableRow key={row.domainName}>\n <TableCell component=\"th\" scope=\"row\">\n <Box display=\"flex\" component=\"span\" alignItems=\"center\">\n <DomainListIcon /> <span>{row.domainName}</span>\n </Box>\n </TableCell>\n <TableCell>{row.domainType}</TableCell>\n <TableCell>\n <Box display=\"flex\" >\n <Box flex={0.1}>\n <Button onClick={() => copyToClipboard(row.txtRecord)}>\n <CopyIcon />\n </Button>\n </Box>\n <Box flex={0.9}>\n <Tooltip title={row.txtRecord}>\n <Box textOverflow=\"ellipsis\" overflow=\"hidden\" style={{ width: 200, whiteSpace: 'nowrap' }} >\n {row.txtRecord}\n </Box>\n </Tooltip>\n </Box>\n </Box>\n </TableCell>\n <TableCell>\n {row.status\n ?\n <span className={classes.statusWorking}>Configured and working</span>\n :\n <span className={classes.statusError}>Error</span>\n }\n </TableCell>\n {/* <TableCell align=\"right\">\n <IconButton size=\"small\" aria-controls=\"simple-menu\" aria-haspopup=\"true\" onClick={handleClick}>\n <FontAwesomeIcon color={clicked ? '#1DBF73' : '#7E84A3'} icon={MoreIcon} />\n </IconButton>\n\n </TableCell> */}\n <TableCell align=\"right\">\n <IconButton onClick={() => handleEdit(index, row)} size=\"small\" style={{ marginRight: '1rem' }} >\n {toggle ? <CreateOutlinedIcon style={{ color: '#fff' }} /> : <CreateOutlinedIcon style={{ color: '#323232' }} />}\n </IconButton>\n <IconButton onClick={() => handleDelete(index)} size=\"small\" >\n {toggle ? <FontAwesomeIcon color='#fff' icon={DeleteIcon} /> : <FontAwesomeIcon color='#323232' icon={DeleteIcon} />}\n </IconButton>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n <Menu\n className={toggle ? classes.darkMenuAction : classes.lightMenuAction}\n id=\"simple-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleClose}\n MenuProps={{\n anchorOrigin: {\n vertical: \"bottom\",\n horizontal: \"left\"\n },\n getContentAnchorEl: null\n }}\n >\n <MenuItem onClick={handleClose}>Edit Settings</MenuItem>\n <MenuItem onClick={handleClose}>Manage DNS</MenuItem>\n <MenuItem onClick={handleClose}>Setup Email</MenuItem>\n <MenuItem onClick={handleClose}>Create Website</MenuItem>\n <MenuItem onClick={handleClose} className={classes.colorDanger}>Delete Domain</MenuItem>\n\n </Menu>\n </Fragment>\n )\n}\nexport default DomainTable","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/assets/jss/no-apps/NoAppsStyle.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/AddEditStorage.js",["1022","1023","1024","1025","1026","1027","1028"],"import React, { createRef, Fragment, useEffect, useState } from \"react\";\nimport { Box, Button, Checkbox, FormControlLabel, makeStyles, Modal, Typography } from '@material-ui/core'\nimport Backdrop from '@material-ui/core/Backdrop'\nimport Fade from '@material-ui/core/Fade'\nimport { SnTextInput, SnSelect } from \"../Utils/SnFormikControlls\";\nimport { FieldArray, Formik } from \"formik\";\n\n\nconst useStyles = makeStyles((theme) => ({\n modal: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n },\n lightModalHeader: {\n fontSize: 32,\n fontWeight: 'bold',\n color: '#333333',\n borderBottom: '1px solid #70707085',\n padding: '1.3rem',\n '@media only screen and (max-width: 1440px)': {\n fontSize: 24,\n padding: '1rem',\n }\n },\n darkModalHeader: {\n fontSize: 32,\n fontWeight: 'bold',\n color: '#ffffff',\n borderBottom: '1px solid #70707085',\n padding: '1.3rem',\n '@media only screen and (max-width: 1440px)': {\n fontSize: 24,\n padding: '1rem',\n }\n },\n lightRoot: {\n width: 1180,\n maxWidth: '60%',\n boxShadow: '0px 2px 5px #15223221',\n borderRadius: 15,\n opacity: 1,\n '&, &:focus': {\n background: '#fff',\n border: 0,\n outline: 0,\n },\n },\n darkRoot: {\n width: 1180,\n maxWidth: '60%',\n boxShadow: '0px 2px 5px #15223221',\n borderRadius: 15,\n opacity: 1,\n '&, &:focus': {\n background: '#1E2029',\n border: 0,\n outline: 0,\n },\n },\n lightInputContainer: {\n '& input': {\n borderRadius: 10,\n paddingLeft: '1rem',\n paddingRight: '1rem',\n flex: 1,\n height: 60,\n fontSize: 21,\n color: '#2A2C34',\n background: '#fff',\n '@media only screen and (max-width: 575px)': {\n flex: '100%',\n marginBottom: 8, borderRadius: 10\n },\n // border: '1px solid #D9E1EC',\n '&:focus': {\n border: '1px solid #1DBF73',\n outline: 0\n },\n '@media only screen and (max-width: 1440px)': {\n height: 50,\n fontSize: 18,\n },\n\n },\n '@media only screen and (max-width: 575px)': {\n flexWrap: 'wrap',\n fontSize: 16,\n\n }\n },\n darkInputContainer: {\n '& input': {\n borderRadius: 10,\n paddingLeft: '1rem',\n paddingRight: '1rem',\n flex: 1,\n height: 60,\n fontSize: 21,\n color: '#fff',\n background: '#2A2C34',\n '@media only screen and (max-width: 575px)': {\n flex: '100%',\n marginBottom: 8, borderRadius: 10\n },\n border: '1px solid rgba(255, 255, 255, 0.1)',\n '&:focus': {\n border: '1px solid #1DBF73',\n outline: 0\n },\n '@media only screen and (max-width: 1440px)': {\n height: 50,\n fontSize: 18,\n },\n\n },\n '@media only screen and (max-width: 575px)': {\n flexWrap: 'wrap',\n fontSize: 16,\n\n }\n },\n label: {\n display: 'block',\n color: '#5A607F',\n marginBottom: 8,\n fontSize: 18,\n '@media only screen and (max-width: 575px)': {\n fontSize: 16,\n }\n },\n submitBtn: {\n // height: '100%',\n borderRadius: 5,\n backgroundColor: '#1DBF73!important',\n minWidth: 210,\n color: '#fff',\n fontSize: 21,\n fontWeight: 300,\n '@media only screen and (max-width: 1440px)': {\n fontSize: 18,\n },\n '@media only screen and (max-width: 575px)': {\n flex: '100%',\n borderRadius: 10,\n fontSize: 18,\n height: 50,\n width: '100%'\n }\n },\n form: {\n\n marginLeft: 'auto',\n marginRight: 'auto',\n // '@media only screen and (max-width: 1440px)': {\n // marginTop: 60,\n // marginBottom: 120,\n // },\n // '@media only screen and (max-width: 575px)': {\n // marginTop: 50,\n // marginBottom: 90,\n // }\n\n },\n varifyText: {\n color: \"#1DBF73\",\n fontWeight: 'bold',\n marginTop: '1rem',\n '@media only screen and (max-width: 575px)': {\n marginTop: 17,\n }\n },\n contentContainer: {\n paddingRight: '7%',\n paddingLeft: '4%',\n paddingBottom: '4%',\n '@media only screen and (max-width: 575px)': {\n paddingRight: '20px',\n paddingLeft: '20px',\n paddingBottom: '35px',\n }\n\n },\n lightSubheading: {\n color: '#333333',\n fontSize: 24,\n fontWeight: 'bold',\n marginTop: '1rem',\n\n '@media only screen and (max-width: 575px)': {\n fontSize: 18,\n marginTop: 9,\n\n }\n },\n darkSubheading: {\n color: '#fff',\n fontSize: 24,\n fontWeight: 'bold',\n marginTop: '1rem',\n\n '@media only screen and (max-width: 575px)': {\n fontSize: 18,\n marginTop: 9,\n\n }\n },\n p: {\n color: '#5A607F'\n },\n checkBox: {\n marginTop: 10,\n marginBottom: 10,\n\n '& span': {\n color: '#5A607F',\n '@media only screen and (max-width: 575px)': {\n fontSize: 16,\n },\n },\n\n '@media only screen and (max-width: 575px)': {\n // flex: '100%',\n // borderRadius: 10,\n // fontSize: 18,\n // height: 50\n }\n },\n input: {\n background: \"#fff\",\n border: \"1px solid #D9E1EC\",\n borderRadius: 8,\n height: 45,\n width: \"100%\",\n fontSize: 19,\n padding: 20,\n \"@media only screen and (max-width: 1440px)\": {\n height: 45,\n // width: '100%',\n fontSize: 16,\n padding: 15,\n },\n \"@media only screen and (max-width: 575px)\": {\n height: 40,\n // width: '100%',\n fontSize: \"14px !important\",\n padding: 10,\n },\n },\n inputContainer: {\n \"& > label\": {\n display: \"block\",\n color: \"#5A607F\",\n marginBottom: 7,\n },\n \"& input:focus, & select:focus\": {\n outline: \"none!important\",\n border: \"1px solid #1DBF73\",\n },\n marginTop: \"5px\",\n \"&\": {\n marginRight: \"1rem\",\n },\n \"& input, & input\": {\n fontSize: 16,\n },\n \"@media only screen and (max-width: 575px)\": {\n marginTop: \"5px\",\n marginRight: \"10px\",\n },\n },\n cancelBtn: {\n background: '#FF6060!important',\n color: '#fff',\n paddingLeft: '1.5rem',\n paddingRight: '1.5rem',\n minWidth: 130,\n marginRight: '1rem',\n '@media only screen and (max-width: 575px)': {\n fontSize: '12px',\n marginRight: '.4rem',\n paddingLeft: '.5rem',\n paddingRight: '.5rem',\n minWidth: 70,\n }\n },\n}))\n\nconst options = [\n { value: 'FREE', label: 'FREE' },\n { value: 'PAID', label: 'PAID' },\n]\n\nconst AddNewDomainTXT = ({ toggle, error, editDomain, newDomain, initailValueFormikObj, validationSchema, submitProfileForm, setNewDomain }) => {\n const classes = useStyles()\n const [formikObj, setFormikObj] = useState(initailValueFormikObj); // to store Formik Form data\n\n return (\n\n <div>\n <Modal\n aria-labelledby=\"transition-modal-title\"\n aria-describedby=\"transition-modal-description\"\n className={classes.modal}\n open={newDomain}\n onClose={() => setNewDomain(false)}\n closeAfterTransition\n BackdropComponent={Backdrop}\n BackdropProps={{\n timeout: 500,\n }}\n >\n <Fade in={newDomain}>\n <Box className={toggle ? classes.darkRoot : classes.lightRoot}>\n <div className={toggle ? classes.darkModalHeader : classes.lightModalHeader}>\n { editDomain !== null ? \"Edit Custom Storage\" : \"New Custom Storage\" }\n </div>\n <div className={classes.contentContainer}>\n\n <Formik\n initialValues={formikObj}\n validationSchema={validationSchema}\n validateOnChange={true}\n validateOnBlur={true}\n enableReinitialize={true}\n onSubmit={submitProfileForm}\n >\n {({ values, ...formik }) => (\n <form onSubmit={formik.handleSubmit}>\n <Box component=\"form\">\n <Typography className={classes.varifyText}>\n Verification\n </Typography>\n <Box display=\"flex\" className={`${classes.formRow} formSiteRow`}>\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnTextInput\n label=\"PortalName\"\n name=\"portalName\"\n className={classes.input}\n type=\"text\"\n toggle={toggle}\n />\n </Box>\n </Box>\n <Box display=\"flex\" className={`${classes.formRow} formSiteRow`}>\n <Box className={`${classes.inputContainer}`} flex={1}>\n <label>Portal Type</label>\n <Box>\n <SnSelect\n toggle={toggle}\n label=\"Portal Type\"\n name=\"portalType\"\n options={options}\n />\n </Box>\n </Box>\n </Box>\n <Box display=\"flex\" className={`${classes.formRow} formSiteRow`}>\n <Box className={`${classes.inputContainer}`} flex={1}>\n <SnTextInput\n label=\"PortalUrl\"\n name=\"portalUrl\"\n className={classes.input}\n type=\"text\"\n toggle={toggle}\n />\n </Box>\n </Box>\n <Box display=\"flex\" style={{ float: 'right', marginBottom: 10, marginTop: 10 }} className={`${classes.formRow} formSiteRow`}>\n <Button className={classes.cancelBtn} onClick={()=>setNewDomain(false)}>Cancel</Button> \n <Button className={classes.submitBtn} onClick={formik.handleSubmit}>Save</Button>\n </Box>\n { error ? <Box display=\"flex\" style={{ marginBottom: 10, marginTop: 10 }} className={`${classes.formRow} formSiteRow`}>\n <Typography style={{ color: 'red' }}>\n {error}\n </Typography>\n </Box> : null }\n </Box>\n </form>\n )}\n </Formik>\n </div>\n </Box>\n </Fade>\n </Modal>\n </div>\n )\n}\n\nexport default AddNewDomainTXT","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Hosting/StorageTable.js",["1029"],"import React, { Fragment } from 'react'\nimport Menu from '@material-ui/core/Menu'\nimport { makeStyles } from '@material-ui/core/styles'\nimport Table from '@material-ui/core/Table'\nimport TableBody from '@material-ui/core/TableBody'\nimport TableCell from '@material-ui/core/TableCell'\nimport TableContainer from '@material-ui/core/TableContainer'\nimport TableHead from '@material-ui/core/TableHead'\nimport TableRow from '@material-ui/core/TableRow'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faTrashAlt as DeleteIcon } from '@fortawesome/free-solid-svg-icons'\nimport { ReactComponent as DomainListIcon } from '../../assets/img/icons/listicon.svg'\nimport { ReactComponent as Arrow } from '../../assets/img/icons/arrowdow.svg'\nimport CreateOutlinedIcon from '@material-ui/icons/CreateOutlined'\nimport { Box, IconButton, MenuItem } from '@material-ui/core'\n\nconst useStyles = makeStyles({\n table: {\n minWidth: 650,\n },\n lightPaper: {\n marginTop: 10,\n \"& th, & td\": {\n border: 0\n },\n '& tbody tr th ~ td:not(:last-child)': {\n color: '#6E77AA',\n fontWeight: 'normal'\n },\n '& tbody th': {\n fontWeight: 700\n },\n '& thead': {\n\n '& th': {\n color: '#fff',\n lineHeight: '.8rem',\n background: '#1DBF73',\n\n }\n },\n '& tr th, & tr td': {\n fontSize: 18,\n '@media only screen and (max-width: 1440px)': {\n fontSize: 16\n },\n '&:first-child': {\n borderRadius: '5px 0 0px 5px'\n },\n '&:last-child': {\n borderRadius: '0px 5px 5px 0px'\n }\n },\n '& table': {\n borderCollapse: 'separate',\n borderSpacing: '0 8px'\n },\n /* 'tr.MuiTableRow-root': {\n background: '#2A2C34!important'\n }, */\n '& tbody tr td,& tbody tr th': {\n background: '#fff'\n },\n '& tbody th svg': {\n marginRight: 10\n }\n },\n darkPaper: {\n marginTop: 10,\n \"& th, & td\": {\n border: 0\n },\n '& tbody tr th ~ td:not(:last-child)': {\n color: '#6E77AA',\n fontWeight: 'normal'\n },\n '& tbody th': {\n fontWeight: 700\n },\n '& thead': {\n\n '& th': {\n color: '#fff',\n lineHeight: '.8rem',\n background: '#1DBF73',\n\n }\n },\n '& tr th, & tr td': {\n fontSize: 18,\n '@media only screen and (max-width: 1440px)': {\n fontSize: 16\n },\n '&:first-child': {\n borderRadius: '5px 0 0px 5px'\n },\n '&:last-child': {\n borderRadius: '0px 5px 5px 0px'\n }\n },\n '& table': {\n borderCollapse: 'separate',\n borderSpacing: '0 8px'\n },\n /* 'tr.MuiTableRow-root': {\n background: '#2A2C34!important'\n }, */\n '& tbody tr td,& tbody tr th': {\n background: '#2A2C34',\n color: '#fff'\n },\n '& tbody th svg': {\n marginRight: 10\n }\n },\n statusWorking: {\n color: '#1DBF73'\n },\n statusError: {\n color: '#FF6060'\n },\n arrow: {\n marginLeft: 10\n },\n menuAction: {\n\n\n marginTop: '3.4rem',\n '& ul': {\n minWidth: 230,\n '& li': {\n fontSize: 18,\n paddingBottom: 12,\n '@media only screen and (max-width: 1440px)': {\n fontSize: 16\n }\n }\n },\n '& .MuiPaper-root': {\n boxShadow: '0px 3px 6px #00000029',\n border: '1px solid #7070704F', overflow: 'visible'\n },\n '& .MuiPaper-root::before': {\n content: '\"\"',\n width: 0,\n height: 0,\n borderTop: '14px solid transparent',\n borderBottom: '14px solid transparent',\n borderRight: '14px solid #70707057',\n position: 'absolute',\n top: '-22px',\n right: 19,\n transform: 'rotate(90deg)'\n },\n '& .MuiPaper-root::after': {\n content: '\"\"',\n width: 0,\n height: 0,\n borderTop: '14px solid transparent',\n borderBottom: '14px solid transparent',\n borderRight: '14px solid #fff',\n // position: 'relative',\n position: 'absolute',\n top: '-21px',\n right: 19,\n transform: 'rotate(90deg)'\n }\n },\n colorDanger: {\n color: '#FF6060'\n }\n})\n\nfunction createData(portalName, portalURL, portalType, actions) {\n return { portalName, portalURL, portalType, actions }\n}\n\nconst rows = [\n createData('Skynet Labs Portal', 'https://siasky.dev', 'Free Tier',),\n createData('Community Portal', 'https://skyportal.xyz', 'Free Tier',),\n createData('Another Provider Portal', 'https://skynethub.io', 'Free Tier',),\n]\n\nconst StorageTable = ({toggle, handleDelete, handleEdit, userStorages }) => {\n const classes = useStyles()\n const [anchorEl, setAnchorEl] = React.useState(null)\n // const [clicked, setClicked] = React.useState(false)\n\n // const handleClick = (event) => {\n // setClicked(true)\n // setAnchorEl(event.currentTarget)\n // }\n\n const handleClose = () => {\n // setClicked(false)\n setAnchorEl(null)\n }\n return (\n <Fragment>\n <TableContainer className={toggle ? classes.darkPaper : classes.lightPaper}>\n <Table className={classes.table} aria-label=\"simple table\">\n <TableHead>\n <TableRow>\n <TableCell>\n Portal name\n <Arrow className={classes.arrow} />\n </TableCell>\n <TableCell>Portal URL</TableCell>\n <TableCell>Portal Type</TableCell>\n <TableCell align=\"right\">Actions</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {userStorages.map((row, index) => (\n <TableRow key={row.portalName}>\n <TableCell component=\"th\" scope=\"row\">\n <Box display=\"flex\" component=\"span\" alignItems=\"center\">\n <DomainListIcon /> <span>{row.portalName}</span>\n </Box>\n </TableCell>\n <TableCell>{row.portalUrl}</TableCell>\n <TableCell>{row.portalType}</TableCell>\n\n <TableCell align=\"right\">\n <IconButton onClick={() => handleEdit(index, row)} size=\"small\" style={{ marginRight: '1rem' }} >\n {toggle ? <CreateOutlinedIcon style={{ color: '#fff' }} /> : <CreateOutlinedIcon style={{ color: '#323232' }} />}\n </IconButton>\n <IconButton onClick={() => handleDelete(index)} size=\"small\" >\n {toggle ? <FontAwesomeIcon color='#fff' icon={DeleteIcon} /> : <FontAwesomeIcon color='#323232' icon={DeleteIcon} />}\n </IconButton>\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n <Menu\n className={classes.menuAction}\n id=\"simple-menu\"\n anchorEl={anchorEl}\n keepMounted\n open={Boolean(anchorEl)}\n onClose={handleClose}\n MenuProps={{\n anchorOrigin: {\n vertical: \"bottom\",\n horizontal: \"left\"\n },\n getContentAnchorEl: null\n }}\n >\n <MenuItem onClick={handleClose}>Edit Settings</MenuItem>\n <MenuItem onClick={handleClose}>Manage DNS</MenuItem>\n <MenuItem onClick={handleClose}>Setup Email</MenuItem>\n <MenuItem onClick={handleClose}>Create Website</MenuItem>\n <MenuItem onClick={handleClose} className={classes.colorDanger}>Delete Domain</MenuItem>\n\n </Menu>\n </Fragment>\n )\n}\nexport default StorageTable","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/hooks/useLoadHostedAppFromUrl.js",["1030","1031"],"import React, { useEffect, useState } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { useParams } from 'react-router-dom';\nimport { setLoaderDisplay } from '../redux/action-reducers-epic/SnLoaderAction';\nimport { getMyHostedApps } from '../service/SnSkappService';\n\n\n\nexport function useLoadHostedAppFromUrl() {\n const [appDetail, setAppDetail] = useState();\n let { appId } = useParams();\n const dispatch = useDispatch();\n\n useEffect(() => {\n appId && loadAppDetail();\n }, [appId]);\n\n const loadAppDetail = async ()=> {\n dispatch(setLoaderDisplay(true));\n const appDetail = (await getMyHostedApps([appId])).appDetailsList[appId];\n dispatch(setLoaderDisplay(false));\n setAppDetail(appDetail);\n return appDetail;\n };\n\n\n return [appDetail, setAppDetail];\n}","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/hooks/useShowHostingLinks.js",["1032","1033"],"import { useState, useEffect } from 'react';\nimport { useDispatch } from 'react-redux';\nimport { setShowHostingLinks } from '../redux/action-reducers-epic/SnShowHostingLinksAction';\n\nexport default function useShowHostingLinks() {\n const dispatch = useDispatch();\n\n useEffect(() => {\n dispatch(setShowHostingLinks(true));\n return () => {\n dispatch(setShowHostingLinks(false));\n }\n }, [])\n}","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/assets/jss/error-page/ErrorPageStyle.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/assets/jss/app-details/SubmitAppStyles.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/AppsList.js",["1034","1035"],"import { React, useEffect, useState } from \"react\"\nimport { makeStyles } from \"@material-ui/core/styles\"\nimport { Grid } from \"@material-ui/core\"\nimport AppCard from \"./AppCard\"\nimport styles from \"../../assets/jss/apps/AppListStyle\"\nimport InfiniteScroll from \"react-infinite-scroll-component\"\nimport Spiner from './Spiner'\nimport { useSelector } from \"react-redux\"\n\nconst useStyles = makeStyles(styles)\n\n const AppsList = ({ newData, handleInstall, updated, installedApps, toggle }) => {\n const classes = useStyles();\n\n // const [data, setData] = useState(newData);\n\n const [items, setItems] = useState(Array.from({ length: 12 }))\n const [alldata, setAlldata] = useState([])\n //console.log(\"from list\", newData)\n useEffect(() => {\n // console.log(items.length);\n if (items.length && newData) {\n const indexOfLastTodo = 1 * items.length\n const indexOfFirstTodo = indexOfLastTodo - items.length\n const currentTodos = newData?.slice(indexOfFirstTodo, indexOfLastTodo)\n setAlldata(currentTodos)\n }\n }, [items.length, newData])\n\n const fetchMoreData = () => {\n // a fake async api call like which sends\n // 20 more records in 1.5 secs\n setTimeout(() => {\n setItems(items.concat(Array.from({ length: 12 })))\n // this.setState({\n // items: this.state.items.concat(Array.from({ length: 20 })),\n // });\n }, 500)\n }\n\n return (\n <div className={`${classes.listContain} list-grid-container`}>\n <InfiniteScroll\n style={{ overflow: 'none' }}\n scrollableTarget=\"app-content\"\n className=\"infinite\"\n dataLength={items.length}\n next={fetchMoreData}\n hasMore={alldata.length === newData.length ? false : true}\n loader={<Spiner />}\n // endMessage={<h3>End of Apps</h3>}\n >\n <Grid container spacing={1} id=\"appsInfinteScroll\">\n {alldata &&\n alldata.map((item, index) => {\n return (\n <Grid item xs={6} sm={6} md={4} lg={3} xl={3} key={index}>\n <AppCard toggle={toggle} selectable={true} item={item} updated={installedApps.some(x => x && item && x.id == item.id) ? true : undefined } handleInstall={handleInstall}/>\n </Grid>\n )\n })}\n </Grid>\n </InfiniteScroll>\n </div>\n )\n}\n\nexport default AppsList\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/SelectItem.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/AppCard.js",["1036","1037","1038","1039","1040","1041","1042","1043","1044","1045"],"import { Box, IconButton, Tooltip } from \"@material-ui/core\";\nimport Button from \"@material-ui/core/Button\";\nimport Card from \"@material-ui/core/Card\";\nimport CardActionArea from \"@material-ui/core/CardActionArea\";\nimport CardActions from \"@material-ui/core/CardActions\";\nimport CardContent from \"@material-ui/core/CardContent\";\nimport { makeStyles } from \"@material-ui/core/styles\";\nimport Typography from \"@material-ui/core/Typography\";\nimport DataUsageIcon from \"@material-ui/icons/DataUsage\";\nimport FavoriteBorderOutlinedIcon from \"@material-ui/icons/FavoriteBorderOutlined\";\nimport FavoriteOutlinedIcon from \"@material-ui/icons/FavoriteOutlined\";\nimport LaunchOutlinedIcon from \"@material-ui/icons/LaunchOutlined\";\nimport ThumbUpAltIcon from \"@material-ui/icons/ThumbUpAlt\";\nimport ThumbUpAltOutlinedIcon from \"@material-ui/icons/ThumbUpAltOutlined\";\nimport VisibilityIcon from \"@material-ui/icons/Visibility\";\nimport millify from \"millify\";\nimport React, { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\n// import { ReactComponent as HeartIcon } from \"../../assets/img/icons/Heart.svg\"\nimport { ReactComponent as HeartIcon1 } from \"../../assets/img/icons/Heart1.svg\";\nimport { ReactComponent as MsgIcon } from \"../../assets/img/icons/Messages, Chat.15.svg\";\nimport { ReactComponent as ShareIcon1 } from \"../../assets/img/icons/share.11.svg\";\n// const MobileBreakPoint = '575px'\n//import styles\nimport styles from \"../../assets/jss/apps/AppCardStyle\";\nimport { setAppStatsAction } from \"../../redux/action-reducers-epic/SnAppStatsAction\";\nimport { getPortalUrl } from \"../../service/skynet-api\";\nimport {\n getAggregatedAppStatsByAppId,\n getAppStats,\n setAppStatsEvent,\n} from \"../../service/SnSkappService\";\nimport {\n EVENT_APP_ACCESSED,\n EVENT_APP_FAVORITE,\n EVENT_APP_FAVORITE_REMOVED,\n EVENT_APP_LIKED,\n EVENT_APP_LIKED_REMOVED,\n EVENT_APP_VIEWED,\n} from \"../../utils/SnConstants\";\nimport ShareApp from \"../ShareApp/ShareApp\";\n\nconst useStyles = makeStyles(styles);\n\nconst appBg = {\n Social: \"rgb(29, 191, 115)\",\n Video: \"lightgray\",\n Pictures: \"gray\",\n Music: \"#8ad4c5\",\n Productivity: \"#cf4cac\",\n Utilities: \"#cf4cac\",\n Games: \"#cf4cac\",\n Blogs: \"#cf4cac\",\n Software: \"#cf4cac\",\n DAC: \"#cf4cac\",\n Livestream: \"#cf4cac\",\n Books: \"#cf4cac\",\n Marketplace: \"#cf4cac\",\n Finance: \"#cf4cac\",\n SkynetPortal: \"#cf4cac\",\n Portal: \"#cf4cac\",\n};\n// const appBg = {\n// 'Social': \"#000000\",\n// 'Video': \"#000000\",\n// 'Pictures': \"#000000\",\n// 'Music': \"#000000\",\n// 'Productivity': \"#000000\",\n// 'Utilities': \"#000000\",\n// 'Games': \"#000000\",\n// 'Blogs': \"#000000\",\n// 'Software':\"#000000\",\n// 'DAC': \"#000000\",\n// 'Livestream': \"#000000\",\n// 'Books': \"#000000\",\n// 'Marketplace': \"#000000\",\n// 'Finance': \"#000000\",\n// 'SkynetPortal': \"#000000\",\n// 'Portal': \"#000000\",\n// }\n\nconst AppCard = ({ selectable, updated, item, handleInstall, toggle }) => {\n const dispatch = useDispatch();\n const history = useHistory();\n const classes = useStyles();\n\n const [modalOpen, setModalOpen] = useState(false);\n const HandleShareModel = () => {\n modalOpen ? setModalOpen(false) : setModalOpen(true);\n };\n const [isCardSelected, setIsCardSelected] = useState(false);\n const [appStats, setAppStats] = useState(false);\n const [aggregatedAppStats, setAggregatedAppStats] = useState(false);\n\n const stUserSession = useSelector((state) => state.userSession);\n const [Fav, setFav] = useState({});\n const [liked, setLiked] = useState({});\n\n useEffect(() => {\n if (item) {\n if (stUserSession) {\n fetchMyAppStats();\n }\n fetchAggregatedAppStats();\n // onload get apps stats data and load in store\n //dispatch(getAppStatsAction(data.id));\n }\n }, [item]);\n\n //JSON Object\n const fetchMyAppStats = async () => {\n const result = await getAppStats(item.id);\n setAppStats(result);\n };\n\n // View|access|likes|fav\n const fetchAggregatedAppStats = async () => {\n const result = await getAggregatedAppStatsByAppId(item.id);\n setAggregatedAppStats(result);\n };\n const appStatsAction = (eventType) => {\n // EVENT_APP_FAVORITE, EVENT_APP_FAVORITE_REMOVED\n dispatch(setAppStatsAction(eventType, item.id));\n };\n const pushRoute = (getID) => {\n let win = window.open(`/appdetail/${getID}`, \"_blank\");\n win.focus();\n };\n\n const checkBoxClickHanlder = async (getID) => {\n isCardSelected ? setIsCardSelected(false) : setIsCardSelected(true);\n };\n\n const ViewAppDetail = async (appId) => {\n dispatch(setAppStatsAction(EVENT_APP_VIEWED, appId));\n //await setAppStatsEvent(EVENT_APP_VIEWED, appId);\n history.push(`/appdetail/${appId}`);\n };\n\n const OpenAppUrl = (url) => {\n window.open(url, \"_blank\");\n // win.focus();\n };\n\n const AccessApp = async (appId, appurl) => {\n dispatch(setAppStatsAction(EVENT_APP_ACCESSED, appId));\n OpenAppUrl(appurl);\n };\n // logical Tool tip\n const descRef = React.createRef();\n const tagsRef = React.createRef();\n\n const [showLink, setShowLink] = useState(false);\n const [allowToolTip, setAllowToolTip] = useState(false);\n React.useLayoutEffect(() => {\n if (tagsRef.current.scrollHeight > tagsRef.current.offsetHeight) {\n setAllowToolTip(true);\n } else {\n setAllowToolTip(false);\n }\n // console.log(\"descRef scroll height\" + tagsRef.current.scrollHeight, \"offset\" + tagsRef.current.offsetHeight)\n }, [tagsRef]);\n React.useLayoutEffect(() => {\n if (descRef.current.scrollHeight > descRef.current.offsetHeight + 1) {\n setShowLink(true);\n } else {\n setShowLink(false);\n }\n\n // console.log(\"descRef scroll height\" + tagsRef.current.scrollHeight, \"offset\" + tagsRef.current.offsetHeight)\n }, [descRef]);\n\n // like and fav ui\n // const [likeClick, setLikeClick] = useState(false)\n const [uiSpiner, setUiSpiner] = useState(null);\n const [uiliked, setUiLiked] = useState(null);\n const onLikeClick = () => {\n setUiSpiner(true);\n setTimeout(() => {\n setUiSpiner(false);\n }, 2000);\n };\n // useEffect(() => {\n // setUiSpiner(null)\n\n // }, [])\n return (\n <Box className=\"card-container\" position=\"relative\">\n {/* {selectable && (\n <Box\n role=\"button\"\n onClick={checkBoxClickHanlder}\n className={classes.checkBox}\n style={{ opacity: isCardSelected ? 1 : 0.62 }}\n >\n <FiberManualRecordRoundedIcon />\n {isCardSelected && (\n <CheckRoundedIcon className={classes.checkedIcon} />\n )}\n </Box>\n )} */}\n <>\n <ShareApp shareModelOpen={modalOpen} shareModelFn={HandleShareModel} />\n {item && (\n <Card className={toggle ? classes.darkRoot : classes.lightRoot}>\n <CardActionArea className={classes.cardActionArea} component=\"div\">\n <div onClick={() => ViewAppDetail(item.id)}>\n <Box\n display=\"flex\"\n justifyContent=\"center\"\n alignContent=\"center\"\n className={`${classes.media} appCardHeader`}\n style={{\n backgroundColor: appBg[item.content.category]\n ? appBg[item.content.category]\n : Math.floor(Math.random() * 16777215).toString(16),\n }}\n >\n <span className=\"app-logo-img\">\n <img\n src={\n item.content.skappLogo.thumbnail &&\n getPortalUrl() +\n `${item.content.skappLogo.thumbnail.split(\"sia:\")[1]}`\n }\n alt=\"\"\n />\n </span>\n </Box>\n {toggle ? (\n <div className=\"lightCategoryOnAppCard\">\n <span>{item.content.category}</span>\n </div>\n ) : (\n <div className=\"darkCategoryOnAppCard\">\n <span>{item.content.category}</span>\n </div>\n )}\n </div>\n <CardContent className={classes.cardContent}>\n <Box\n className=\"card-head\"\n display=\"flex\"\n justifyContent=\"space-between\"\n alignItems=\"center\"\n >\n <Typography\n onClick={() => AccessApp(item.id, item.content.appUrl)}\n className={\n toggle ? classes.darkCardH2 : classes.lightCardH2\n }\n gutterBottom\n variant=\"h5\"\n component=\"h2\"\n >\n {item.content.appname}\n </Typography>\n <Box marginRight=\"auto\">\n <Button\n size=\"small\"\n color=\"default\"\n className={classes.versionBtn}\n >\n Version {item.version}\n </Button>\n </Box>\n <Box className={classes.shareAndSaveBtn}>\n <IconButton\n aria-label=\"Favourite Button\"\n size=\"small\"\n color=\"#fff\"\n className={classes.heartBtn}\n >\n <HeartIcon1 />\n </IconButton>\n <IconButton\n onClick={HandleShareModel}\n aria-label=\"Share Button\"\n size=\"small\"\n color=\"#fff\"\n className={classes.shareBtn}\n >\n <ShareIcon1 />\n </IconButton>\n </Box>\n </Box>\n <Typography\n ref={descRef}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"p\"\n className={`${classes.cardSmallText} ${classes.desc}`}\n >\n {item.content.appDescription}\n {showLink && (\n <span\n className={classes.moreDescBtn}\n onClick={() => ViewAppDetail(item.id)}\n >\n {\" \"}\n ...more\n </span>\n )}\n </Typography>\n {item.content.tags && allowToolTip ? (\n <Box\n position=\"relative\"\n className={`${classes.tags} tags-card`}\n ref={tagsRef}\n >\n {item.content.tags &&\n item.content.tags.map((item, index) => {\n return (\n // <Typography variant=\"caption\" component=\"span\">\n // #{item}\n // </Typography>\n <>\n <Typography\n className=\"tagOnAppCard\"\n variant=\"caption\"\n component=\"span\"\n >\n #{item}\n </Typography>\n </>\n );\n })}\n {/* <Typography variant=\"caption\" component=\"span\">\n Programms\n </Typography>\n <Typography variant=\"caption\" component=\"span\">\n |\n </Typography>\n <Typography variant=\"caption\" component=\"span\">\n Utilities\n </Typography> */}\n <Tooltip\n title={\n item.content.tags &&\n item.content.tags.map((item) => \" #\" + item)\n }\n >\n <span\n style={{\n fontSize: \"0.75rem\",\n fontWeight: 400,\n }}\n className={classes.moreDescBtn}\n >\n {\" \"}\n ...more\n </span>\n </Tooltip>\n </Box>\n ) : (\n <Box className={`${classes.tags} tags-card`} ref={tagsRef}>\n {item.content.tags &&\n item.content.tags.map((item, index) => {\n return (\n // <Typography variant=\"caption\" component=\"span\">\n // #{item}\n // </Typography>\n <>\n <Typography\n className=\"tagOnAppCard\"\n variant=\"caption\"\n component=\"span\"\n >\n #{item}\n </Typography>\n </>\n );\n })}\n {/* <Typography variant=\"caption\" component=\"span\">\n Programms\n </Typography>\n <Typography variant=\"caption\" component=\"span\">\n |\n </Typography>\n <Typography variant=\"caption\" component=\"span\">\n Utilities\n </Typography> */}\n </Box>\n )}\n {/* <Box className={`${classes.tags} tags-card`} display=\"flex\" >\n\n <Typography variant=\"caption\" component='span'>\n Programms\n </Typography>\n <Typography variant=\"caption\" component='span'>\n |\n </Typography>\n <Typography variant=\"caption\" component='span'>\n Utilities\n </Typography>\n </Box> */}\n\n {/* <div\n ref={descRef}\n className={`${classes.cardSmallText} ${classes.desc}`}\n\n >\n {showLink && <span className={classes.moreDescBtn} onClick={() => ViewAppDetail(item.id)}> ...more</span>}\nLorem ipsum dolor sit amet co\n </div> */}\n {/* {\n \n ? <Tooltip title={item.content.appDescription}>\n \n </Tooltip>\n : <Typography\n ref={divRef}\n variant=\"body2\"\n color=\"textSecondary\"\n component=\"p\"\n className={`${classes.cardSmallText} ${classes.desc}`}\n\n\n >\n {item.content.appDescription}\n </Typography>\n } */}\n </CardContent>\n </CardActionArea>\n\n <CardActions\n className={`${\n toggle ? classes.darkDetailsArea : classes.lightDetailsArea\n } cardFooter`}\n >\n <Box\n display=\"flex\"\n width=\"100%\"\n paddingLeft=\".45rem\"\n paddingTop=\"6px\"\n alignSelf=\"flex-end\"\n paddingRight=\".45rem\"\n >\n <Box\n display=\"flex\"\n alignItems=\"center\"\n className={classes.footerItem}\n >\n <Tooltip title=\"Number of views\" placement=\"top\" arrow>\n <VisibilityIcon className={classes.cardFooterIcon} />\n </Tooltip>\n <Typography variant=\"caption\">\n {aggregatedAppStats[0] && millify(aggregatedAppStats[0])}\n </Typography>\n </Box>\n <Box\n display=\"flex\"\n alignItems=\"center\"\n className={classes.footerItem}\n >\n <Tooltip title=\"Number of App Access\" placement=\"top\" arrow>\n <LaunchOutlinedIcon className={classes.cardFooterIcon} />\n </Tooltip>\n <Typography variant=\"caption\">\n {aggregatedAppStats[1] && millify(aggregatedAppStats[1])}\n </Typography>\n </Box>\n {/* <Box\n display=\"flex\"\n alignItems=\"center\"\n className={`${classes.footerItem} ${classes.ratingDiv}`}\n >\n <StarIcon className={classes.cardFooterIcon} />\n <Typography variant=\"caption\">2.5k</Typography>\n </Box> */}\n <Box\n display=\"flex\"\n alignItems=\"center\"\n className={classes.footerItem}\n >\n {parseInt(appStats?.content?.liked) === parseInt(1) ? (\n <Tooltip\n title=\"Number of user liked this app\"\n placement=\"top\"\n arrow\n >\n {uiSpiner === null ? (\n <ThumbUpAltIcon\n className={`${classes.cardFooterIcon} unlike`}\n onClick={() => {\n appStatsAction(EVENT_APP_LIKED_REMOVED);\n onLikeClick();\n }}\n />\n ) : uiSpiner === false ? (\n <ThumbUpAltOutlinedIcon\n className={`${classes.cardFooterIcon} like`}\n onClick={() => {\n appStatsAction(EVENT_APP_LIKED);\n onLikeClick();\n }}\n />\n ) : (\n <DataUsageIcon\n className={`${classes.cardFooterIcon}`}\n />\n )}\n </Tooltip>\n ) : (\n <Tooltip\n title=\"Number of user liked this app\"\n placement=\"top\"\n arrow\n >\n {uiSpiner === null ? (\n <ThumbUpAltOutlinedIcon\n className={`${classes.cardFooterIcon} like`}\n onClick={() => {\n appStatsAction(EVENT_APP_LIKED);\n onLikeClick();\n }}\n />\n ) : uiSpiner === false ? (\n <ThumbUpAltIcon\n className={`${classes.cardFooterIcon} unlike`}\n onClick={() => {\n appStatsAction(EVENT_APP_LIKED_REMOVED);\n onLikeClick();\n }}\n />\n ) : (\n <DataUsageIcon\n className={`${classes.cardFooterIcon}`}\n />\n )}\n </Tooltip>\n )}\n <Typography variant=\"caption\">\n {aggregatedAppStats[2] && millify(aggregatedAppStats[2])}\n </Typography>\n {/* <ThumbUpAltIcon className={classes.cardFooterIcon} />\n <Typography variant=\"caption\">2.5k</Typography> */}\n </Box>\n <Box\n display=\"flex\"\n alignItems=\"center\"\n className={classes.footerItem}\n >\n {/* <FavoriteOutlinedIcon className={classes.cardFooterIcon} />\n <Typography variant=\"caption\">2.5k</Typography> */}\n {parseInt(appStats?.content?.favorite) === parseInt(1) ? (\n <Tooltip\n title=\"Number of user marked this App Favorite\"\n placement=\"top\"\n arrow\n >\n <FavoriteOutlinedIcon\n className={`${classes.cardFooterIcon} unFav`}\n onClick={() =>\n appStatsAction(EVENT_APP_FAVORITE_REMOVED)\n }\n />\n </Tooltip>\n ) : (\n <Tooltip\n title=\"Number of user marked this App Favorite\"\n placement=\"top\"\n arrow\n >\n <FavoriteBorderOutlinedIcon\n className={`${classes.cardFooterIcon} fav`}\n onClick={() => appStatsAction(EVENT_APP_FAVORITE)}\n />\n </Tooltip>\n )}\n <Typography variant=\"caption\">\n {aggregatedAppStats[3] && millify(aggregatedAppStats[3])}\n </Typography>\n </Box>\n <Box\n display=\"flex\"\n alignItems=\"center\"\n className={classes.footerItem}\n >\n <MsgIcon\n className={`${classes.cardFooterIcon} ${\n toggle ? classes.darkIcon : classes.lightIcon\n }`}\n />\n <Typography variant=\"caption\">{millify(1456044)}</Typography>\n </Box>\n {/* <Box marginLeft=\"auto\">\n <Button\n size=\"small\"\n color=\"default\"\n className={classes.versionBtn}\n >\n Version {item.version}\n </Button>\n </Box> */}\n </Box>\n </CardActions>\n <CardActions className={classes.footerBottom}>\n <Box>\n <Button\n size=\"medium\"\n className={`${classes.installBtn} ${\n updated ? classes.bgUnistall : classes.bgUpdate\n }`}\n onClick={(e) =>\n handleInstall(item, updated ? \"uninstall\" : \"install\")\n }\n >\n {updated && \"Uninstall\"}\n {updated === false && \"Update\"}\n {updated === undefined && \"Install\"}\n </Button>\n </Box>\n {/* <Box className={`${classes.tags} tags-card`} display=\"flex\" >\n {item.content.tags && item.content.tags.map((item, index) => {\n return (\n <Typography variant=\"caption\" component=\"span\">\n #{item}\n </Typography>\n )\n })}\n </Box> */}\n </CardActions>\n </Card>\n )}\n </>\n </Box>\n );\n};\nexport default AppCard;\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnAggregatedAppStatsAction.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/assets/jss/apps/AppListStyle.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/service/dac/userprofile-api.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/Footer/Footer.js",["1046","1047","1048","1049","1050","1051","1052"],"import { Email, GitHub } from '@material-ui/icons'\nimport React from 'react'\nimport { ReactComponent as FacebookIcon } from '../../assets/img/icons/001-facebook.svg'\nimport { ReactComponent as WhatsappIcon } from '../../assets/img/icons/003-whatsapp.svg'\nimport { ReactComponent as YoutubeIcon } from '../../assets/img/icons/008-youtube.svg'\nimport { ReactComponent as LinkedInIcon } from '../../assets/img/icons/010-linkedin.svg'\nimport { ReactComponent as InstaIcon } from '../../assets/img/icons/011-instagram.svg'\nimport { ReactComponent as TwitterIcon } from '../../assets/img/icons/013-twitter.svg'\nimport { ReactComponent as RedditIcon } from '../../assets/img/icons/015-reddit.svg'\nimport Dis from '../../svg/Discord'\n\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\"\nimport { useSelector } from 'react-redux'\n// import { as filledStar } from \"@fortawesome/free-solid-svg-icons\"\nconst Footer = ({toggle}) => {\n const userSession = useSelector((state) => state.userSession)\n\n return (\n <>\n { \n !userSession && < footer className={toggle ? 'darkFooter' : 'lightFooter'} >\n <ul>\n\n <li>\n Help\n </li>\n <li>\n\n <a href=\"/SkySpaces-Privacy.Notice.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">\n Privacy Policy\n </a>\n </li>\n <li>\n <a href=\"/SkySpaces-Terms.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">\n Terms & Conditions\n </a>\n\n </li>\n </ul>\n <ul className=\"md-links\">\n {/* <li>\n <a href=\"#0\">\n <FacebookIcon />\n </a>\n</li>\n<li>\n <a href=\"#0\">\n <WhatsappIcon />\n </a>\n</li>\n<li>\n <a href=\"#0\">\n <YoutubeIcon />\n </a>\n</li>\n<li>\n <a href=\"#0\">\n <LinkedInIcon />\n </a>\n</li> */}\n {/* <li>\n <a href=\"#0\">\n <InstaIcon />\n </a>\n</li> */}\n <li>\n <a href=\"https://twitter.com/skynethub\" target=\"_blank\" rel=\"noopener noreferrer\">\n <TwitterIcon />\n </a>\n </li>\n {/* <li>\n <a href=\"#0\">\n <RedditIcon />\n </a>\n</li> */}\n <li>\n <a href=\"https://discord.com/invite/zuwNT4YsWD\" target=\"_blank\" rel=\"noopener noreferrer\">\n <Dis />\n </a>\n </li>\n <li>\n <a href=\"https://github.com/skynethubio/skapp\" target=\"_blank\" rel=\"noopener noreferrer\">\n <GitHub />\n </a>\n </li>\n\n <li>\n <a href=\"mailto:[email protected]\" target=\"_blank\" rel=\"noopener noreferrer\">\n <Email />\n </a>\n\n </li>\n </ul>\n </footer >}\n </>\n )\n}\n\nexport default Footer\n","/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/SelectedAppsHeader.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/slickarrows/SlickNextArrow.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/slickarrows/SlickPrevArrow.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/AppsComp/CustomPagination.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnSelectedHostedAppAction.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/assets/jss/hosting/AddNewSiteBtnStyle.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/assets/jss/hosting/HostingItemStyle.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/redux/action-reducers-epic/SnShowHostingLinksAction.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/components/ShareApp/ShareApp.js",[],"/Users/freya/MySpace/git/github/skynethubio/skapp-private-dev1/skapp-private/src/assets/jss/apps/AppCardStyle.js",[],{"ruleId":"1053","replacedBy":"1054"},{"ruleId":"1055","replacedBy":"1056"},{"ruleId":"1057","severity":1,"message":"1058","line":2,"column":3,"nodeType":"1059","messageId":"1060","endLine":2,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1061","line":8,"column":5,"nodeType":"1059","messageId":"1060","endLine":8,"endColumn":19},{"ruleId":"1057","severity":1,"message":"1062","line":11,"column":5,"nodeType":"1059","messageId":"1060","endLine":11,"endColumn":26},{"ruleId":"1057","severity":1,"message":"1063","line":14,"column":10,"nodeType":"1059","messageId":"1060","endLine":14,"endColumn":24},{"ruleId":"1064","severity":1,"message":"1065","line":203,"column":34,"nodeType":"1066","messageId":"1067","endLine":203,"endColumn":36},{"ruleId":"1057","severity":1,"message":"1068","line":207,"column":13,"nodeType":"1059","messageId":"1060","endLine":207,"endColumn":19},{"ruleId":"1064","severity":1,"message":"1065","line":209,"column":30,"nodeType":"1066","messageId":"1067","endLine":209,"endColumn":32},{"ruleId":"1057","severity":1,"message":"1069","line":214,"column":19,"nodeType":"1059","messageId":"1060","endLine":214,"endColumn":25},{"ruleId":"1057","severity":1,"message":"1070","line":8,"column":8,"nodeType":"1059","messageId":"1060","endLine":8,"endColumn":21},{"ruleId":"1057","severity":1,"message":"1071","line":22,"column":5,"nodeType":"1059","messageId":"1060","endLine":22,"endColumn":13},{"ruleId":"1057","severity":1,"message":"1072","line":24,"column":10,"nodeType":"1059","messageId":"1060","endLine":24,"endColumn":41},{"ruleId":"1057","severity":1,"message":"1073","line":2,"column":10,"nodeType":"1059","messageId":"1060","endLine":2,"endColumn":13},{"ruleId":"1057","severity":1,"message":"1074","line":43,"column":9,"nodeType":"1059","messageId":"1060","endLine":43,"endColumn":20},{"ruleId":"1075","severity":1,"message":"1076","line":46,"column":13,"nodeType":"1077","endLine":49,"endColumn":4},{"ruleId":"1078","severity":1,"message":"1079","line":3,"column":1,"nodeType":"1080","endLine":10,"endColumn":2},{"ruleId":"1078","severity":1,"message":"1079","line":4,"column":1,"nodeType":"1080","endLine":17,"endColumn":2},{"ruleId":"1078","severity":1,"message":"1079","line":4,"column":1,"nodeType":"1080","endLine":17,"endColumn":2},{"ruleId":"1057","severity":1,"message":"1081","line":1,"column":40,"nodeType":"1059","messageId":"1060","endLine":1,"endColumn":63},{"ruleId":"1078","severity":1,"message":"1079","line":3,"column":1,"nodeType":"1080","endLine":11,"endColumn":2},{"ruleId":"1078","severity":1,"message":"1079","line":4,"column":1,"nodeType":"1080","endLine":14,"endColumn":2},{"ruleId":"1082","severity":1,"message":"1083","line":13,"column":12,"nodeType":"1084","messageId":"1085","endLine":13,"endColumn":13,"fix":"1086"},{"ruleId":"1078","severity":1,"message":"1079","line":5,"column":1,"nodeType":"1080","endLine":12,"endColumn":2},{"ruleId":"1082","severity":1,"message":"1083","line":14,"column":12,"nodeType":"1084","messageId":"1085","endLine":14,"endColumn":13,"fix":"1087"},{"ruleId":"1082","severity":1,"message":"1083","line":32,"column":12,"nodeType":"1084","messageId":"1085","endLine":32,"endColumn":13,"fix":"1088"},{"ruleId":"1057","severity":1,"message":"1089","line":7,"column":30,"nodeType":"1059","messageId":"1060","endLine":7,"endColumn":61},{"ruleId":"1082","severity":1,"message":"1083","line":14,"column":12,"nodeType":"1084","messageId":"1085","endLine":14,"endColumn":13,"fix":"1090"},{"ruleId":"1082","severity":1,"message":"1083","line":30,"column":12,"nodeType":"1084","messageId":"1085","endLine":30,"endColumn":13,"fix":"1091"},{"ruleId":"1082","severity":1,"message":"1083","line":46,"column":12,"nodeType":"1084","messageId":"1085","endLine":46,"endColumn":13,"fix":"1092"},{"ruleId":"1078","severity":1,"message":"1079","line":3,"column":1,"nodeType":"1080","endLine":10,"endColumn":2},{"ruleId":"1057","severity":1,"message":"1093","line":8,"column":8,"nodeType":"1059","messageId":"1060","endLine":8,"endColumn":13},{"ruleId":"1082","severity":1,"message":"1083","line":11,"column":12,"nodeType":"1084","messageId":"1085","endLine":11,"endColumn":13,"fix":"1094"},{"ruleId":"1057","severity":1,"message":"1095","line":1,"column":9,"nodeType":"1059","messageId":"1060","endLine":1,"endColumn":34},{"ruleId":"1078","severity":1,"message":"1079","line":5,"column":1,"nodeType":"1080","endLine":12,"endColumn":2},{"ruleId":"1078","severity":1,"message":"1079","line":3,"column":1,"nodeType":"1080","endLine":10,"endColumn":2},{"ruleId":"1078","severity":1,"message":"1079","line":6,"column":1,"nodeType":"1080","endLine":15,"endColumn":2},{"ruleId":"1078","severity":1,"message":"1079","line":3,"column":1,"nodeType":"1080","endLine":10,"endColumn":2},{"ruleId":"1082","severity":1,"message":"1083","line":14,"column":12,"nodeType":"1084","messageId":"1085","endLine":14,"endColumn":13,"fix":"1096"},{"ruleId":"1082","severity":1,"message":"1083","line":30,"column":12,"nodeType":"1084","messageId":"1085","endLine":30,"endColumn":13,"fix":"1097"},{"ruleId":"1082","severity":1,"message":"1083","line":59,"column":12,"nodeType":"1084","messageId":"1085","endLine":59,"endColumn":13,"fix":"1098"},{"ruleId":"1078","severity":1,"message":"1079","line":7,"column":1,"nodeType":"1080","endLine":14,"endColumn":2},{"ruleId":"1078","severity":1,"message":"1079","line":4,"column":1,"nodeType":"1080","endLine":11,"endColumn":2},{"ruleId":"1082","severity":1,"message":"1083","line":59,"column":12,"nodeType":"1084","messageId":"1085","endLine":59,"endColumn":13,"fix":"1099"},{"ruleId":"1078","severity":1,"message":"1079","line":7,"column":1,"nodeType":"1080","endLine":14,"endColumn":2},{"ruleId":"1057","severity":1,"message":"1100","line":1,"column":37,"nodeType":"1059","messageId":"1060","endLine":1,"endColumn":46},{"ruleId":"1057","severity":1,"message":"1101","line":6,"column":8,"nodeType":"1059","messageId":"1060","endLine":6,"endColumn":17},{"ruleId":"1057","severity":1,"message":"1102","line":16,"column":8,"nodeType":"1059","messageId":"1060","endLine":16,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1103","line":25,"column":28,"nodeType":"1059","messageId":"1060","endLine":25,"endColumn":40},{"ruleId":"1057","severity":1,"message":"1104","line":26,"column":28,"nodeType":"1059","messageId":"1060","endLine":26,"endColumn":39},{"ruleId":"1057","severity":1,"message":"1105","line":35,"column":10,"nodeType":"1059","messageId":"1060","endLine":35,"endColumn":21},{"ruleId":"1057","severity":1,"message":"1101","line":7,"column":8,"nodeType":"1059","messageId":"1060","endLine":7,"endColumn":17},{"ruleId":"1057","severity":1,"message":"1106","line":13,"column":26,"nodeType":"1059","messageId":"1060","endLine":13,"endColumn":39},{"ruleId":"1057","severity":1,"message":"1102","line":16,"column":8,"nodeType":"1059","messageId":"1060","endLine":16,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1103","line":27,"column":28,"nodeType":"1059","messageId":"1060","endLine":27,"endColumn":40},{"ruleId":"1057","severity":1,"message":"1104","line":28,"column":28,"nodeType":"1059","messageId":"1060","endLine":28,"endColumn":39},{"ruleId":"1057","severity":1,"message":"1107","line":254,"column":11,"nodeType":"1059","messageId":"1060","endLine":254,"endColumn":21},{"ruleId":"1057","severity":1,"message":"1108","line":260,"column":11,"nodeType":"1059","messageId":"1060","endLine":260,"endColumn":20},{"ruleId":"1057","severity":1,"message":"1109","line":286,"column":11,"nodeType":"1059","messageId":"1060","endLine":286,"endColumn":26},{"ruleId":"1075","severity":1,"message":"1110","line":307,"column":8,"nodeType":"1111","endLine":307,"endColumn":10,"suggestions":"1112"},{"ruleId":"1057","severity":1,"message":"1113","line":6,"column":8,"nodeType":"1059","messageId":"1060","endLine":6,"endColumn":21},{"ruleId":"1057","severity":1,"message":"1114","line":7,"column":8,"nodeType":"1059","messageId":"1060","endLine":7,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1115","line":13,"column":8,"nodeType":"1059","messageId":"1060","endLine":13,"endColumn":24},{"ruleId":"1057","severity":1,"message":"1116","line":18,"column":10,"nodeType":"1059","messageId":"1060","endLine":18,"endColumn":20},{"ruleId":"1057","severity":1,"message":"1117","line":19,"column":10,"nodeType":"1059","messageId":"1060","endLine":19,"endColumn":26},{"ruleId":"1075","severity":1,"message":"1076","line":158,"column":13,"nodeType":"1077","endLine":164,"endColumn":4},{"ruleId":"1075","severity":1,"message":"1118","line":164,"column":6,"nodeType":"1111","endLine":164,"endColumn":8,"suggestions":"1119"},{"ruleId":"1064","severity":1,"message":"1065","line":173,"column":13,"nodeType":"1066","messageId":"1067","endLine":173,"endColumn":15},{"ruleId":"1120","severity":1,"message":"1121","line":180,"column":3,"nodeType":"1122","messageId":"1123","endLine":180,"endColumn":100},{"ruleId":"1057","severity":1,"message":"1124","line":7,"column":8,"nodeType":"1059","messageId":"1060","endLine":7,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1125","line":8,"column":8,"nodeType":"1059","messageId":"1060","endLine":8,"endColumn":17},{"ruleId":"1057","severity":1,"message":"1126","line":11,"column":8,"nodeType":"1059","messageId":"1060","endLine":11,"endColumn":19},{"ruleId":"1057","severity":1,"message":"1127","line":24,"column":10,"nodeType":"1059","messageId":"1060","endLine":24,"endColumn":35},{"ruleId":"1075","severity":1,"message":"1076","line":220,"column":15,"nodeType":"1077","endLine":230,"endColumn":6},{"ruleId":"1075","severity":1,"message":"1128","line":230,"column":8,"nodeType":"1111","endLine":230,"endColumn":10,"suggestions":"1129"},{"ruleId":"1057","severity":1,"message":"1130","line":258,"column":36,"nodeType":"1059","messageId":"1060","endLine":258,"endColumn":49},{"ruleId":"1064","severity":1,"message":"1065","line":265,"column":21,"nodeType":"1066","messageId":"1067","endLine":265,"endColumn":23},{"ruleId":"1064","severity":1,"message":"1065","line":271,"column":21,"nodeType":"1066","messageId":"1067","endLine":271,"endColumn":23},{"ruleId":"1064","severity":1,"message":"1065","line":357,"column":34,"nodeType":"1066","messageId":"1067","endLine":357,"endColumn":36},{"ruleId":"1064","severity":1,"message":"1065","line":366,"column":72,"nodeType":"1066","messageId":"1067","endLine":366,"endColumn":74},{"ruleId":"1064","severity":1,"message":"1065","line":382,"column":72,"nodeType":"1066","messageId":"1067","endLine":382,"endColumn":74},{"ruleId":"1057","severity":1,"message":"1131","line":406,"column":12,"nodeType":"1059","messageId":"1060","endLine":406,"endColumn":22},{"ruleId":"1120","severity":1,"message":"1121","line":436,"column":5,"nodeType":"1122","messageId":"1123","endLine":436,"endColumn":102},{"ruleId":"1057","severity":1,"message":"1132","line":3,"column":10,"nodeType":"1059","messageId":"1060","endLine":3,"endColumn":14},{"ruleId":"1057","severity":1,"message":"1133","line":6,"column":10,"nodeType":"1059","messageId":"1060","endLine":6,"endColumn":28},{"ruleId":"1057","severity":1,"message":"1134","line":15,"column":11,"nodeType":"1059","messageId":"1060","endLine":15,"endColumn":24},{"ruleId":"1120","severity":1,"message":"1121","line":17,"column":5,"nodeType":"1122","messageId":"1123","endLine":17,"endColumn":102},{"ruleId":"1057","severity":1,"message":"1135","line":1,"column":15,"nodeType":"1059","messageId":"1060","endLine":1,"endColumn":21},{"ruleId":"1057","severity":1,"message":"1136","line":1,"column":23,"nodeType":"1059","messageId":"1060","endLine":1,"endColumn":27},{"ruleId":"1057","severity":1,"message":"1114","line":6,"column":8,"nodeType":"1059","messageId":"1060","endLine":6,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1124","line":7,"column":8,"nodeType":"1059","messageId":"1060","endLine":7,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1137","line":10,"column":8,"nodeType":"1059","messageId":"1060","endLine":10,"endColumn":15},{"ruleId":"1057","severity":1,"message":"1138","line":12,"column":10,"nodeType":"1059","messageId":"1060","endLine":12,"endColumn":28},{"ruleId":"1057","severity":1,"message":"1116","line":12,"column":30,"nodeType":"1059","messageId":"1060","endLine":12,"endColumn":40},{"ruleId":"1057","severity":1,"message":"1117","line":13,"column":10,"nodeType":"1059","messageId":"1060","endLine":13,"endColumn":26},{"ruleId":"1057","severity":1,"message":"1139","line":161,"column":12,"nodeType":"1059","messageId":"1060","endLine":161,"endColumn":31},{"ruleId":"1057","severity":1,"message":"1140","line":161,"column":33,"nodeType":"1059","messageId":"1060","endLine":161,"endColumn":55},{"ruleId":"1075","severity":1,"message":"1118","line":170,"column":8,"nodeType":"1111","endLine":170,"endColumn":10,"suggestions":"1141"},{"ruleId":"1064","severity":1,"message":"1065","line":173,"column":17,"nodeType":"1066","messageId":"1067","endLine":173,"endColumn":19},{"ruleId":"1057","severity":1,"message":"1142","line":15,"column":19,"nodeType":"1059","messageId":"1060","endLine":15,"endColumn":29},{"ruleId":"1057","severity":1,"message":"1143","line":25,"column":3,"nodeType":"1059","messageId":"1060","endLine":25,"endColumn":16},{"ruleId":"1057","severity":1,"message":"1144","line":26,"column":3,"nodeType":"1059","messageId":"1060","endLine":26,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1145","line":35,"column":10,"nodeType":"1059","messageId":"1060","endLine":35,"endColumn":33},{"ruleId":"1057","severity":1,"message":"1146","line":38,"column":32,"nodeType":"1059","messageId":"1060","endLine":38,"endColumn":57},{"ruleId":"1057","severity":1,"message":"1147","line":42,"column":7,"nodeType":"1059","messageId":"1060","endLine":42,"endColumn":21},{"ruleId":"1075","severity":1,"message":"1076","line":213,"column":13,"nodeType":"1077","endLine":264,"endColumn":4},{"ruleId":"1075","severity":1,"message":"1148","line":264,"column":6,"nodeType":"1111","endLine":264,"endColumn":8,"suggestions":"1149"},{"ruleId":"1064","severity":1,"message":"1065","line":274,"column":66,"nodeType":"1066","messageId":"1067","endLine":274,"endColumn":68},{"ruleId":"1057","severity":1,"message":"1150","line":344,"column":10,"nodeType":"1059","messageId":"1060","endLine":344,"endColumn":25},{"ruleId":"1057","severity":1,"message":"1151","line":366,"column":9,"nodeType":"1059","messageId":"1060","endLine":366,"endColumn":33},{"ruleId":"1057","severity":1,"message":"1152","line":400,"column":9,"nodeType":"1059","messageId":"1060","endLine":400,"endColumn":33},{"ruleId":"1120","severity":1,"message":"1121","line":502,"column":3,"nodeType":"1122","messageId":"1123","endLine":502,"endColumn":100},{"ruleId":"1057","severity":1,"message":"1143","line":26,"column":3,"nodeType":"1059","messageId":"1060","endLine":26,"endColumn":16},{"ruleId":"1057","severity":1,"message":"1144","line":27,"column":3,"nodeType":"1059","messageId":"1060","endLine":27,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1153","line":34,"column":10,"nodeType":"1059","messageId":"1060","endLine":34,"endColumn":19},{"ruleId":"1057","severity":1,"message":"1146","line":39,"column":32,"nodeType":"1059","messageId":"1060","endLine":39,"endColumn":57},{"ruleId":"1057","severity":1,"message":"1147","line":46,"column":7,"nodeType":"1059","messageId":"1060","endLine":46,"endColumn":21},{"ruleId":"1057","severity":1,"message":"1154","line":164,"column":10,"nodeType":"1059","messageId":"1060","endLine":164,"endColumn":16},{"ruleId":"1057","severity":1,"message":"1155","line":164,"column":18,"nodeType":"1059","messageId":"1060","endLine":164,"endColumn":28},{"ruleId":"1057","severity":1,"message":"1156","line":173,"column":21,"nodeType":"1059","messageId":"1060","endLine":173,"endColumn":33},{"ruleId":"1075","severity":1,"message":"1157","line":224,"column":6,"nodeType":"1111","endLine":224,"endColumn":17,"suggestions":"1158"},{"ruleId":"1057","severity":1,"message":"1159","line":267,"column":9,"nodeType":"1059","messageId":"1060","endLine":267,"endColumn":27},{"ruleId":"1064","severity":1,"message":"1065","line":275,"column":66,"nodeType":"1066","messageId":"1067","endLine":275,"endColumn":68},{"ruleId":"1057","severity":1,"message":"1150","line":345,"column":10,"nodeType":"1059","messageId":"1060","endLine":345,"endColumn":25},{"ruleId":"1057","severity":1,"message":"1151","line":367,"column":9,"nodeType":"1059","messageId":"1060","endLine":367,"endColumn":33},{"ruleId":"1057","severity":1,"message":"1152","line":401,"column":9,"nodeType":"1059","messageId":"1060","endLine":401,"endColumn":33},{"ruleId":"1057","severity":1,"message":"1160","line":451,"column":9,"nodeType":"1059","messageId":"1060","endLine":451,"endColumn":24},{"ruleId":"1057","severity":1,"message":"1161","line":456,"column":9,"nodeType":"1059","messageId":"1060","endLine":456,"endColumn":26},{"ruleId":"1057","severity":1,"message":"1162","line":460,"column":9,"nodeType":"1059","messageId":"1060","endLine":460,"endColumn":27},{"ruleId":"1120","severity":1,"message":"1121","line":526,"column":3,"nodeType":"1122","messageId":"1123","endLine":526,"endColumn":100},{"ruleId":"1057","severity":1,"message":"1163","line":9,"column":8,"nodeType":"1059","messageId":"1060","endLine":9,"endColumn":14},{"ruleId":"1057","severity":1,"message":"1164","line":11,"column":10,"nodeType":"1059","messageId":"1060","endLine":11,"endColumn":30},{"ruleId":"1120","severity":1,"message":"1121","line":60,"column":5,"nodeType":"1122","messageId":"1123","endLine":60,"endColumn":102},{"ruleId":"1057","severity":1,"message":"1113","line":5,"column":8,"nodeType":"1059","messageId":"1060","endLine":5,"endColumn":21},{"ruleId":"1057","severity":1,"message":"1114","line":6,"column":8,"nodeType":"1059","messageId":"1060","endLine":6,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1117","line":13,"column":10,"nodeType":"1059","messageId":"1060","endLine":13,"endColumn":26},{"ruleId":"1075","severity":1,"message":"1076","line":204,"column":15,"nodeType":"1077","endLine":209,"endColumn":8},{"ruleId":"1075","severity":1,"message":"1118","line":209,"column":10,"nodeType":"1111","endLine":209,"endColumn":12,"suggestions":"1165"},{"ruleId":"1120","severity":1,"message":"1121","line":246,"column":5,"nodeType":"1122","messageId":"1123","endLine":246,"endColumn":104},{"ruleId":"1120","severity":1,"message":"1121","line":11,"column":5,"nodeType":"1122","messageId":"1123","endLine":11,"endColumn":102},{"ruleId":"1057","severity":1,"message":"1113","line":5,"column":8,"nodeType":"1059","messageId":"1060","endLine":5,"endColumn":21},{"ruleId":"1057","severity":1,"message":"1114","line":6,"column":8,"nodeType":"1059","messageId":"1060","endLine":6,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1166","line":10,"column":8,"nodeType":"1059","messageId":"1060","endLine":10,"endColumn":20},{"ruleId":"1057","severity":1,"message":"1117","line":14,"column":10,"nodeType":"1059","messageId":"1060","endLine":14,"endColumn":26},{"ruleId":"1057","severity":1,"message":"1167","line":199,"column":11,"nodeType":"1059","messageId":"1060","endLine":199,"endColumn":27},{"ruleId":"1075","severity":1,"message":"1076","line":217,"column":15,"nodeType":"1077","endLine":222,"endColumn":8},{"ruleId":"1075","severity":1,"message":"1118","line":222,"column":10,"nodeType":"1111","endLine":222,"endColumn":12,"suggestions":"1168"},{"ruleId":"1120","severity":1,"message":"1121","line":265,"column":5,"nodeType":"1122","messageId":"1123","endLine":265,"endColumn":104},{"ruleId":"1057","severity":1,"message":"1169","line":4,"column":8,"nodeType":"1059","messageId":"1060","endLine":4,"endColumn":14},{"ruleId":"1057","severity":1,"message":"1170","line":5,"column":10,"nodeType":"1059","messageId":"1060","endLine":5,"endColumn":15},{"ruleId":"1057","severity":1,"message":"1171","line":5,"column":25,"nodeType":"1059","messageId":"1060","endLine":5,"endColumn":34},{"ruleId":"1057","severity":1,"message":"1172","line":6,"column":8,"nodeType":"1059","messageId":"1060","endLine":6,"endColumn":20},{"ruleId":"1057","severity":1,"message":"1163","line":10,"column":8,"nodeType":"1059","messageId":"1060","endLine":10,"endColumn":14},{"ruleId":"1057","severity":1,"message":"1173","line":14,"column":28,"nodeType":"1059","messageId":"1060","endLine":14,"endColumn":36},{"ruleId":"1057","severity":1,"message":"1174","line":22,"column":10,"nodeType":"1059","messageId":"1060","endLine":22,"endColumn":30},{"ruleId":"1057","severity":1,"message":"1175","line":33,"column":7,"nodeType":"1059","messageId":"1060","endLine":33,"endColumn":21},{"ruleId":"1057","severity":1,"message":"1176","line":38,"column":7,"nodeType":"1059","messageId":"1060","endLine":38,"endColumn":17},{"ruleId":"1057","severity":1,"message":"1177","line":43,"column":7,"nodeType":"1059","messageId":"1060","endLine":43,"endColumn":19},{"ruleId":"1057","severity":1,"message":"1178","line":51,"column":7,"nodeType":"1059","messageId":"1060","endLine":51,"endColumn":24},{"ruleId":"1057","severity":1,"message":"1179","line":94,"column":12,"nodeType":"1059","messageId":"1060","endLine":94,"endColumn":26},{"ruleId":"1057","severity":1,"message":"1180","line":94,"column":28,"nodeType":"1059","messageId":"1060","endLine":94,"endColumn":45},{"ruleId":"1057","severity":1,"message":"1181","line":110,"column":12,"nodeType":"1059","messageId":"1060","endLine":110,"endColumn":37},{"ruleId":"1075","severity":1,"message":"1182","line":118,"column":8,"nodeType":"1111","endLine":118,"endColumn":10,"suggestions":"1183"},{"ruleId":"1057","severity":1,"message":"1184","line":176,"column":11,"nodeType":"1059","messageId":"1060","endLine":176,"endColumn":26},{"ruleId":"1120","severity":1,"message":"1121","line":185,"column":5,"nodeType":"1122","messageId":"1123","endLine":185,"endColumn":104},{"ruleId":"1120","severity":1,"message":"1121","line":11,"column":5,"nodeType":"1122","messageId":"1123","endLine":11,"endColumn":102},{"ruleId":"1057","severity":1,"message":"1181","line":233,"column":12,"nodeType":"1059","messageId":"1060","endLine":233,"endColumn":37},{"ruleId":"1075","severity":1,"message":"1185","line":237,"column":8,"nodeType":"1111","endLine":237,"endColumn":10,"suggestions":"1186"},{"ruleId":"1120","severity":1,"message":"1121","line":283,"column":5,"nodeType":"1122","messageId":"1123","endLine":283,"endColumn":102},{"ruleId":"1057","severity":1,"message":"1169","line":4,"column":8,"nodeType":"1059","messageId":"1060","endLine":4,"endColumn":14},{"ruleId":"1057","severity":1,"message":"1170","line":5,"column":10,"nodeType":"1059","messageId":"1060","endLine":5,"endColumn":15},{"ruleId":"1057","severity":1,"message":"1171","line":5,"column":25,"nodeType":"1059","messageId":"1060","endLine":5,"endColumn":34},{"ruleId":"1057","severity":1,"message":"1172","line":6,"column":8,"nodeType":"1059","messageId":"1060","endLine":6,"endColumn":20},{"ruleId":"1057","severity":1,"message":"1187","line":7,"column":8,"nodeType":"1059","messageId":"1060","endLine":7,"endColumn":23},{"ruleId":"1057","severity":1,"message":"1163","line":10,"column":8,"nodeType":"1059","messageId":"1060","endLine":10,"endColumn":14},{"ruleId":"1057","severity":1,"message":"1173","line":14,"column":28,"nodeType":"1059","messageId":"1060","endLine":14,"endColumn":36},{"ruleId":"1057","severity":1,"message":"1174","line":21,"column":10,"nodeType":"1059","messageId":"1060","endLine":21,"endColumn":30},{"ruleId":"1057","severity":1,"message":"1175","line":34,"column":7,"nodeType":"1059","messageId":"1060","endLine":34,"endColumn":21},{"ruleId":"1057","severity":1,"message":"1176","line":39,"column":7,"nodeType":"1059","messageId":"1060","endLine":39,"endColumn":17},{"ruleId":"1057","severity":1,"message":"1177","line":44,"column":7,"nodeType":"1059","messageId":"1060","endLine":44,"endColumn":19},{"ruleId":"1057","severity":1,"message":"1178","line":52,"column":7,"nodeType":"1059","messageId":"1060","endLine":52,"endColumn":24},{"ruleId":"1057","severity":1,"message":"1179","line":92,"column":12,"nodeType":"1059","messageId":"1060","endLine":92,"endColumn":26},{"ruleId":"1057","severity":1,"message":"1180","line":92,"column":28,"nodeType":"1059","messageId":"1060","endLine":92,"endColumn":45},{"ruleId":"1057","severity":1,"message":"1181","line":108,"column":12,"nodeType":"1059","messageId":"1060","endLine":108,"endColumn":37},{"ruleId":"1075","severity":1,"message":"1188","line":121,"column":8,"nodeType":"1111","endLine":121,"endColumn":10,"suggestions":"1189"},{"ruleId":"1064","severity":1,"message":"1190","line":152,"column":23,"nodeType":"1066","messageId":"1067","endLine":152,"endColumn":25},{"ruleId":"1057","severity":1,"message":"1184","line":200,"column":11,"nodeType":"1059","messageId":"1060","endLine":200,"endColumn":26},{"ruleId":"1120","severity":1,"message":"1121","line":218,"column":5,"nodeType":"1122","messageId":"1123","endLine":218,"endColumn":102},{"ruleId":"1120","severity":1,"message":"1121","line":213,"column":3,"nodeType":"1122","messageId":"1123","endLine":213,"endColumn":102},{"ruleId":"1057","severity":1,"message":"1191","line":4,"column":10,"nodeType":"1059","messageId":"1060","endLine":4,"endColumn":15},{"ruleId":"1057","severity":1,"message":"1192","line":4,"column":17,"nodeType":"1059","messageId":"1060","endLine":4,"endColumn":27},{"ruleId":"1057","severity":1,"message":"1136","line":4,"column":29,"nodeType":"1059","messageId":"1060","endLine":4,"endColumn":33},{"ruleId":"1057","severity":1,"message":"1132","line":4,"column":35,"nodeType":"1059","messageId":"1060","endLine":4,"endColumn":39},{"ruleId":"1057","severity":1,"message":"1193","line":4,"column":41,"nodeType":"1059","messageId":"1060","endLine":4,"endColumn":51},{"ruleId":"1057","severity":1,"message":"1194","line":7,"column":28,"nodeType":"1059","messageId":"1060","endLine":7,"endColumn":41},{"ruleId":"1057","severity":1,"message":"1195","line":9,"column":8,"nodeType":"1059","messageId":"1060","endLine":9,"endColumn":20},{"ruleId":"1057","severity":1,"message":"1196","line":16,"column":10,"nodeType":"1059","messageId":"1060","endLine":16,"endColumn":30},{"ruleId":"1057","severity":1,"message":"1197","line":17,"column":10,"nodeType":"1059","messageId":"1060","endLine":17,"endColumn":31},{"ruleId":"1057","severity":1,"message":"1198","line":77,"column":12,"nodeType":"1059","messageId":"1060","endLine":77,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1199","line":77,"column":20,"nodeType":"1059","messageId":"1060","endLine":77,"endColumn":29},{"ruleId":"1075","severity":1,"message":"1200","line":90,"column":8,"nodeType":"1111","endLine":90,"endColumn":21,"suggestions":"1201"},{"ruleId":"1120","severity":1,"message":"1121","line":137,"column":5,"nodeType":"1122","messageId":"1123","endLine":137,"endColumn":102},{"ruleId":"1057","severity":1,"message":"1093","line":5,"column":8,"nodeType":"1059","messageId":"1060","endLine":5,"endColumn":13},{"ruleId":"1057","severity":1,"message":"1202","line":1,"column":58,"nodeType":"1059","messageId":"1060","endLine":1,"endColumn":88},{"ruleId":"1057","severity":1,"message":"1093","line":5,"column":8,"nodeType":"1059","messageId":"1060","endLine":5,"endColumn":13},{"ruleId":"1057","severity":1,"message":"1203","line":11,"column":3,"nodeType":"1059","messageId":"1060","endLine":11,"endColumn":12},{"ruleId":"1057","severity":1,"message":"1204","line":12,"column":3,"nodeType":"1059","messageId":"1060","endLine":12,"endColumn":31},{"ruleId":"1205","severity":1,"message":"1206","line":151,"column":7,"nodeType":"1059","messageId":"1207","endLine":151,"endColumn":14},{"ruleId":"1205","severity":1,"message":"1208","line":214,"column":7,"nodeType":"1059","messageId":"1207","endLine":214,"endColumn":15},{"ruleId":"1057","severity":1,"message":"1209","line":235,"column":5,"nodeType":"1059","messageId":"1060","endLine":235,"endColumn":14},{"ruleId":"1057","severity":1,"message":"1209","line":269,"column":5,"nodeType":"1059","messageId":"1060","endLine":269,"endColumn":14},{"ruleId":"1057","severity":1,"message":"1069","line":389,"column":7,"nodeType":"1059","messageId":"1060","endLine":389,"endColumn":13},{"ruleId":"1057","severity":1,"message":"1210","line":426,"column":11,"nodeType":"1059","messageId":"1060","endLine":426,"endColumn":15},{"ruleId":"1057","severity":1,"message":"1211","line":426,"column":17,"nodeType":"1059","messageId":"1060","endLine":426,"endColumn":25},{"ruleId":"1057","severity":1,"message":"1212","line":465,"column":7,"nodeType":"1059","messageId":"1060","endLine":465,"endColumn":16},{"ruleId":"1057","severity":1,"message":"1209","line":482,"column":9,"nodeType":"1059","messageId":"1060","endLine":482,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1209","line":524,"column":13,"nodeType":"1059","messageId":"1060","endLine":524,"endColumn":22},{"ruleId":"1057","severity":1,"message":"1209","line":782,"column":9,"nodeType":"1059","messageId":"1060","endLine":782,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1213","line":949,"column":9,"nodeType":"1059","messageId":"1060","endLine":949,"endColumn":24},{"ruleId":"1057","severity":1,"message":"1210","line":981,"column":9,"nodeType":"1059","messageId":"1060","endLine":981,"endColumn":13},{"ruleId":"1057","severity":1,"message":"1211","line":981,"column":15,"nodeType":"1059","messageId":"1060","endLine":981,"endColumn":23},{"ruleId":"1057","severity":1,"message":"1209","line":1011,"column":11,"nodeType":"1059","messageId":"1060","endLine":1011,"endColumn":20},{"ruleId":"1057","severity":1,"message":"1210","line":1056,"column":11,"nodeType":"1059","messageId":"1060","endLine":1056,"endColumn":15},{"ruleId":"1057","severity":1,"message":"1214","line":1130,"column":7,"nodeType":"1059","messageId":"1060","endLine":1130,"endColumn":16},{"ruleId":"1064","severity":1,"message":"1190","line":1216,"column":36,"nodeType":"1066","messageId":"1067","endLine":1216,"endColumn":38},{"ruleId":"1057","severity":1,"message":"1215","line":202,"column":19,"nodeType":"1059","messageId":"1060","endLine":202,"endColumn":29},{"ruleId":"1057","severity":1,"message":"1215","line":313,"column":19,"nodeType":"1059","messageId":"1060","endLine":313,"endColumn":29},{"ruleId":"1064","severity":1,"message":"1065","line":572,"column":45,"nodeType":"1066","messageId":"1067","endLine":572,"endColumn":47},{"ruleId":"1216","severity":1,"message":"1217","line":580,"column":29,"nodeType":"1218","endLine":588,"endColumn":31},{"ruleId":"1075","severity":1,"message":"1219","line":186,"column":6,"nodeType":"1111","endLine":186,"endColumn":12,"suggestions":"1220"},{"ruleId":"1057","severity":1,"message":"1221","line":2,"column":10,"nodeType":"1059","messageId":"1060","endLine":2,"endColumn":16},{"ruleId":"1057","severity":1,"message":"1222","line":2,"column":18,"nodeType":"1059","messageId":"1060","endLine":2,"endColumn":22},{"ruleId":"1057","severity":1,"message":"1223","line":258,"column":11,"nodeType":"1059","messageId":"1060","endLine":258,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1224","line":258,"column":20,"nodeType":"1059","messageId":"1060","endLine":258,"endColumn":25},{"ruleId":"1057","severity":1,"message":"1225","line":258,"column":27,"nodeType":"1059","messageId":"1060","endLine":258,"endColumn":32},{"ruleId":"1057","severity":1,"message":"1223","line":378,"column":11,"nodeType":"1059","messageId":"1060","endLine":378,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1224","line":378,"column":20,"nodeType":"1059","messageId":"1060","endLine":378,"endColumn":25},{"ruleId":"1057","severity":1,"message":"1225","line":378,"column":27,"nodeType":"1059","messageId":"1060","endLine":378,"endColumn":32},{"ruleId":"1057","severity":1,"message":"1163","line":6,"column":8,"nodeType":"1059","messageId":"1060","endLine":6,"endColumn":14},{"ruleId":"1057","severity":1,"message":"1226","line":7,"column":8,"nodeType":"1059","messageId":"1060","endLine":7,"endColumn":24},{"ruleId":"1057","severity":1,"message":"1227","line":8,"column":8,"nodeType":"1059","messageId":"1060","endLine":8,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1228","line":14,"column":62,"nodeType":"1059","messageId":"1060","endLine":14,"endColumn":74},{"ruleId":"1057","severity":1,"message":"1229","line":17,"column":8,"nodeType":"1059","messageId":"1060","endLine":17,"endColumn":31},{"ruleId":"1057","severity":1,"message":"1230","line":18,"column":24,"nodeType":"1059","messageId":"1060","endLine":18,"endColumn":36},{"ruleId":"1057","severity":1,"message":"1231","line":32,"column":17,"nodeType":"1059","messageId":"1060","endLine":32,"endColumn":25},{"ruleId":"1075","severity":1,"message":"1232","line":48,"column":6,"nodeType":"1111","endLine":48,"endColumn":13,"suggestions":"1233"},{"ruleId":"1075","severity":1,"message":"1234","line":56,"column":6,"nodeType":"1111","endLine":56,"endColumn":34,"suggestions":"1235"},{"ruleId":"1057","severity":1,"message":"1236","line":58,"column":9,"nodeType":"1059","messageId":"1060","endLine":58,"endColumn":19},{"ruleId":"1057","severity":1,"message":"1237","line":244,"column":40,"nodeType":"1059","messageId":"1060","endLine":244,"endColumn":52},{"ruleId":"1057","severity":1,"message":"1230","line":3,"column":49,"nodeType":"1059","messageId":"1060","endLine":3,"endColumn":61},{"ruleId":"1064","severity":1,"message":"1190","line":80,"column":42,"nodeType":"1066","messageId":"1067","endLine":80,"endColumn":44},{"ruleId":"1057","severity":1,"message":"1238","line":94,"column":25,"nodeType":"1059","messageId":"1060","endLine":94,"endColumn":36},{"ruleId":"1057","severity":1,"message":"1239","line":94,"column":38,"nodeType":"1059","messageId":"1060","endLine":94,"endColumn":46},{"ruleId":"1057","severity":1,"message":"1240","line":94,"column":48,"nodeType":"1059","messageId":"1060","endLine":94,"endColumn":55},{"ruleId":"1064","severity":1,"message":"1190","line":115,"column":42,"nodeType":"1066","messageId":"1067","endLine":115,"endColumn":44},{"ruleId":"1057","severity":1,"message":"1238","line":130,"column":25,"nodeType":"1059","messageId":"1060","endLine":130,"endColumn":36},{"ruleId":"1057","severity":1,"message":"1239","line":130,"column":38,"nodeType":"1059","messageId":"1060","endLine":130,"endColumn":46},{"ruleId":"1057","severity":1,"message":"1240","line":130,"column":48,"nodeType":"1059","messageId":"1060","endLine":130,"endColumn":55},{"ruleId":"1057","severity":1,"message":"1238","line":183,"column":19,"nodeType":"1059","messageId":"1060","endLine":183,"endColumn":30},{"ruleId":"1057","severity":1,"message":"1239","line":183,"column":32,"nodeType":"1059","messageId":"1060","endLine":183,"endColumn":40},{"ruleId":"1057","severity":1,"message":"1240","line":183,"column":42,"nodeType":"1059","messageId":"1060","endLine":183,"endColumn":49},{"ruleId":"1064","severity":1,"message":"1065","line":189,"column":44,"nodeType":"1066","messageId":"1067","endLine":189,"endColumn":46},{"ruleId":"1064","severity":1,"message":"1065","line":219,"column":29,"nodeType":"1066","messageId":"1067","endLine":219,"endColumn":31},{"ruleId":"1064","severity":1,"message":"1065","line":228,"column":26,"nodeType":"1066","messageId":"1067","endLine":228,"endColumn":28},{"ruleId":"1057","severity":1,"message":"1068","line":232,"column":7,"nodeType":"1059","messageId":"1060","endLine":232,"endColumn":13},{"ruleId":"1057","severity":1,"message":"1241","line":248,"column":20,"nodeType":"1059","messageId":"1060","endLine":248,"endColumn":29},{"ruleId":"1242","severity":1,"message":"1243","line":255,"column":3,"nodeType":"1244","messageId":"1245","endLine":255,"endColumn":14},{"ruleId":"1064","severity":1,"message":"1190","line":269,"column":33,"nodeType":"1066","messageId":"1067","endLine":269,"endColumn":35},{"ruleId":"1246","severity":1,"message":"1247","line":269,"column":51,"nodeType":"1066","messageId":"1248","endLine":269,"endColumn":73},{"ruleId":"1064","severity":1,"message":"1190","line":269,"column":67,"nodeType":"1066","messageId":"1067","endLine":269,"endColumn":69},{"ruleId":"1064","severity":1,"message":"1190","line":269,"column":92,"nodeType":"1066","messageId":"1067","endLine":269,"endColumn":94},{"ruleId":"1057","severity":1,"message":"1225","line":273,"column":9,"nodeType":"1059","messageId":"1060","endLine":273,"endColumn":14},{"ruleId":"1064","severity":1,"message":"1190","line":274,"column":44,"nodeType":"1066","messageId":"1067","endLine":274,"endColumn":46},{"ruleId":"1057","severity":1,"message":"1240","line":401,"column":11,"nodeType":"1059","messageId":"1060","endLine":401,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1249","line":2,"column":9,"nodeType":"1059","messageId":"1060","endLine":2,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1250","line":2,"column":35,"nodeType":"1059","messageId":"1060","endLine":2,"endColumn":48},{"ruleId":"1057","severity":1,"message":"1251","line":12,"column":7,"nodeType":"1059","messageId":"1060","endLine":12,"endColumn":26},{"ruleId":"1064","severity":1,"message":"1065","line":44,"column":23,"nodeType":"1066","messageId":"1067","endLine":44,"endColumn":25},{"ruleId":"1064","severity":1,"message":"1190","line":44,"column":41,"nodeType":"1066","messageId":"1067","endLine":44,"endColumn":43},{"ruleId":"1242","severity":1,"message":"1243","line":60,"column":13,"nodeType":"1252","messageId":"1245","endLine":62,"endColumn":33},{"ruleId":"1064","severity":1,"message":"1190","line":73,"column":35,"nodeType":"1066","messageId":"1067","endLine":73,"endColumn":37},{"ruleId":"1057","severity":1,"message":"1253","line":79,"column":23,"nodeType":"1059","messageId":"1060","endLine":79,"endColumn":31},{"ruleId":"1064","severity":1,"message":"1190","line":29,"column":28,"nodeType":"1066","messageId":"1067","endLine":29,"endColumn":30},{"ruleId":"1057","severity":1,"message":"1254","line":157,"column":7,"nodeType":"1059","messageId":"1060","endLine":157,"endColumn":23},{"ruleId":"1057","severity":1,"message":"1255","line":2,"column":9,"nodeType":"1059","messageId":"1060","endLine":2,"endColumn":23},{"ruleId":"1057","severity":1,"message":"1093","line":5,"column":8,"nodeType":"1059","messageId":"1060","endLine":5,"endColumn":13},{"ruleId":"1057","severity":1,"message":"1256","line":46,"column":7,"nodeType":"1059","messageId":"1060","endLine":46,"endColumn":27},{"ruleId":"1057","severity":1,"message":"1257","line":77,"column":5,"nodeType":"1059","messageId":"1060","endLine":77,"endColumn":17},{"ruleId":"1057","severity":1,"message":"1258","line":4,"column":8,"nodeType":"1059","messageId":"1060","endLine":4,"endColumn":16},{"ruleId":"1057","severity":1,"message":"1259","line":4,"column":10,"nodeType":"1059","messageId":"1060","endLine":4,"endColumn":20},{"ruleId":"1057","severity":1,"message":"1260","line":4,"column":22,"nodeType":"1059","messageId":"1060","endLine":4,"endColumn":32},{"ruleId":"1057","severity":1,"message":"1261","line":6,"column":28,"nodeType":"1059","messageId":"1060","endLine":6,"endColumn":38},{"ruleId":"1057","severity":1,"message":"1262","line":67,"column":13,"nodeType":"1059","messageId":"1060","endLine":67,"endColumn":18},{"ruleId":"1075","severity":1,"message":"1118","line":78,"column":8,"nodeType":"1111","endLine":78,"endColumn":19,"suggestions":"1263"},{"ruleId":"1120","severity":1,"message":"1121","line":196,"column":5,"nodeType":"1122","messageId":"1123","endLine":196,"endColumn":102},{"ruleId":"1057","severity":1,"message":"1264","line":1,"column":17,"nodeType":"1059","messageId":"1060","endLine":1,"endColumn":26},{"ruleId":"1057","severity":1,"message":"1265","line":1,"column":28,"nodeType":"1059","messageId":"1060","endLine":1,"endColumn":36},{"ruleId":"1057","severity":1,"message":"1100","line":1,"column":38,"nodeType":"1059","messageId":"1060","endLine":1,"endColumn":47},{"ruleId":"1057","severity":1,"message":"1266","line":2,"column":23,"nodeType":"1059","messageId":"1060","endLine":2,"endColumn":31},{"ruleId":"1057","severity":1,"message":"1226","line":2,"column":33,"nodeType":"1059","messageId":"1060","endLine":2,"endColumn":49},{"ruleId":"1057","severity":1,"message":"1267","line":6,"column":10,"nodeType":"1059","messageId":"1060","endLine":6,"endColumn":20},{"ruleId":"1057","severity":1,"message":"1268","line":8,"column":13,"nodeType":"1059","messageId":"1060","endLine":8,"endColumn":16},{"ruleId":"1057","severity":1,"message":"1269","line":9,"column":10,"nodeType":"1059","messageId":"1060","endLine":9,"endColumn":21},{"ruleId":"1057","severity":1,"message":"1105","line":9,"column":23,"nodeType":"1059","messageId":"1060","endLine":9,"endColumn":34},{"ruleId":"1057","severity":1,"message":"1117","line":10,"column":10,"nodeType":"1059","messageId":"1060","endLine":10,"endColumn":26},{"ruleId":"1057","severity":1,"message":"1270","line":299,"column":23,"nodeType":"1059","messageId":"1060","endLine":299,"endColumn":35},{"ruleId":"1057","severity":1,"message":"1271","line":11,"column":25,"nodeType":"1059","messageId":"1060","endLine":11,"endColumn":33},{"ruleId":"1057","severity":1,"message":"1272","line":224,"column":7,"nodeType":"1059","messageId":"1060","endLine":224,"endColumn":11},{"ruleId":"1057","severity":1,"message":"1273","line":233,"column":12,"nodeType":"1059","messageId":"1060","endLine":233,"endColumn":19},{"ruleId":"1057","severity":1,"message":"1074","line":235,"column":11,"nodeType":"1059","messageId":"1060","endLine":235,"endColumn":22},{"ruleId":"1057","severity":1,"message":"1264","line":1,"column":17,"nodeType":"1059","messageId":"1060","endLine":1,"endColumn":26},{"ruleId":"1057","severity":1,"message":"1265","line":1,"column":28,"nodeType":"1059","messageId":"1060","endLine":1,"endColumn":36},{"ruleId":"1057","severity":1,"message":"1100","line":1,"column":38,"nodeType":"1059","messageId":"1060","endLine":1,"endColumn":47},{"ruleId":"1057","severity":1,"message":"1266","line":2,"column":23,"nodeType":"1059","messageId":"1060","endLine":2,"endColumn":31},{"ruleId":"1057","severity":1,"message":"1226","line":2,"column":33,"nodeType":"1059","messageId":"1060","endLine":2,"endColumn":49},{"ruleId":"1057","severity":1,"message":"1267","line":6,"column":10,"nodeType":"1059","messageId":"1060","endLine":6,"endColumn":20},{"ruleId":"1057","severity":1,"message":"1270","line":297,"column":23,"nodeType":"1059","messageId":"1060","endLine":297,"endColumn":35},{"ruleId":"1057","severity":1,"message":"1272","line":178,"column":7,"nodeType":"1059","messageId":"1060","endLine":178,"endColumn":11},{"ruleId":"1057","severity":1,"message":"1274","line":1,"column":8,"nodeType":"1059","messageId":"1060","endLine":1,"endColumn":13},{"ruleId":"1075","severity":1,"message":"1275","line":16,"column":8,"nodeType":"1111","endLine":16,"endColumn":15,"suggestions":"1276"},{"ruleId":"1057","severity":1,"message":"1277","line":1,"column":10,"nodeType":"1059","messageId":"1060","endLine":1,"endColumn":18},{"ruleId":"1075","severity":1,"message":"1118","line":13,"column":8,"nodeType":"1111","endLine":13,"endColumn":10,"suggestions":"1278"},{"ruleId":"1057","severity":1,"message":"1105","line":8,"column":10,"nodeType":"1059","messageId":"1060","endLine":8,"endColumn":21},{"ruleId":"1064","severity":1,"message":"1065","line":58,"column":125,"nodeType":"1066","messageId":"1067","endLine":58,"endColumn":127},{"ruleId":"1057","severity":1,"message":"1279","line":32,"column":3,"nodeType":"1059","messageId":"1060","endLine":32,"endColumn":19},{"ruleId":"1057","severity":1,"message":"1280","line":97,"column":10,"nodeType":"1059","messageId":"1060","endLine":97,"endColumn":13},{"ruleId":"1057","severity":1,"message":"1281","line":97,"column":15,"nodeType":"1059","messageId":"1060","endLine":97,"endColumn":21},{"ruleId":"1057","severity":1,"message":"1282","line":98,"column":10,"nodeType":"1059","messageId":"1060","endLine":98,"endColumn":15},{"ruleId":"1057","severity":1,"message":"1283","line":98,"column":17,"nodeType":"1059","messageId":"1060","endLine":98,"endColumn":25},{"ruleId":"1075","severity":1,"message":"1284","line":109,"column":6,"nodeType":"1111","endLine":109,"endColumn":12,"suggestions":"1285"},{"ruleId":"1057","severity":1,"message":"1286","line":126,"column":9,"nodeType":"1059","messageId":"1060","endLine":126,"endColumn":18},{"ruleId":"1057","severity":1,"message":"1287","line":131,"column":9,"nodeType":"1059","messageId":"1060","endLine":131,"endColumn":29},{"ruleId":"1057","severity":1,"message":"1288","line":177,"column":10,"nodeType":"1059","messageId":"1060","endLine":177,"endColumn":17},{"ruleId":"1057","severity":1,"message":"1289","line":177,"column":19,"nodeType":"1059","messageId":"1060","endLine":177,"endColumn":29},{"ruleId":"1057","severity":1,"message":"1290","line":3,"column":28,"nodeType":"1059","messageId":"1060","endLine":3,"endColumn":40},{"ruleId":"1057","severity":1,"message":"1291","line":4,"column":28,"nodeType":"1059","messageId":"1060","endLine":4,"endColumn":40},{"ruleId":"1057","severity":1,"message":"1292","line":5,"column":28,"nodeType":"1059","messageId":"1060","endLine":5,"endColumn":39},{"ruleId":"1057","severity":1,"message":"1293","line":6,"column":28,"nodeType":"1059","messageId":"1060","endLine":6,"endColumn":40},{"ruleId":"1057","severity":1,"message":"1294","line":7,"column":28,"nodeType":"1059","messageId":"1060","endLine":7,"endColumn":37},{"ruleId":"1057","severity":1,"message":"1295","line":9,"column":28,"nodeType":"1059","messageId":"1060","endLine":9,"endColumn":38},{"ruleId":"1057","severity":1,"message":"1296","line":12,"column":10,"nodeType":"1059","messageId":"1060","endLine":12,"endColumn":25},"no-native-reassign",["1297"],"no-negated-in-lhs",["1298"],"no-unused-vars","'BROWSER_STORAGE' is defined but never used.","Identifier","unusedVar","'getJSONfromIDB' is defined but never used.","'IDB_STORE_SKYDB_CACHE' is defined but never used.","'setUserSession' is defined but never used.","eqeqeq","Expected '===' and instead saw '=='.","BinaryExpression","unexpected","'status' is assigned a value but never used.","'result' is assigned a value but never used.","'SubmitNewSite' is defined but never used.","'Redirect' is defined but never used.","'APPSTORE_PROVIDER_MASTER_PUBKEY' is defined but never used.","'red' is defined but never used.","'handleClick' is assigned a value but never used.","react-hooks/exhaustive-deps","Effect callbacks are synchronous to prevent race conditions. Put the async function inside:\n\nuseEffect(() => {\n async function fetchData() {\n // You can await here\n const response = await MyAPI.getData(someId);\n // ...\n }\n fetchData();\n}, [someId]); // Or [] if effect doesn't need props or state\n\nLearn more about data fetching with Hooks: https://reactjs.org/link/hooks-data-fetching","ArrowFunctionExpression","import/no-anonymous-default-export","Assign arrow function to a variable before exporting as module default","ExportDefaultDeclaration","'ACT_TY_SET_APP_COMMENTS' is defined but never used.","dot-location","Expected dot to be on same line as property.","MemberExpression","expectedDotBeforeProperty",{"range":"1299","text":"1300"},{"range":"1301","text":"1300"},{"range":"1302","text":"1300"},"'EPIC_TY_INSTALLED_FOR_LOGIN_APP' is defined but never used.",{"range":"1303","text":"1300"},{"range":"1304","text":"1300"},{"range":"1305","text":"1300"},"'store' is defined but never used.",{"range":"1306","text":"1300"},"'ACT_TY_SET_PUBLISHED_APPS' is defined but never used.",{"range":"1307","text":"1300"},{"range":"1308","text":"1300"},{"range":"1309","text":"1300"},{"range":"1310","text":"1300"},"'useEffect' is defined but never used.","'InputBase' is defined but never used.","'SearchIcon' is defined but never used.","'QuestionIcon' is defined but never used.","'SettingIcon' is defined but never used.","'useSelector' is defined but never used.","'ThemeProvider' is defined but never used.","'LightTheme' is assigned a value but never used.","'DarkTheme' is assigned a value but never used.","'userPreferences' is assigned a value but never used.","React Hook useEffect has missing dependencies: 'dispatch' and 'userSession?.mySky'. Either include them or remove the dependency array.","ArrayExpression",["1311"],"'UtilitiesItem' is defined but never used.","'ListFilter' is defined but never used.","'CustomPagination' is defined but never used.","'installApp' is defined but never used.","'setLoaderDisplay' is defined but never used.","React Hook useEffect has a missing dependency: 'dispatch'. Either include it or remove the dependency array.",["1312"],"no-lone-blocks","Nested block is redundant.","BlockStatement","redundantNestedBlock","'SelectItem' is defined but never used.","'SubmitBtn' is defined but never used.","'useInterval' is defined but never used.","'getAllPublishedAppsAction' is defined but never used.","React Hook useEffect has missing dependencies: 'dispatch', 'installedAppsStoreForLogin', and 'publishedAppsStore'. Either include them or remove the dependency array.",["1313"],"'tagsWithCount' is assigned a value but never used.","'showSlider' is assigned a value but never used.","'Link' is defined but never used.","'userProfileDacTest' is defined but never used.","'stUserSession' is assigned a value but never used.","'Button' is defined but never used.","'Grid' is defined but never used.","'AppCard' is defined but never used.","'getMyInstalledApps' is defined but never used.","'installedAppListObj' is assigned a value but never used.","'setInstalledAppListObj' is assigned a value but never used.",["1314"],"'Controller' is defined but never used.","'UploadAppLogo' is defined but never used.","'getMyHostedApps' is defined but never used.","'useLoadHostedAppFromUrl' is defined but never used.","'UPLOAD_SOURCE_NEW_HOSTING' is defined but never used.","'optionsVersion' is assigned a value but never used.","React Hook useEffect has missing dependencies: 'appId', 'dispatch', 'publishedAppsStore', and 'setValue'. Either include them or remove the dependency array.",["1315"],"'isVideoUploaded' is assigned a value but never used.","'onChangeHandlerForImages' is assigned a value but never used.","'onChangeHandlerForVideos' is assigned a value but never used.","'useParams' is defined but never used.","'verson' is assigned a value but never used.","'setVersion' is assigned a value but never used.","'setAppDetail' is assigned a value but never used.","React Hook useEffect has a missing dependency: 'setValue'. Either include it or remove the dependency array.",["1316"],"'manageSubmitLoader' is assigned a value but never used.","'setLogoUploaded' is assigned a value but never used.","'logoLoaderHandler' is assigned a value but never used.","'UploadLogoFunction' is assigned a value but never used.","'Switch' is defined but never used.","'BsFileEarmarkArrowUp' is defined but never used.",["1317"],"'AddNewDomain' is defined but never used.","'openModalHandler' is assigned a value but never used.",["1318"],"'Select' is defined but never used.","'Field' is defined but never used.","'useFormik' is defined but never used.","'FileCopyIcon' is defined but never used.","'LinkIcon' is defined but never used.","'UPLOAD_SOURCE_DEPLOY' is defined but never used.","'versionOptions' is assigned a value but never used.","'optionsAge' is assigned a value but never used.","'socialOption' is assigned a value but never used.","'reactSelectStyles' is assigned a value but never used.","'selectedOption' is assigned a value but never used.","'setSelectedOption' is assigned a value but never used.","'infoModalClipboardTooltip' is assigned a value but never used.","React Hook useEffect has missing dependencies: 'dispatch' and 'snUploadListStore'. Either include them or remove the dependency array.",["1319"],"'copyToClipboard' is assigned a value but never used.","React Hook useEffect has a missing dependency: 'loadHostedApps'. Either include it or remove the dependency array.",["1320"],"'DescriptionIcon' is defined but never used.","React Hook useEffect has missing dependencies: 'dispatch', 'loadHostedApp', and 'snUploadListStore'. Either include them or remove the dependency array.",["1321"],"Expected '!==' and instead saw '!='.","'Paper' is defined but never used.","'withStyles' is defined but never used.","'Typography' is defined but never used.","'SiteLogoWhite' is defined but never used.","'SnDisclaimer' is defined but never used.","'getMyFollowersAction' is defined but never used.","'getMyFollowingsAction' is defined but never used.","'userID' is assigned a value but never used.","'setUserID' is assigned a value but never used.","React Hook useEffect has missing dependencies: 'history' and 'installedAppsStoreForLogin'. Either include them or remove the dependency array.",["1322"],"'EPIC_TY_GET_ALL_PUBLISHED_APPS' is defined but never used.","'ANONYMOUS' is defined but never used.","'DK_AGGREGATED_PUBLISHED_APPS' is defined but never used.","no-const-assign","'domains' is constant.","const","'storages' is constant.","'resultObj' is assigned a value but never used.","'data' is assigned a value but never used.","'dataLink' is assigned a value but never used.","'firstTime' is assigned a value but never used.","'hostedAppIdList' is assigned a value but never used.","'appIdList' is assigned a value but never used.","'setIsError' is assigned a value but never used.","jsx-a11y/img-redundant-alt","Redundant alt attribute. Screen-readers already announce `img` tags as an image. You don’t need to use the words `image`, `photo,` or `picture` (or any specified custom words) in the alt prop.","JSXOpeningElement","React Hook useEffect has missing dependencies: 'fetchAggregatedAppStats' and 'fetchMyAppStats'. Either include them or remove the dependency array.",["1323"],"'Formik' is defined but never used.","'Form' is defined but never used.","'touched' is assigned a value but never used.","'error' is assigned a value but never used.","'value' is assigned a value but never used.","'FormControlLabel' is defined but never used.","'classNames' is defined but never used.","'skylinkToUrl' is defined but never used.","'CloudUploadOutlinedIcon' is defined but never used.","'parseSkylink' is defined but never used.","'setIsDir' is assigned a value but never used.","React Hook useEffect has missing dependencies: 'props' and 'setFileToStore'. Either include them or remove the dependency array. However, 'props' will change when *any* prop changes, so the preferred fix is to destructure the 'props' object outside of the useEffect call and refer to those specific props inside useEffect.",["1324"],"React Hook useEffect has a missing dependency: 'inputRef'. Either include it or remove the dependency array.",["1325"],"'videoToImg' is assigned a value but never used.","'isDragActive' is assigned a value but never used.","'contentType' is assigned a value but never used.","'metadata' is assigned a value but never used.","'skylink' is assigned a value but never used.","'signature' is assigned a value but never used.","no-unreachable","Unreachable code.","ReturnStatement","unreachableCode","use-isnan","Use the isNaN function to compare with NaN.","comparisonWithNaN","'getUserID' is defined but never used.","'getFile_MySky' is defined but never used.","'GEQ_HEADER_DATA_KEY' is assigned a value but never used.","ExpressionStatement","'revision' is assigned a value but never used.","'convertEdToCurve' is assigned a value but never used.","'DEFAULT_PORTAL' is defined but never used.","'getbase32URlForSkapp' is assigned a value but never used.","'videoResolve' is assigned a value but never used.","'EditIcon' is defined but never used.","'ExpandLess' is defined but never used.","'ExpandMore' is defined but never used.","'FilterIcon' is defined but never used.","'width' is assigned a value but never used.",["1326"],"'createRef' is defined but never used.","'Fragment' is defined but never used.","'Checkbox' is defined but never used.","'FieldArray' is defined but never used.","'Yup' is defined but never used.","'useDispatch' is defined but never used.","'setFormikObj' is assigned a value but never used.","'MoreIcon' is defined but never used.","'rows' is assigned a value but never used.","'clicked' is assigned a value but never used.","'React' is defined but never used.","React Hook useEffect has a missing dependency: 'loadAppDetail'. Either include it or remove the dependency array.",["1327"],"'useState' is defined but never used.",["1328"],"'setAppStatsEvent' is defined but never used.","'Fav' is assigned a value but never used.","'setFav' is assigned a value but never used.","'liked' is assigned a value but never used.","'setLiked' is assigned a value but never used.","React Hook useEffect has missing dependencies: 'fetchAggregatedAppStats', 'fetchMyAppStats', and 'stUserSession'. Either include them or remove the dependency array.",["1329"],"'pushRoute' is assigned a value but never used.","'checkBoxClickHanlder' is assigned a value but never used.","'uiliked' is assigned a value but never used.","'setUiLiked' is assigned a value but never used.","'FacebookIcon' is defined but never used.","'WhatsappIcon' is defined but never used.","'YoutubeIcon' is defined but never used.","'LinkedInIcon' is defined but never used.","'InstaIcon' is defined but never used.","'RedditIcon' is defined but never used.","'FontAwesomeIcon' is defined but never used.","no-global-assign","no-unsafe-negation",[488,498],"\n .",[522,532],[1419,1429],[624,634],[1409,1419],[2201,2211],[487,497],[505,515],[1200,1210],[2161,2171],[2147,2157],{"desc":"1330","fix":"1331"},{"desc":"1332","fix":"1333"},{"desc":"1334","fix":"1335"},{"desc":"1332","fix":"1336"},{"desc":"1337","fix":"1338"},{"desc":"1339","fix":"1340"},{"desc":"1332","fix":"1341"},{"desc":"1332","fix":"1342"},{"desc":"1343","fix":"1344"},{"desc":"1345","fix":"1346"},{"desc":"1347","fix":"1348"},{"desc":"1349","fix":"1350"},{"desc":"1351","fix":"1352"},{"desc":"1353","fix":"1354"},{"desc":"1355","fix":"1356"},{"desc":"1357","fix":"1358"},{"desc":"1359","fix":"1360"},{"desc":"1332","fix":"1361"},{"desc":"1362","fix":"1363"},"Update the dependencies array to be: [dispatch, userSession?.mySky]",{"range":"1364","text":"1365"},"Update the dependencies array to be: [dispatch]",{"range":"1366","text":"1367"},"Update the dependencies array to be: [dispatch, installedAppsStoreForLogin, publishedAppsStore]",{"range":"1368","text":"1369"},{"range":"1370","text":"1367"},"Update the dependencies array to be: [appId, dispatch, publishedAppsStore, setValue]",{"range":"1371","text":"1372"},"Update the dependencies array to be: [appDetail, setValue]",{"range":"1373","text":"1374"},{"range":"1375","text":"1367"},{"range":"1376","text":"1367"},"Update the dependencies array to be: [dispatch, snUploadListStore]",{"range":"1377","text":"1378"},"Update the dependencies array to be: [loadHostedApps]",{"range":"1379","text":"1380"},"Update the dependencies array to be: [dispatch, loadHostedApp, snUploadListStore]",{"range":"1381","text":"1382"},"Update the dependencies array to be: [history, installedAppsStoreForLogin, userSession]",{"range":"1383","text":"1384"},"Update the dependencies array to be: [data, fetchAggregatedAppStats, fetchMyAppStats]",{"range":"1385","text":"1386"},"Update the dependencies array to be: [files, props, setFileToStore]",{"range":"1387","text":"1388"},"Update the dependencies array to be: [props.directoryMode, isDir, inputRef]",{"range":"1389","text":"1390"},"Update the dependencies array to be: [dispatch, filterVal]",{"range":"1391","text":"1392"},"Update the dependencies array to be: [appId, loadAppDetail]",{"range":"1393","text":"1394"},{"range":"1395","text":"1367"},"Update the dependencies array to be: [fetchAggregatedAppStats, fetchMyAppStats, item, stUserSession]",{"range":"1396","text":"1397"},[9929,9931],"[dispatch, userSession?.mySky]",[4796,4798],"[dispatch]",[7978,7980],"[dispatch, installedAppsStoreForLogin, publishedAppsStore]",[5379,5381],[9793,9795],"[appId, dispatch, publishedAppsStore, setValue]",[7593,7604],"[appDetail, setValue]",[6501,6503],[7028,7030],[4961,4963],"[dispatch, snUploadListStore]",[7444,7446],"[loadHostedApps]",[5141,5143],"[dispatch, loadHostedApp, snUploadListStore]",[3225,3238],"[history, installedAppsStoreForLogin, userSession]",[4158,4164],"[data, fetchAggregatedAppStats, fetchMyAppStats]",[1977,1984],"[files, props, setFileToStore]",[2195,2223],"[props.directoryMode, isDir, inputRef]",[2529,2540],"[dispatch, filterVal]",[513,520],"[appId, loadAppDetail]",[425,427],[3824,3830],"[fetchAggregatedAppStats, fetchMyAppStats, item, stUserSession]"]