diff --git a/frontend/src/components/Billing.jsx b/frontend/src/components/Billing.jsx index 97b6cd16..d5b39411 100644 --- a/frontend/src/components/Billing.jsx +++ b/frontend/src/components/Billing.jsx @@ -54,7 +54,6 @@ const Billing = (props) => { const { globalUrl, userdata, serverside, billingInfo, stripeKey, selectedOrganization, handleGetOrg, clickedFromOrgTab } = props; //const alert = useAlert(); let navigate = useNavigate(); - const [selectedDealModalOpen, setSelectedDealModalOpen] = React.useState(false); const [dealList, setDealList] = React.useState([]); const [dealName, setDealName] = React.useState(""); @@ -1055,10 +1054,10 @@ const Billing = (props) => { Consultation & Management
- + You currently have a total of {inputHour} hours and {inputMinutes} minutes of professional services available by our experts. -
+
{editConsultation ? <> { {editConsultation && }
: null} - + Features
    @@ -1331,7 +1330,7 @@ const Billing = (props) => { Become a Shuffle Expert
    - + Public Training
      @@ -1346,7 +1345,7 @@ const Billing = (props) => {
    - + Private Training
      diff --git a/frontend/src/components/Branding.jsx b/frontend/src/components/Branding.jsx index 48466476..de38ef86 100644 --- a/frontend/src/components/Branding.jsx +++ b/frontend/src/components/Branding.jsx @@ -3,15 +3,25 @@ import ReactGA from 'react-ga4'; import theme from "../theme.jsx"; import { ToastContainer, toast } from "react-toastify" +import { + CheckCircle as CheckCircleIcon, +} from "@mui/icons-material"; + import { Paper, Typography, Divider, Button, + Tooltip, Grid, Card, } from "@mui/material"; +import { + red, + green, +} from "../views/AngularWorkflow.jsx" + //import { useAlert const Branding = (props) => { @@ -45,7 +55,7 @@ const Branding = (props) => { toast("Failed updating org: ", responseJson.reason); } else { if (joinStatus == "join") { - setPublishingInfo("Your organization is now part of the Creator Incentive Program. You can now create and publish content to your organization's page. You can also create a creator account to manage your organization's content.") + setPublishingInfo("Your organization is now part of the Partner Program. You can now create, publish and manage content for your organization's public page.") } else { setPublishingInfo("Your organization is no longer part of the Creator Incentive Program. You can still create a creator account to manage your organization's content.") } @@ -70,7 +80,15 @@ const Branding = (props) => { } const isOrganizationReady = () => { - console.log("Is organization ready?") + + // Check if it's a suborg + if (selectedOrganization.creator_org !== "") { + const comment = "Child orgs can't become creators" + if (!publishRequirements.includes(comment)) { + setPublishRequirements([...publishRequirements, comment]) + } + return false; + } // A simple checklist to ensure the button shows up properly if (selectedOrganization.name === selectedOrganization.org) { @@ -82,15 +100,6 @@ const Branding = (props) => { return false; } - // Check if it's a suborg - if (selectedOrganization.creator_org !== "") { - const comment = "Child orgs can't become creators" - if (!publishRequirements.includes(comment)) { - setPublishRequirements([...publishRequirements, comment]) - } - return false; - } - if (selectedOrganization.large_image === "" || selectedOrganization.large_image === theme.palette.defaultImage) { const comment = "Add a logo for your organization" if (!publishRequirements.includes(comment)) { @@ -102,6 +111,14 @@ const Branding = (props) => { return true } + const isPublished = selectedOrganization.creator_id === "" + const leadinfo = selectedOrganization.lead_info === undefined || selectedOrganization.lead_info === null || selectedOrganization.lead_info === "" ? "" : JSON.stringify(selectedOrganization.lead_info) + const isPartner = leadinfo.includes("partner") + + console.log("LEADINFO: ", leadinfo) + + console.log("SELECTEDORGANIZATION: ", selectedOrganization) + return (

      @@ -111,27 +128,46 @@ const Branding = (props) => { You can customize your organization's branding by uploading a logo, changing the color scheme and a lot more. + + {isPublished ? : } + {isPublished ? "Not Published" : "Published"} + + + + + {!isPartner ? : } + + {!isPartner? "Not Officially Partnered" : "Officially Partnered"} + + + + + + + +

      - Creator Incentive Program + Partner Program

      - By changing publishing settings, you agree to our Terms of Service, and acknowledge that your organization's non-sensitive data will be added as a creator account. None of your existing workflows, apps, or other stored data will be published. Any admin in your organization can manage the creator configuration. Becoming a creator organization is reversible.
      Support: support@shuffler.io + By changing publishing settings, you agree to our Terms of Service, and acknowledge that your organization's non-sensitive data will be added as a creator account. None of your existing workflows, apps, or other stored data will be published. Any admin in your organization can manage the creator configuration. Becoming a creator organization IS reversible.
      Support: support@shuffler.io {selectedOrganization.creator_id == "" ?   : - - - Modify your creator organization - + null } + diff --git a/frontend/src/components/LicencePopup.jsx b/frontend/src/components/LicencePopup.jsx index 7fa355e0..820b8253 100644 --- a/frontend/src/components/LicencePopup.jsx +++ b/frontend/src/components/LicencePopup.jsx @@ -690,7 +690,7 @@ const LicencePopup = (props) => { const priceItem = window.location.origin === "https://shuffler.io" ? shuffleVariant === 0 ? "app_executions" : "cores" : - shuffleVariant === 0 ? "price_1PbO0cEJjT17t98NsfEMUlMn" : "price_1PbNnaEJjT17t98NLadq6Lhq" + shuffleVariant === 0 ? "price_1PZPSSEJjT17t98NLJoTMYja" : "price_1PZPQuEJjT17t98N3yORUtd9" const successUrl = `${window.location.origin}/admin?admin_tab=billing&payment=success` const failUrl = `${window.location.origin}/pricing?admin_tab=billing&payment=failure` diff --git a/frontend/src/components/NewHeader.jsx b/frontend/src/components/NewHeader.jsx index ee486357..e196c2cf 100644 --- a/frontend/src/components/NewHeader.jsx +++ b/frontend/src/components/NewHeader.jsx @@ -143,7 +143,7 @@ const Header = (props) => { const [subAnchorEl, setSubAnchorEl] = React.useState(null); const [upgradeHovered, setUpgradeHovered] = React.useState(false); const [showTopbar, setShowTopbar] = useState(false) - const stripeKey = typeof window === 'undefined' || window.location === undefined ? "" : window.location.origin === "https://shuffler.io" ? "pk_live_XAxwE2Fp9DEbEcNYw4UKmyby00vIlIPPRp" : "pk_test_51PXYYMEJjT17t98NbDkojZ3DRvsFUQBs35LGMx3i436BXwEBVFKB9nCvHt0Q3M4MG3dz4mHheuWvfoYvpaL3GmsG00k1Rb2ksO" + const stripeKey = typeof window === 'undefined' || window.location === undefined ? "" : window.location.origin === "https://shuffler.io" ? "pk_live_51PXYYMEJjT17t98N20qEqItyt1fLQjrnn41lPeG2PjnSlZHTDNKHuisAbW00s4KAn86nGuqB9uSVU4ds8MutbnMU00DPXpZ8ZD" : "pk_test_51PXYYMEJjT17t98NbDkojZ3DRvsFUQBs35LGMx3i436BXwEBVFKB9nCvHt0Q3M4MG3dz4mHheuWvfoYvpaL3GmsG00k1Rb2ksO" let navigate = useNavigate(); const classes = useStyles(); @@ -171,8 +171,10 @@ const Header = (props) => { setTooltipOpen(true); }; + const topbar_var = "topbar_closed2" + useEffect(() => { - const topbar = localStorage.getItem("topbar_closed") + const topbar = localStorage.getItem(topbar_var) if (topbar === "true") { setShowTopbar(false) } else { @@ -919,8 +921,8 @@ const Header = (props) => { )}
      - handleMenuItemClick('/professional-support')}> - + handleMenuItemClick('/professional-services')}> + Professional Services @@ -929,9 +931,19 @@ const Header = (props) => { Training Courses + + + + handleMenuItemClick('/partners')}> + + Partner Program + + + + {/*
      ) : null} {workflow.execution_variables !== undefined && workflow.execution_variables !== null && @@ -2693,6 +2788,10 @@ const ParsedAction = (props) => { return null } + if (data.value === "authgroup controlled") { + return null + } + // selectedAction.selectedAuthentication = e.target.value // selectedAction.authentication_id = e.target.value.id if ( @@ -4086,11 +4185,7 @@ const ParsedAction = (props) => { onClose={() => { setShowAutocomplete(false); - if ( - !selectedActionParameters[count].value[ - selectedActionParameters[count].value.length - 1 - ] === "." - ) { + if (!selectedActionParameters[count].value[selectedActionParameters[count].value.length - 1] === ".") { setShowDropdown(false); } diff --git a/frontend/src/components/Searchfield.jsx b/frontend/src/components/Searchfield.jsx index c389f88d..6b3c50ae 100644 --- a/frontend/src/components/Searchfield.jsx +++ b/frontend/src/components/Searchfield.jsx @@ -124,7 +124,7 @@ const SearchField = props => { ); return ( -
      +
      {modalView} Limits & Cloud Sync /> Priorities /> Billing & Stats /> - Branding (Beta) /> + Partner /> action.category_label !== undefined && action.category_label !== null && action.category_label.length > 0) const actionIndex = startIndex < 0 ? 0 : startIndex + if (app.actions[actionIndex] === undefined || app.actions[actionIndex] === null) { + console.log("No actions found for app: ", app) + return + } + // Make the first action the most relevant one for them based on previous use if ( app.actions[actionIndex].parameters !== undefined && @@ -11605,7 +11614,7 @@ const releaseToConnectLabel = "Release to Connect"

      - Branch: Conditions - {selectedEdgeIndex} + Conditions

      0) ? "loading" : "success" var executionDelay = -75 const executionModal = ( @@ -18598,26 +18608,6 @@ const releaseToConnectLabel = "Release to Connect" - {executionData.status === "EXECUTING" ? ( - - - - - - ) : null} - {isCloud ? + {executionData.status === "EXECUTING" ? ( + + + ) : null} + + {isCloud ? + + + @@ -18722,7 +18735,18 @@ const releaseToConnectLabel = "Release to Connect" {executionData.workflow !== undefined && executionData.workflow !== null && executionData.workflow.actions !== undefined && executionData.workflow.actions !== null && executionData.workflow.actions.length > 0 ?
      - Env      + + {/*envStatus === "success" ? + + + + : envStatus === "failure" ? + + + + : null*/} + + Env      { @@ -19580,7 +19604,7 @@ const releaseToConnectLabel = "Release to Connect" return "The app's Docker Image is not available in the environment yet. Re-run the app to force a re-download of the app. If the problem persists, contact support" } - if (result.status !== 200 && result.url !== undefined && result.url !== null && (result.url.includes("192.168") || result.url.includes("172.16") || result.url.includes("10.0"))) { + if (result.status !== 200 && result.url !== undefined && result.url !== null && typeof result.url === "string" && (result.url.includes("192.168") || result.url.includes("172.16") || result.url.includes("10.0"))) { return "Consider whether your Orborus environment can connect to a local IP or not." } @@ -21737,7 +21761,7 @@ const releaseToConnectLabel = "Release to Connect"
      - {selectedVersion.name} + {selectedVersion?.name}
      {/* Cross icon to close it */} diff --git a/frontend/src/views/Apps.jsx b/frontend/src/views/Apps.jsx index 4c816623..770e37c8 100755 --- a/frontend/src/views/Apps.jsx +++ b/frontend/src/views/Apps.jsx @@ -2586,6 +2586,8 @@ const Apps = (props) => { if (parsedtext.indexOf("openapi") === -1 && parsedtext.indexOf("swagger") === -1) { setValidation(false); setOpenApiError("Error in generation: "+parsedtext); + + return; } } catch (e) { @@ -2684,10 +2686,11 @@ const Apps = (props) => { body: openApidata, credentials: "include", }) - .then((response) => { + .then((response) => { + setValidation(false); return response.json(); - }) + }) .then((responseJson) => { if (responseJson.success) { setAppValidation(responseJson.id);