diff --git a/backend/go-app/main.go b/backend/go-app/main.go
index 6f9d5dc7..4e4cce58 100755
--- a/backend/go-app/main.go
+++ b/backend/go-app/main.go
@@ -1069,6 +1069,72 @@ func handleInfo(resp http.ResponseWriter, request *http.Request) {
activatedAppIds = append(activatedAppIds, app.ID)
}
+ parsedStatus := []string{}
+ if len(org.ManagerOrgs) > 0 || userInfo.ActiveOrg.CreatorOrg != "" {
+ parsedStatus = append(parsedStatus, "sub_org")
+
+ parentOrgId := userInfo.ActiveOrg.CreatorOrg
+ if len(userInfo.ActiveOrg.CreatorOrg) == 0 {
+ parentOrgId = org.ManagerOrgs[0].Id
+ }
+
+ // Check for licensing/branding of parent and override
+ parentOrg, err := shuffle.GetOrg(ctx, parentOrgId)
+ if err == nil {
+ if parentOrg.LeadInfo.IntegrationPartner {
+ parsedStatus = append(parsedStatus, "integration_partner")
+
+ // except theme take from parent org
+ org.Branding.EnableChat = parentOrg.Branding.EnableChat
+ org.Branding.HomeUrl = parentOrg.Branding.HomeUrl
+ org.Branding.DocumentationLink = parentOrg.Defaults.DocumentationReference
+ org.Branding.SupportEmail = parentOrg.Branding.SupportEmail
+ org.Branding.LogoutUrl = parentOrg.Branding.LogoutUrl
+ org.Branding.BrandColor = parentOrg.Branding.BrandColor
+ org.Branding.BrandName = parentOrg.Branding.BrandName
+ org.Branding.GlobalUser = parentOrg.Branding.GlobalUser
+
+ if len(org.Branding.Theme) == 0 {
+ org.Branding.Theme = parentOrg.Branding.Theme
+ }
+
+ userInfo.ActiveOrg.Branding = parentOrg.Branding
+ userInfo.ActiveOrg.Image = parentOrg.Image
+ userInfo.ActiveOrg.Branding.DocumentationLink = parentOrg.Defaults.DocumentationReference
+ userInfo.ActiveOrg.Branding.BrandColor = parentOrg.Branding.BrandColor
+ userInfo.ActiveOrg.Branding.SupportEmail = org.Branding.SupportEmail
+ userInfo.ActiveOrg.Branding.LogoutUrl = org.Branding.LogoutUrl
+ userInfo.ActiveOrg.Branding.BrandName = parentOrg.Branding.BrandName
+
+ if len(org.Branding.Theme) == 0 {
+ userInfo.ActiveOrg.Branding.Theme = parentOrg.Branding.Theme
+ } else {
+ userInfo.ActiveOrg.Branding.Theme = org.Branding.Theme
+ }
+
+ // check whether current is global user or not? means is user part of parent org or not
+ for _, user := range parentOrg.Users {
+ if user.Id == userInfo.Id && user.Role == "admin" {
+ userInfo.ActiveOrg.Branding.GlobalUser = true
+ break
+ }
+ }
+ }
+ }
+ } else {
+ // for parent org branding
+ if org.LeadInfo.IntegrationPartner {
+ userInfo.ActiveOrg.Branding.Theme = org.Branding.Theme
+ userInfo.ActiveOrg.Branding.DocumentationLink = org.Defaults.DocumentationReference
+ userInfo.ActiveOrg.Branding.SupportEmail = org.Branding.SupportEmail
+ userInfo.ActiveOrg.Branding.LogoutUrl = org.Branding.LogoutUrl
+ userInfo.ActiveOrg.Branding.BrandColor = org.Branding.BrandColor
+ userInfo.ActiveOrg.Branding.BrandName = org.Branding.BrandName
+
+ parsedStatus = append(parsedStatus, "integration_partner")
+ }
+ }
+
returnValue := shuffle.HandleInfo{
Success: true,
Username: userInfo.Username,
@@ -1092,6 +1158,7 @@ func handleInfo(resp http.ResponseWriter, request *http.Request) {
Licensed: licensed,
ActiveApps: activatedAppIds,
Theme: userInfo.Theme,
+ OrgStatus: parsedStatus,
}
returnData, err := json.Marshal(returnValue)
diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx
index 13289352..9425a1c6 100755
--- a/frontend/src/App.jsx
+++ b/frontend/src/App.jsx
@@ -92,7 +92,7 @@ const App = (message, props) => {
const [dataset, setDataset] = useState(false)
const [isLoaded, setIsLoaded] = useState(false)
const [curpath, setCurpath] = useState(typeof window === "undefined" || window.location === undefined ? "" : window.location.pathname)
- const { themeMode, handleThemeChange, setBrandColor, brandColor,setThemeMode} = useContext(Context);
+ const { themeMode, handleThemeChange, setBrandColor, brandColor,setThemeMode, setSupportEmail, setLogoutUrl, setBrandName} = useContext(Context);
const currentTheme = getTheme(themeMode, brandColor);
const mainColor = currentTheme?.palette?.backgroundColor
const [isPreviousThemeLight, setIsPreviousThemeLight] = useState(false)
@@ -192,11 +192,44 @@ const App = (message, props) => {
{ path: "/" }
);
}
- if (responseJson?.theme?.length > 0) {
- handleThemeChange(responseJson.theme)
- }else{
- handleThemeChange("dark")
- }
+ if (responseJson?.org_status?.includes("integration_partner")) {
+ if (responseJson?.active_org?.branding?.enable_chat !== true) {
+
+ // Find the drift chatbox and remove it
+ }
+
+ if (responseJson?.active_org?.branding?.theme?.length > 0 ) {
+ handleThemeChange(responseJson?.active_org?.branding?.theme)
+ }
+
+ if (responseJson?.active_org?.branding?.brand_color?.length > 0 ) {
+ setBrandColor(responseJson?.active_org?.branding?.brand_color)
+ localStorage.setItem("brandColor", responseJson?.active_org?.branding?.brand_color)
+ }
+
+ if (responseJson?.active_org?.branding?.brand_name?.length > 0 ) {
+ setBrandName(responseJson?.active_org?.branding?.brand_name)
+ localStorage.setItem("brandName", responseJson?.active_org?.branding?.brand_name)
+ }
+
+ if (responseJson?.active_org?.branding?.support_email?.length > 0 ) {
+ setSupportEmail(responseJson?.active_org?.branding?.support_email)
+ }
+
+ if (responseJson?.active_org?.branding?.logout_url?.length > 0 ) {
+ setLogoutUrl(responseJson?.active_org?.branding?.logout_url)
+ }
+ } else {
+ localStorage.removeItem("brandColor")
+ setBrandColor("#ff8544")
+ setBrandName("Shuffle")
+ localStorage.removeItem("brandName")
+ if(responseJson?.theme?.length > 0){
+ handleThemeChange(responseJson?.theme)
+ }else{
+ handleThemeChange("dark")
+ }
+ }
}else {
handleThemeChange("dark")
setThemeMode("dark")
diff --git a/frontend/src/components/LineChartWrapper.jsx b/frontend/src/components/LineChartWrapper.jsx
new file mode 100644
index 00000000..95aa8024
--- /dev/null
+++ b/frontend/src/components/LineChartWrapper.jsx
@@ -0,0 +1,107 @@
+import React, { useState, useEffect, useContext, memo, useMemo } from 'react'
+import {getTheme} from '../theme.jsx';
+import { Context } from '../context/ContextApi.jsx';
+
+import {
+ Typography,
+} from '@mui/material';
+
+import {
+ BarChart,
+ BarSeries,
+ Bar,
+ BarLabel,
+
+ GridlineSeries,
+ Gridline,
+ TooltipArea,
+ ChartTooltip,
+ TooltipTemplate,
+} from 'reaviz';
+
+const LineChartWrapper = (props) => {
+ const {keys, inputname, height, width, border} = props
+
+ const [hovered, setHovered] = useState("");
+ const {themeMode} = useContext(Context)
+ const theme = getTheme(themeMode)
+
+ var inputdata = keys.data === undefined ? keys : keys.data
+
+ var newname = inputname === undefined || inputname === null ? "" : inputname.trim().replaceAll("_", " ")
+ newname = newname.charAt(0).toUpperCase() + newname.slice(1)
+
+ if (inputdata?.key !== undefined && inputdata?.key !== null && inputdata?.key !== "" && inputdata?.datasets !== undefined && inputdata?.datasets !== null && inputdata?.datasets.length > 0 && inputdata?.labels !== undefined && inputdata?.labels !== null && inputdata?.labels.length > 0) {
+
+ var tmpdata = inputdata?.datasets[0]
+ if (tmpdata?.data !== undefined && tmpdata?.data !== null && tmpdata?.data.length > 0 && inputdata?.labels?.length === tmpdata?.data?.length) {
+ console.log("Fix it!")
+ var newarray = []
+ for (var key in tmpdata.data) {
+ var entry = {
+ "key": inputdata.labels[key] !== undefined ? inputdata.labels[key] : key,
+ "data": tmpdata.data[key],
+ }
+
+ newarray.push(entry)
+ }
+
+ inputdata = newarray
+ }
+
+ }
+
+ if (inputdata === undefined || inputdata === null) {
+ return (
+