From 701c6da4fef185d252c95eb8b802dd05d685ab96 Mon Sep 17 00:00:00 2001 From: Justin Ferrari <‘justinwesleyferrari@gmail.com’> Date: Tue, 19 Dec 2023 09:39:08 -0500 Subject: [PATCH] Added download for gateway link --- package-lock.json | 43 +++- package.json | 4 +- src/assets/img/AbstractTechArt.png | Bin 0 -> 50865 bytes src/assets/svgs/DownloadCircleSVG.tsx | 22 ++ src/components/layout/Navbar/Navbar.tsx | 13 +- .../modals/ReusableModal-styles.tsx | 17 ++ src/components/modals/ReusableModal.tsx | 5 +- src/index.css | 5 + src/styles/fonts/Figtree.ttf | Bin 0 -> 62868 bytes src/styles/theme.tsx | 1 + src/wrappers/GlobalWrapper-styles.tsx | 59 ++++- src/wrappers/GlobalWrapper.tsx | 240 +++++++++++++----- 12 files changed, 336 insertions(+), 73 deletions(-) create mode 100644 src/assets/img/AbstractTechArt.png create mode 100644 src/assets/svgs/DownloadCircleSVG.tsx create mode 100644 src/styles/fonts/Figtree.ttf diff --git a/package-lock.json b/package-lock.json index d64b961..8df95e4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -37,13 +37,15 @@ "short-unique-id": "^4.4.4", "slate": "^0.91.4", "slate-history": "^0.86.0", - "slate-react": "^0.91.11" + "slate-react": "^0.91.11", + "ua-parser-js": "^1.0.37" }, "devDependencies": { "@mui/types": "^7.2.3", "@types/react": "^18.0.28", "@types/react-copy-to-clipboard": "^5.0.4", "@types/react-dom": "^18.0.11", + "@types/ua-parser-js": "^0.7.39", "@vitejs/plugin-react-swc": "^3.2.0", "prettier": "^2.8.6", "typescript": "^4.9.3", @@ -1764,6 +1766,12 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, + "node_modules/@types/ua-parser-js": { + "version": "0.7.39", + "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.39.tgz", + "integrity": "sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==", + "dev": true + }, "node_modules/@types/use-sync-external-store": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", @@ -3874,6 +3882,28 @@ "node": ">=4.2.0" } }, + "node_modules/ua-parser-js": { + "version": "1.0.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", + "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "engines": { + "node": "*" + } + }, "node_modules/update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", @@ -5190,6 +5220,12 @@ "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==" }, + "@types/ua-parser-js": { + "version": "0.7.39", + "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.39.tgz", + "integrity": "sha512-P/oDfpofrdtF5xw433SPALpdSchtJmY7nsJItf8h3KXqOslkbySh8zq4dSWXH2oTjRvJ5PczVEoCZPow6GicLg==", + "dev": true + }, "@types/use-sync-external-store": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/@types/use-sync-external-store/-/use-sync-external-store-0.0.3.tgz", @@ -6781,6 +6817,11 @@ "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true }, + "ua-parser-js": { + "version": "1.0.37", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.37.tgz", + "integrity": "sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==" + }, "update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", diff --git a/package.json b/package.json index f15002d..bf2b04e 100644 --- a/package.json +++ b/package.json @@ -38,13 +38,15 @@ "short-unique-id": "^4.4.4", "slate": "^0.91.4", "slate-history": "^0.86.0", - "slate-react": "^0.91.11" + "slate-react": "^0.91.11", + "ua-parser-js": "^1.0.37" }, "devDependencies": { "@mui/types": "^7.2.3", "@types/react": "^18.0.28", "@types/react-copy-to-clipboard": "^5.0.4", "@types/react-dom": "^18.0.11", + "@types/ua-parser-js": "^0.7.39", "@vitejs/plugin-react-swc": "^3.2.0", "prettier": "^2.8.6", "typescript": "^4.9.3", diff --git a/src/assets/img/AbstractTechArt.png b/src/assets/img/AbstractTechArt.png new file mode 100644 index 0000000000000000000000000000000000000000..2b55353b2a4385254973390cdecc86d561593952 GIT binary patch literal 50865 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�FlZwW@KWs8W}yHwfVa)4 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 bubpcs9g`OA!{b5_@TaVxE?+EX9QgkL49Myl literal 0 HcmV?d00001 diff --git a/src/assets/svgs/DownloadCircleSVG.tsx b/src/assets/svgs/DownloadCircleSVG.tsx new file mode 100644 index 0000000..d0fcf98 --- /dev/null +++ b/src/assets/svgs/DownloadCircleSVG.tsx @@ -0,0 +1,22 @@ +import { IconTypes } from "./IconTypes"; + +export const DownloadCircleSVG: React.FC = ({ + color, + height, + width, + className, + onClickFunc, +}) => { + return ( + + + + ); +}; diff --git a/src/components/layout/Navbar/Navbar.tsx b/src/components/layout/Navbar/Navbar.tsx index 88b6282..d744098 100644 --- a/src/components/layout/Navbar/Navbar.tsx +++ b/src/components/layout/Navbar/Navbar.tsx @@ -41,6 +41,7 @@ interface Props { authenticate: () => void; hasAttemptedToFetchShopInitial: boolean; setTheme: (val: string) => void; + displayDownloadGatewayModalFunc: () => void; } const NavBar: React.FC = ({ @@ -49,7 +50,8 @@ const NavBar: React.FC = ({ userAvatar, authenticate, hasAttemptedToFetchShopInitial, - setTheme + setTheme, + displayDownloadGatewayModalFunc }) => { const navigate = useNavigate(); const dispatch = useDispatch(); @@ -128,7 +130,14 @@ const NavBar: React.FC = ({ }} > {!isAuthenticated && ( - + { + const isGateWay = window.location.href.includes("https"); + if (isGateWay) { + displayDownloadGatewayModalFunc(); + return; + } + authenticate(); + }}> Authenticate diff --git a/src/components/modals/ReusableModal-styles.tsx b/src/components/modals/ReusableModal-styles.tsx index e1feabf..185f42e 100644 --- a/src/components/modals/ReusableModal-styles.tsx +++ b/src/components/modals/ReusableModal-styles.tsx @@ -1,5 +1,6 @@ import { styled } from "@mui/system"; import { Box } from "@mui/material"; +import AbstractTechArt from "../../assets/img/AbstractTechArt.png"; export const ReusableModalBody = styled(Box)(({ theme }) => ({ position: "absolute", @@ -35,5 +36,21 @@ export const ReusableModalBody = styled(Box)(({ theme }) => ({ }, "&::-webkit-scrollbar-thumb:hover": { backgroundColor: theme.palette.mode === "light" ? "#b7bcc4" : "#474646" + }, + "&.download-qortal-modal": { + "&::before": { + content: "''", + position: "absolute", + top: "0", + left: "0", + width: "100%", + height: "100%", + backgroundImage: `url(${AbstractTechArt})`, + backgroundSize: "cover", + backgroundRepeat: "no-repeat", + backgroundPosition: "center", + filter: "blur(2px) contrast(0.3)", + zIndex: -1 + } } })); diff --git a/src/components/modals/ReusableModal.tsx b/src/components/modals/ReusableModal.tsx index 89f2f2a..a54eac3 100644 --- a/src/components/modals/ReusableModal.tsx +++ b/src/components/modals/ReusableModal.tsx @@ -9,6 +9,7 @@ interface MyModalProps { children: any; customStyles?: any; id?: string; + className?: string; } export const ReusableModal: React.FC = ({ @@ -17,7 +18,8 @@ export const ReusableModal: React.FC = ({ onClose, // onSubmit, children, - customStyles = {} + customStyles = {}, + className }) => { const theme = useTheme(); return ( @@ -32,6 +34,7 @@ export const ReusableModal: React.FC = ({ sx={{ ...customStyles }} + className={className} > {children} diff --git a/src/index.css b/src/index.css index 9855117..5ff7ed3 100644 --- a/src/index.css +++ b/src/index.css @@ -43,6 +43,11 @@ src: url("./styles/fonts/Montserrat.ttf") format("truetype"); } +@font-face { + font-family: "Figtree"; + src: url("./styles/fonts/Figtree.ttf") format("truetype"); +} + :root { padding: 0px; margin: 0px; diff --git a/src/styles/fonts/Figtree.ttf b/src/styles/fonts/Figtree.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8d81222800d8d34941b2fc22cdf71570264a9803 GIT binary patch literal 62868 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 ({ cursor: "pointer" } })); + +export const DownloadQortalCol = styled(Stack)(({theme}) => ({ + display: "flex", + flexDirection: "column", + justifyContent: "flex-start", + alignItems: "center", + gap: "15px", + textAlign: "center", + width: "100%", + height: "100%", +})) + +export const QortalIcon = styled("img")({ + width: "120px", + height: "120px", + userSelect: "none" +}) + +export const DownloadQortalFont = styled(Typography)(({theme}) => ({ + fontFamily: "Figtree", + letterSpacing: "2.2px", + lineHeight: '52px', + fontSize: "50px", + fontWeight: 600, + color: theme.palette.text.primary +})) + +export const DownloadQortalSubFont = styled(Typography)(({theme}) => ({ + fontFamily: "Raleway", + fontSize: "25px", + lineHeight: "38px", + fontWeight: 500, + color: theme.palette.text.primary, + userSelect: "none" +})) + +export const DownloadNowButton = styled(Button)(({theme}) => ({ + fontFamily: "Montserrat", + fontSize: "22px", + marginTop: "20px", + fontWeight: 500, + width: "90%", + padding: "12px 20px", + gap: "10px", + backgroundColor: theme.palette.secondary.main, + color: "#fff", + transition: "all 0.3s ease-in-out", + borderRadius: "10px", + boxShadow: + "rgba(50, 50, 93, 0.25) 0px 2px 5px -1px, rgba(0, 0, 0, 0.3) 0px 1px 3px -1px;", + "&:hover": { + cursor: "pointer", + backgroundColor: theme.palette.secondary.dark, + boxShadow: + "rgba(50, 50, 93, 0.35) 0px 3px 5px -1px, rgba(0, 0, 0, 0.4) 0px 2px 3px -1px;" + } +})) \ No newline at end of file diff --git a/src/wrappers/GlobalWrapper.tsx b/src/wrappers/GlobalWrapper.tsx index d7763af..c1c0a64 100644 --- a/src/wrappers/GlobalWrapper.tsx +++ b/src/wrappers/GlobalWrapper.tsx @@ -3,23 +3,20 @@ import { useDispatch, useSelector } from "react-redux"; import { addUser } from "../state/features/authSlice"; import { RootState } from "../state/store"; import CreateStoreModal, { - onPublishParam + onPublishParam, } from "../components/modals/CreateStoreModal"; import EditStoreModal, { - onPublishParamEdit + onPublishParamEdit, } from "../components/modals/EditStoreModal"; import { setCurrentStore, setDataContainer, toggleEditStoreModal, - toggleCreateStoreModal, setIsLoadingGlobal, - resetProducts, resetListProducts, - DataContainer, ProductDataContainer, updateRecentlyVisitedStoreId, - clearDataCotainer + clearDataCotainer, } from "../state/features/globalSlice"; import NavBar from "../components/layout/Navbar/Navbar"; import PageLoader from "../components/common/PageLoader"; @@ -32,14 +29,26 @@ import { addToAllMyStores, addToHashMapStores, addToStores, - setAllMyStores + setAllMyStores, } from "../state/features/storeSlice"; import { useFetchStores } from "../hooks/useFetchStores"; import { DATA_CONTAINER_BASE, STORE_BASE } from "../constants/identifiers"; import { ReusableModal } from "../components/modals/ReusableModal"; -import { Box, Button, Stack, Typography } from "@mui/material"; +import { Stack, Typography, useTheme } from "@mui/material"; import { useNavigate } from "react-router-dom"; -import { CustomModalButton, CustomModalTitle } from "./GlobalWrapper-styles"; +import { + CustomModalButton, + CustomModalTitle, + DownloadNowButton, + DownloadQortalCol, + DownloadQortalFont, + DownloadQortalSubFont, + QortalIcon, +} from "./GlobalWrapper-styles"; +import QortalLogo from "../assets/img/Q-AppsLogo.webp"; +import { DownloadCircleSVG } from "../assets/svgs/DownloadCircleSVG"; +import { UAParser } from "ua-parser-js"; + interface Props { children: React.ReactNode; setTheme: (val: string) => void; @@ -54,6 +63,10 @@ interface ShortDataContainer { const GlobalWrapper: React.FC = ({ children, setTheme }) => { const dispatch = useDispatch(); const navigate = useNavigate(); + const theme = useTheme(); + + // Determine which OS they're on + const parser = new UAParser(); // Get user from auth const user = useSelector((state: RootState) => state.auth.user); @@ -94,6 +107,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { const [openDataContainerModal, setOpenDataContainer] = useState(false); const [retryDataContainer, setRetryDataContainer] = useState(false); + const [showDownloadModal, setShowDownloadModal] = useState(false); useEffect(() => { if (!user?.name) return; @@ -107,7 +121,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { action: "GET_QDN_RESOURCE_URL", name: user?.name, service: "THUMBNAIL", - identifier: "qortal_avatar" + identifier: "qortal_avatar", }); if (url === "Resource does not exist") return; @@ -142,8 +156,8 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { const responseBlogs = await fetch(url2, { method: "GET", headers: { - "Content-Type": "application/json" - } + "Content-Type": "application/json", + }, }); const dataMetadata = await responseBlogs.json(); if (dataMetadata.length === 0) { @@ -157,8 +171,8 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { const responseBlogs = await fetch(url, { method: "GET", headers: { - "Content-Type": "application/json" - } + "Content-Type": "application/json", + }, }); const responseDataBlogs = await responseBlogs.json(); const filterOut = responseDataBlogs.filter((blog: any) => @@ -173,8 +187,8 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { const response = await fetch(urlBlog, { method: "GET", headers: { - "Content-Type": "application/json" - } + "Content-Type": "application/json", + }, }); const responseData = await response.json(); @@ -182,8 +196,8 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { const response2 = await fetch(urlDataContainer, { method: "GET", headers: { - "Content-Type": "application/json" - } + "Content-Type": "application/json", + }, }); const responseData2 = await response2.json(); // Set currentStore in the Redux global state @@ -200,7 +214,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { logo: responseData?.logo || "", shortStoreId: responseData?.shortStoreId, supportedCoins: responseData?.supportedCoins || [], - foreignCoins: responseData?.foreignCoins || {} + foreignCoins: responseData?.foreignCoins || {}, }) ); // Set listProducts in the Redux global state @@ -208,7 +222,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { dispatch( setDataContainer({ ...responseData2, - id: `${store.identifier}-${DATA_CONTAINER_BASE}` + id: `${store.identifier}-${DATA_CONTAINER_BASE}`, }) ); } else { @@ -218,7 +232,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { storeId: store.identifier, shortStoreId: shortStoreId, owner: store.name, - products: {} + products: {}, }; const dataContainerToBase64 = await objectToBase64(dataContainer); @@ -227,15 +241,21 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { name: store.name, service: "DOCUMENT", data64: dataContainerToBase64, - identifier: `${store.identifier}-${DATA_CONTAINER_BASE}` + identifier: `${store.identifier}-${DATA_CONTAINER_BASE}`, }); } } + // Only called when user clicks authenticate from inside a gateway + + const displayDownloadQortalGatewayModalFunc = () => { + setShowDownloadModal(true); + }; + const askForAccountInformation = React.useCallback(async () => { try { let account = await qortalRequest({ - action: "GET_USER_ACCOUNT" + action: "GET_USER_ACCOUNT", }); const name = await getNameInfo(account.address); @@ -258,7 +278,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { service: "DOCUMENT", data64: dataContainerToBase64, identifier: `${storedDataContainer?.storeId}-${DATA_CONTAINER_BASE}`, - filename: "datacontainer.json" + filename: "datacontainer.json", }); if (isSuccessful(resourceResponse)) { await new Promise((res, rej) => { @@ -269,13 +289,13 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { dispatch( setDataContainer({ ...storedDataContainer, - id: `${storedDataContainer?.storeId}-${DATA_CONTAINER_BASE}` + id: `${storedDataContainer?.storeId}-${DATA_CONTAINER_BASE}`, }) ); dispatch( setNotification({ msg: "Shop successfully created", - alertType: "success" + alertType: "success", }) ); setCloseCreateStoreModal(true); @@ -289,7 +309,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { dispatch( setNotification({ msg: "You must create a data container in order to create a shop!", - alertType: "error" + alertType: "error", }) ); // Try again after 8 seconds automatically @@ -304,7 +324,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { service: "DOCUMENT", data64: dataContainerToBase64, identifier: `${storedDataContainer?.storeId}-${DATA_CONTAINER_BASE}`, - filename: "datacontainer.json" + filename: "datacontainer.json", }); if (isSuccessful(resourceResponse)) { await new Promise((res, rej) => { @@ -315,13 +335,13 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { dispatch( setDataContainer({ ...storedDataContainer, - id: `${storedDataContainer?.storeId}-${DATA_CONTAINER_BASE}` + id: `${storedDataContainer?.storeId}-${DATA_CONTAINER_BASE}`, }) ); dispatch( setNotification({ msg: "Shop successfully created", - alertType: "success" + alertType: "success", }) ); setCloseCreateStoreModal(true); @@ -339,7 +359,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { dispatch( setNotification({ msg: "You must create a data container in order to create a shop!", - alertType: "error" + alertType: "error", }) ); } @@ -359,7 +379,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { storeIdentifier, logo, foreignCoins, - supportedCoins + supportedCoins, }: onPublishParam) => { if (!user || !user.name) throw new Error("Cannot publish: You do not have a Qortal name"); @@ -394,18 +414,19 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { shortStoreId: formatStoreIdentifier, logo, foreignCoins, - supportedCoins + supportedCoins, }; if (!storeObj.shortStoreId) { throw new Error("Please insert a valid store id"); } // Store Data Container to send to QDN (this will allow easier querying of products afterwards. Think of it as a database in the redux global state for the current store. Max 1 per store). At first there's no products, but they will be added later. We store this in the state so we can reuse it easily if our data container fails to publish. try { - const storeToBase64 = await objectToBase64(storeObj); // Publish Store to QDN - let metadescription = `**coins:QORTtrue,ARRR${supportedCoins.includes('ARRR')}**` + description.slice(0,180) + let metadescription = + `**coins:QORTtrue,ARRR${supportedCoins.includes("ARRR")}**` + + description.slice(0, 180); const resourceResponse = await qortalRequest({ action: "PUBLISH_QDN_RESOURCE", @@ -415,7 +436,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { filename: "store.json", title, description: metadescription, - identifier: identifier + identifier: identifier, }); if (isSuccessful(resourceResponse)) { await new Promise((res, rej) => { @@ -428,7 +449,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { storeId: identifier, shortStoreId: formatStoreIdentifier, owner: name, - products: {} + products: {}, }; // Store data (other than the raw data or metadata) to add to Redux const storeData = { @@ -438,7 +459,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { owner: name, id: storeIdentifier, shortStoreId: formatStoreIdentifier, - logo: logo + logo: logo, }; // Store Full Object to send to redux hashMapStores const storefullObj = { @@ -447,7 +468,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { isValid: true, owner: name, created: createdAt, - updated: createdAt + updated: createdAt, }; dispatch(setCurrentStore(storefullObj)); @@ -464,17 +485,17 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { if (typeof error === "string") { notificationObj = { msg: error || "Failed to create store", - alertType: "error" + alertType: "error", }; } else if (typeof error?.error === "string") { notificationObj = { msg: error?.error || "Failed to create store", - alertType: "error" + alertType: "error", }; } else { notificationObj = { msg: error?.message || "Failed to create store", - alertType: "error" + alertType: "error", }; } if (!notificationObj) return; @@ -498,7 +519,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { shipsTo, logo, foreignCoins, - supportedCoins + supportedCoins, }: onPublishParamEdit) => { if (!user || !user.name || !currentStore) throw new Error("Cannot publish: You do not have a Qortal name"); @@ -522,13 +543,15 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { logo, shortStoreId: currentStore.shortStoreId ?? shortStoreId, foreignCoins, - supportedCoins + supportedCoins, }; try { const storeToBase64 = await objectToBase64(storeObj); - let metadescription = `**coins:QORTtrue,ARRR${supportedCoins.includes('ARRR')}**` + description.slice(0,180) + let metadescription = + `**coins:QORTtrue,ARRR${supportedCoins.includes("ARRR")}**` + + description.slice(0, 180); const resourceResponse = await qortalRequest({ action: "PUBLISH_QDN_RESOURCE", name: name, @@ -537,7 +560,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { filename: "store.json", title, description: metadescription, - identifier: currentStore.id + identifier: currentStore.id, }); await new Promise((res, rej) => { @@ -550,7 +573,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { dispatch( setNotification({ msg: "Shop successfully updated", - alertType: "success" + alertType: "success", }) ); } catch (error: any) { @@ -558,17 +581,17 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { if (typeof error === "string") { notificationObj = { msg: error || "Failed to update blog", - alertType: "error" + alertType: "error", }; } else if (typeof error?.error === "string") { notificationObj = { msg: error?.error || "Failed to update blog", - alertType: "error" + alertType: "error", }; } else { notificationObj = { msg: error?.message || "Failed to update blog", - alertType: "error" + alertType: "error", }; } if (!notificationObj) return; @@ -597,8 +620,8 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { const response = await fetch(url, { method: "GET", headers: { - "Content-Type": "application/json" - } + "Content-Type": "application/json", + }, }); const responseData = await response.json(); // Data returned from that endpoint of the API @@ -612,7 +635,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { created: storeItem.created, updated: storeItem.updated, owner: storeItem.name, - id: storeItem.identifier + id: storeItem.identifier, }; }); @@ -624,7 +647,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { if (content.owner && content.id) { const res = checkAndUpdateResource({ id: content.id, - updated: content.updated + updated: content.updated, }); if (res) { getStore(content.owner, content.id, content); @@ -668,8 +691,8 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { const shopData = await fetch(urlShop, { method: "GET", headers: { - "Content-Type": "application/json" - } + "Content-Type": "application/json", + }, }); const shopResource = await shopData.json(); // Clear product list from redux global state @@ -687,7 +710,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { logo: shopResource?.logo, shortStoreId: shopResource?.shortStoreId, supportedCoins: shopResource?.supportedCoins || [], - foreignCoins: shopResource?.foreignCoins || {} + foreignCoins: shopResource?.foreignCoins || {}, }) ); // Fetch data container data on QDN (product resources) @@ -695,8 +718,8 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { const response = await fetch(urlDataContainer, { method: "GET", headers: { - "Content-Type": "application/json" - } + "Content-Type": "application/json", + }, }); const responseData2 = await response.json(); if ( @@ -707,7 +730,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { dispatch( setDataContainer({ ...responseData2, - id: `${myStoreFound.id}-${DATA_CONTAINER_BASE}` + id: `${myStoreFound.id}-${DATA_CONTAINER_BASE}`, }) ); } else if (user?.name && recentlyVisitedStoreId) { @@ -722,7 +745,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { limit: 0, offset: 0, reverse: true, - mode: "ALL" + mode: "ALL", }); if (dataContainerExists?.length === 0) { // Publish Data Container to QDN @@ -737,7 +760,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { storeId: recentlyVisitedStoreId, shortStoreId: formatStoreIdentifier, owner: user?.name, - products: {} + products: {}, }; const dataContainerToBase64 = await objectToBase64( dataContainer @@ -749,20 +772,20 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { service: "DOCUMENT", data64: dataContainerToBase64, identifier: `${recentlyVisitedStoreId}-${DATA_CONTAINER_BASE}`, - filename: "datacontainer.json" + filename: "datacontainer.json", }); if (dataContainerCreated && !dataContainerCreated.error) { dispatch( setDataContainer({ ...dataContainer, - id: `${recentlyVisitedStoreId}-${DATA_CONTAINER_BASE}` + id: `${recentlyVisitedStoreId}-${DATA_CONTAINER_BASE}`, }) ); } dispatch( setNotification({ msg: "Data Container Created!", - alertType: "success" + alertType: "success", }) ); } catch (error) { @@ -770,7 +793,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { dispatch( setNotification({ msg: "Error when creating the data container. Please try again!", - alertType: "error" + alertType: "error", }) ); dispatch(updateRecentlyVisitedStoreId("")); @@ -780,7 +803,7 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { dispatch( setNotification({ msg: "Error when fetching store data. Please try again!", - alertType: "error" + alertType: "error", }) ); navigate("/"); @@ -862,11 +885,94 @@ const GlobalWrapper: React.FC = ({ children, setTheme }) => { userName={user?.name || ""} userAvatar={userAvatar} authenticate={askForAccountInformation} + displayDownloadGatewayModalFunc={displayDownloadQortalGatewayModalFunc} hasAttemptedToFetchShopInitial={hasAttemptedToFetchShopInitial} /> {/* Cart opens when setIsOpen action is dispatched to Redux Global State */} + {showDownloadModal && ( + { + setShowDownloadModal(false); + }} + customStyles={{ + width: "370px", + height: "80%", + backgroundColor: + theme.palette.mode === "light" ? "#e8e8e8" : "#030d1a", + position: "relative", + padding: "15px 20px", + borderRadius: "3px", + overflowY: "auto", + overflowX: "hidden", + maxHeight: "90vh", + }} + className="download-qortal-modal" + > + + + Download Qortal + + Experience a new internet paradigm, and start your Qortal + experience today by downloading and installing the Qortal + software. + + { + const userOS = parser.getOS().name; + if (userOS?.includes("Android" || "iOS")) { + dispatch( + setNotification({ + msg: "Qortal is not available on mobile devices yet. Please download on a desktop or laptop.", + alertType: "error", + }) + ); + return; + } else if (userOS?.includes("Mac")) { + window.location.href = + "https://github.com/Qortal/qortal-ui/releases/latest/download/Qortal-Setup-macOS.dmg"; + dispatch( + setNotification({ + msg: "Download successful!", + alertType: "success", + }) + ); + return; + } else if (userOS?.includes("Windows")) { + window.location.href = + "https://github.com/Qortal/qortal-ui/releases/latest/download/Qortal-Setup-win64.exe"; + dispatch( + setNotification({ + msg: "Download successful!", + alertType: "success", + }) + ); + return; + } else if (userOS?.includes("Linux")) { + window.location.href = + "https://github.com/Qortal/qortal-ui/releases/latest/download/Qortal-Setup-amd64.AppImage"; + dispatch( + setNotification({ + msg: "Download successful!", + alertType: "success", + }) + ); + return; + } + }} + > + Download Now{" "} + + + + + )} {children} );