@bygd/nc-report-ui 0.1.18 → 0.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@material-ui/core/Paper"),a=require("@material-ui/core/styles"),r=require("@material-ui/core/LinearProgress"),n=require("react-google-charts"),l=require("numeral"),i=require("axios"),o=require("@material-ui/core/Typography"),s=require("nunjucks"),u=require("@material-ui/core/FormControl"),d=require("@material-ui/core/Select"),c=require("@material-ui/core/MenuItem"),f=require("react-intersection-observer"),m=require("@mui/material"),p=require("@mui/icons-material/CheckBoxOutlineBlank"),h=require("@mui/icons-material/CheckBox"),y=require("@mui/material/Box"),g=require("@mui/material/InputLabel"),b=require("@mui/material/MenuItem"),v=require("@mui/material/FormControl"),E=require("@mui/material/Select"),w=require("eventemitter3"),x=require("@material-ui/core/Grid"),S=require("@material-ui/core/Box"),C=require("@material-ui/core/Container");function k(e){return e&&e.__esModule?e:{default:e}}function q(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(a){if("default"!==a){var r=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(t,a,r.get?r:{enumerable:!0,get:function(){return e[a]}})}}),t.default=e,Object.freeze(t)}var M=q(e),R=k(t),I=k(r),T=k(l),A=k(i),D=k(o),O=k(s),_=k(u),F=k(d),z=k(c),Y=k(p),P=k(h),j=k(y),$=k(g),B=k(b),W=k(v),G=k(E),L=k(w),U=k(x),V=k(S),H=k(C);function K(){return K=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var r in a)({}).hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e},K.apply(null,arguments)}const N=a.makeStyles(e=>({root:{width:"100%","& > * + *":{marginTop:e.spacing(2)}}}));function J(e){const t=N();return M.default.createElement("div",K({className:t.root},e),M.default.createElement(I.default,null))}function Q(e,t,a="array"){const r=e.columns,n=[...t.doc.metrics,...t.doc.dimensions].reduce((e,t)=>(e[t.name]=t,e),{});return e=>{const t="array"===a?[]:{};return r.reduce((t,r)=>{const l=e[r.name],i=n[r.name];let o=l;return o="timestamp"===i.type?new Date(l):i.format?i.format&&i.prefix?{v:+l,f:i.prefix+" "+T.default(l).format(i.format)}:i.format?{v:+l,f:T.default(l).format(i.format)}:l:l,"array"===a?t.push(o):t[r.name]=o?.f||o,t},t)}}const X="https://report-api.netcapital.pro",Z=A.default.create({baseURL:X,headers:{"Content-Type":"application/json"}}),ee={},te=()=>{const e=Object.keys(ee);return e.length>0?e[0]:null},ae={setBaseUrl(e){Z.defaults.baseURL=e||X},setToken(e){e&&(Z.defaults.headers.common.Authorization=`Bearer ${e}`)},loadDashboardMeta:async({dashboardId:e})=>{const{data:t}=await Z.get(`/dashboard-meta/${e}`);return ee[e]={dashboards:t.dashboards||{},charts:t.charts||{},reports:t.reports||{},reportMetadata:t.reportMetadata||{},dateRanges:t.dateRanges||[]},ee[e]},getDashboard:async({id:e,dashboardId:t})=>{const a=t||te();if(a&&ee[a]?.dashboards?.[e])return ee[a].dashboards[e];const{data:r}=await Z.get(`/entity/dashboards/${e}`);return r},getChart:async({id:e,dashboardId:t})=>{const a=t||te();if(a&&ee[a]?.charts?.[e])return ee[a].charts[e];const{data:r}=await Z.get(`/entity/charts/${e}`);return r},getReport:async({id:e,dashboardId:t})=>{const a=t||te();if(a&&ee[a]?.reports?.[e])return ee[a].reports[e];const{data:r}=await Z.get(`/entity/reports/${e}`);return r},getProviders:async()=>{const{data:e}=await Z.get("/entity/providers");return e},getReportSchema:async({id:e,dashboardId:t,query:a={}})=>{const r=t||te();if(r&&ee[r]?.reportMetadata?.[e])return ee[r].reportMetadata[e];const{data:n}=await Z.post(`/reports/${e}/metadata`,a);return n},runReport:async({id:e,query:t={}})=>{const{data:a}=await Z.post(`/reports/${e}/run`,t);return a},runAdHocReport:async({report:e})=>{const{data:t}=await Z.post("/report-build/run",e);return t},getDateRanges:async({dashboardId:e}={})=>{const t=e||te();if(t&&ee[t]?.dateRanges)return ee[t].dateRanges;const{data:a}=await Z.get("/globals/date-ranges");return a},getReportDefinitions:async()=>{const{data:e}=await Z.get("/report-definitions");return e},getReportDefinition:async({id:e})=>{const{data:t}=await Z.get(`/report-definitions/${e}`);return t},createReportDefinition:async({reportDefinition:e})=>{const{data:t}=await Z.post("/report-definitions",e);return t},updateReportDefinition:async({id:e,reportDefinition:t})=>{const{data:a}=await Z.put(`/report-definitions/${e}`,t);return a},deleteReportDefinition:async({id:e})=>{const{data:t}=await Z.delete(`/report-definitions/${e}`);return t}},re=a.makeStyles(e=>({headerRow:{fontFamily:e.typography.fontFamily,fontSize:e.typography.fontSize},tableRow:{fontFamily:e.typography.fontFamily,fontSize:e.typography.fontSize},oddTableRow:{fontFamily:e.typography.fontFamily,fontSize:e.typography.fontSize},headerCell:{backgroundColor:"white",padding:"4px !important"}})),ne={none:"YYYY-MM-dd",day:"MMM dd",week:"MMM dd",month:"YYYY MMM",year:"YYYY"};const le={GoogleChart:function({chart:t,source:a,view:r,report:l,schema:i,dashboard:o,query:s}){const[u,d]=M.default.useState([]),c=re(),[f,m]=M.default.useState([]);e.useEffect(()=>{(async()=>{const e=await ae.getDateRanges();m(e)})()},[]);const p=e.useMemo(()=>{const e="YYYY-MM-dd",t=s?.date_range?.name,a=f.find(e=>e.name===t);if(!a)return e;return ne[a?.granularity]||e},[f,s]);return M.default.useEffect(()=>{if(!(t&&r&&a&&l&&i))return;let e=[];e.push(function(e,t){const a=[...t.doc.metrics,...t.doc.dimensions];return e.columns.reduce((e,t)=>{const r=a.find(e=>e.name===t.name)||t;return e.push(r.title||r.name),e},[])}(r,i));const n=Q(r,i);a?.forEach(t=>{const a=n(t);e.push(a)}),a?.length?d(e):d()},[t,a,r,l,i]),u?M.default.createElement("div",{style:{}},M.default.createElement(n.Chart,K({width:t?.doc.size?.width||"100%",chartType:t?.doc.chart?.type,data:u,options:(e=>{if("Table"===t?.doc.chart?.type)return{...t?.doc.chart?.options,cssClassNames:c};if("AreaChart"===t?.doc.chart?.type){const a=t?.doc.chart?.options?.hAxis||{},r={...{ticks:e.slice(1).map(e=>e[0]),format:p},...a};return{...t?.doc.chart?.options,hAxis:r,focusTarget:"category"}}return t?.doc.chart?.options})(u)},t?.doc.chart?.props))):M.default.createElement("div",null)},LabelChart:function({chart:e,source:t,view:a,report:r,schema:n}){const[l,i]=M.default.useState([]),[o,s]=M.default.useState(),[u,d]=M.default.useState();return M.default.useEffect(()=>{if(!(e&&a&&t&&r&&n))return;let l=[];const o=Q(a,n);t.forEach(e=>l.push(o(e))),i(l);const u=e?.doc?.chart?.options||{},c=u?.index||0;if(l.length>0&&s(l[0][c]),u.subText?.format){O.default.configure({autoescape:!1});const e=Q(a,n,"object")(t[0]),r=O.default.renderString(u.subText?.format,e);d(r)}},[e,t,a,r,n]),M.default.createElement("div",{style:{display:"flex",justifyContent:"center",alignContent:"center",height:"100%",flexDirection:"column"}},M.default.createElement(D.default,{variant:"h6"},o?.f||o),M.default.createElement(D.default,{variant:"caption"},u))}};function ie(e,t){return void 0!==le[e]?M.default.createElement(le[e],t):M.default.createElement(J,t)}const oe=M.createElement(Y.default,{fontSize:"small"}),se=M.createElement(P.default,{fontSize:"small"});function ue({items:t,selectedKeys:a,defaultSelectedKeys:r,onChange:n,inputValue:l,defaultInputValue:i,onInputChange:o,debounceMs:s=300,label:u,placeholder:d,loading:c,disabled:f,size:p="small",error:h,helperText:y,limitTags:g=3,disableClearable:b,id:v,textFieldProps:E}){const w=e.useMemo(()=>Array.isArray(t)?t:[],[t]),x=Array.isArray(a),[S,C]=e.useState(Array.isArray(r)?r:[]),k=x?a:S,q=e.useMemo(()=>{const e=new Map;for(const t of w)e.set(t&&t.key,t);return e},[w]),R=e.useMemo(()=>(Array.isArray(k)?k:[]).map(e=>q.get(e)).filter(Boolean),[k,q]),I="string"==typeof l,[T,A]=e.useState("string"==typeof i?i:""),D=I?l:T,O=function(t,a=300){const r=e.useRef(t),n=e.useRef(null);return r.current=t,e.useEffect(()=>()=>{n.current&&window.clearTimeout(n.current)},[]),M.useCallback((...e)=>{r.current&&(n.current&&window.clearTimeout(n.current),n.current=window.setTimeout(()=>{r.current&&r.current(...e)},a))},[a])}(e=>{o&&o(e)},s),_=R;return M.createElement(m.FormControl,{fullWidth:!0,error:h,disabled:f},M.createElement(m.Autocomplete,{openOnFocus:!0,forcePopupIcon:!0,id:v,multiple:!0,disableCloseOnSelect:!0,options:w,value:_,inputValue:D,getOptionLabel:e=>e&&"object"==typeof e?e.value??"":"",isOptionEqualToValue:(e,t)=>e&&t&&e.key===t.key,loading:c,limitTags:g,disableClearable:b,onChange:(e,t)=>{const a=Array.isArray(t)?t.map(e=>e&&e.key):[];x||C(a),n&&n(a,Array.isArray(t)?t:[])},onInputChange:(e,t,a)=>{I||A(t??""),"input"===a?O(t??""):"clear"===a&&O("")},renderOption:(e,t,{selected:a})=>M.createElement("li",K({},e,{key:t&&t.key||Math.random().toString(36)}),M.createElement(m.Checkbox,{icon:oe,checkedIcon:se,style:{marginRight:8},checked:!!a}),t&&t.value),renderTags:(e,t)=>(Array.isArray(e)?e:[]).map((e,a)=>M.createElement(m.Chip,K({},t({index:a}),{key:e&&e.key||a,label:e&&e.value||""}))),renderInput:e=>M.createElement(m.TextField,K({},e,{label:u,placeholder:d,InputProps:{...e.InputProps,endAdornment:M.createElement(M.Fragment,null,c?M.createElement(m.CircularProgress,{size:18}):null,e.InputProps.endAdornment)},size:p},E))}),y?M.createElement(m.FormHelperText,null,y):null)}const de=({filter:t,channel:a,query:r})=>{const[n,l]=e.useState([]),[i,o]=e.useState([]),[s,u]=e.useState(!1),[d,c]=e.useState("");return e.useEffect(()=>{o(r?.filter?.[t?.filter]||[])},[r]),e.useEffect(()=>{(async()=>{u(!0);const e=await async function(e,t){return t?.source?(await ae.runReport({id:t.source})).map(e=>({key:e[t.field],value:e[t.field]})):[]}(0,t);l(e),u(!1)})()},[d]),M.default.createElement("div",{style:{display:"flex"}},M.default.createElement("div",{style:{maxWidth:640,minWidth:200}},M.default.createElement(ue,{id:t?.title,label:t?.title,placeholder:"Type to search…",items:n,selectedKeys:i,onChange:(e,r)=>{o(e),a.emit("filterChanged",t,{[t.filter]:e})},onInputChange:e=>{c(e)},loading:s,debounceMs:300,helperText:i.length?`${i.length} selected`:""})))};function ce({items:e,value:t,label:a,onChange:r,sx:n={width:"100%"}}){const l=e.some(e=>e.key===t)?t:"";return M.default.createElement(j.default,{sx:n},M.default.createElement(W.default,{fullWidth:!0},M.default.createElement($.default,{id:"demo-simple-select-label"},a),M.default.createElement(G.default,{labelId:"demo-simple-select-label",id:"demo-simple-select",value:l,label:a,onChange:r,MenuProps:{style:{maxHeight:"300px"}},size:"small"},e.map(e=>{const{key:t,value:a,disabled:r}=e;return M.default.createElement(B.default,{key:t,value:t,disabled:r},a)}))))}const fe=({filter:t,channel:a,query:r})=>{const[n,l]=e.useState([]),[i,o]=e.useState("");return e.useEffect(()=>{o(r?.date_range?.name)},[r]),e.useEffect(()=>{(async()=>{const e=(await ae.getDateRanges()).filter(e=>!(t.allowedOptions.length>0)||t.allowedOptions.some(t=>t===e.name)).map(e=>({key:e.name,value:e.title}));l(e)})()},[]),M.default.createElement("div",{style:{minWidth:"200px",maxWidth:"640px"}},M.default.createElement(ce,{items:n,value:i,label:t?.title,onChange:(e,r)=>{const n=e.target.value;o(n),a.emit("filterChanged",t,{date_range:{name:n}})}}))},me=({filters:e=[],channel:t,query:a})=>M.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px"}},e.map(e=>"multi-select"===e.type?M.default.createElement(de,{key:e.title,channel:t,filter:e,query:a}):"date-range"===e.type?M.default.createElement(fe,{key:e.title,channel:t,filter:e,query:a}):null));var pe=e=>M.default.useRef(e||new L.default).current,he=e=>{const t=M.default.useState({}),a=M.default.useCallback((a,r)=>{let n={...t.current,...r};for(var l in t.current=n,n)"date_range"===l||n[l].length||delete n[l];e?.emit("mergedFilterChanged",{value:n})},[e]);M.default.useEffect(()=>(e?.on("filterChanged",a),()=>{e?.off("filterChanged",a)}),[e])},ye=({id:e,cache:t,dashboard:a,channel:r,...n})=>{const[l,i]=M.default.useState(),[o,s]=M.default.useState(),[u,d]=M.default.useState(),[c,m]=M.default.useState(),[p,h]=M.default.useState(ie()),[y,g]=M.default.useState(),[b,v]=M.default.useState(0),[E,w]=M.default.useState(!1),[x,S]=M.default.useState(),[C,k]=M.default.useState(!1),q=M.default.useRef({value:n?.filter}),[I,T]=M.default.useState({}),{ref:A,inView:O,entry:Y}=f.useInView({threshold:.1,delay:1e3}),P=pe(r);he(P);const j=M.default.useCallback(e=>{const t=e.target.value;v(t),g(l.doc.view[t])},[l]);M.default.useEffect(()=>{e&&(async()=>{const a=e,r=t?.[a]||await ae.getChart({id:a}),l=r.doc.source?.id,o=l?t?.[l]||await ae.getReport({id:l}):void 0,u=t?.[`schema_${l}`]||n?.schema||await ae.getReportSchema({id:l}),c=r.doc?.view?.[0];v(0),s(o),i(r),g(c),d(u),k(!0)})().catch(e=>{console.error(e.message)})},[e]),M.default.useEffect(()=>{l&&c&&(!l?.doc?.source?.id||o)&&u&&(async()=>{h(ie(l.doc.chart?.component,{view:y,source:c,chart:l,report:o,schema:u,dashboard:a,query:I}))})().catch(e=>{console.error(e.message)})},[l,c,y,o,u]);const $=e=>{const t={...o?.doc.query.filter||{},...n?.filter,...e?.value},a=t.date_range||o?.doc.query.date_range;if(delete t.date_range,k(!1),S(),w(!0),"context"===l?.doc?.source?.type)return m({filter:t}),void w(!1);const r={filter:t,date_range:a,parameters:n?.params};T(r),ae.runReport({id:o.id,query:r}).then(e=>{m(l.doc.source.reverse?e.reverse():e)}).catch(e=>{m([])}).finally(()=>{w(!1)})},B=e=>{q.current=e,O?$(e):(S(e),k(!0))};return M.default.useEffect(()=>(P?.on("mergedFilterChanged",B),()=>{P?.off("mergedFilterChanged",B)}),[P,o,l,O]),M.default.useEffect(()=>{O&&C&&$(x)},[O,C]),M.default.useEffect(()=>{k(!0)},[n.params]),M.default.createElement(R.default,{ref:A,style:{padding:"16px",paddingTop:0,flexGrow:1,borderRadius:12,display:"flex",flexDirection:"column",gap:"16px"},elevation:2},M.default.createElement(J,{style:{visibility:E?"visible":"hidden"}}),M.default.createElement("div",{style:{display:"flex"}},M.default.createElement("div",null,l&&M.default.createElement("div",{style:{display:"flex",alignItems:"center",lineHeight:0}},M.default.createElement(D.default,{noWrap:!0,variant:"caption"},n?.title||l.doc.name," "))),M.default.createElement("div",{style:{flexGrow:1}}),M.default.createElement("div",null,l?.doc?.view?.length>1&&M.default.createElement(_.default,null,M.default.createElement(F.default,{labelId:"date-range-select-label",id:"date-range-select",value:b,onChange:j,style:{fontSize:"12px"},disableUnderline:!0},l.doc.view.map((e,t)=>M.default.createElement(z.default,{key:t,value:t},e.title)))))),M.default.createElement("div",{style:{position:"relative",flexGrow:a?void 0:1,display:"flex",flexDirection:"column"}},M.default.createElement(me,{filters:l?.doc?.filters,channel:P,query:I}),p))};var ge={Chart:ye,Dashboard:function({id:t="sample_dashboard",api:a,params:r}){const[n,l]=M.default.useState(),[i]=M.default.useState(),[o,s]=M.default.useState([]),u=M.default.useRef({}),d=pe();he(d),e.useEffect(()=>{ae.setBaseUrl(a.base_url),ae.setToken(a.token)},[a]);const c=async e=>{const t=e?.doc?.rows||[],a=[];for(let e=0;e<t.length;e++){const r=t[e];r.columns?.forEach(e=>{if(e.override?.filter?.length){const t={};e.override.filter.forEach(e=>{e.hasOwnProperty("value")&&(t[e.field]=[e.value])}),e.filter=t}}),a.push(r)}s(a)};return M.default.useEffect(()=>{t&&(async()=>{ae.setBaseUrl(a.base_url),ae.setToken(a.token),await ae.loadDashboardMeta({dashboardId:t});const e=await ae.getDashboard({id:t});u.current[e?.id]=e,l(e),await c(e)})().catch(e=>console.error(e.message))},[t]),M.default.createElement(H.default,{maxWidth:!1,disableGutters:!0,style:{height:"100vh",padding:0,margin:0,overflow:"hidden"}},M.default.createElement(U.default,{container:!0,spacing:2,style:{height:"100%",width:"100%"}},o?.map((e,t)=>M.default.createElement(U.default,{key:t,container:!0,item:!0,alignItems:"stretch",spacing:2},e?.columns?.map((e,t)=>M.default.createElement(U.default,{key:t,item:!0,xs:!0,style:{display:"flex"}},M.default.createElement(V.default,{style:{flex:1,display:"flex",flexDirection:"column"}},M.default.createElement(ye,{api:a,cache:u.current,id:e.id,dashboard:n,schema:i,channel:null,title:e.title,filter:e.filter,params:r}))))))))}};exports.default=ge;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),t=require("@material-ui/core/Paper"),a=require("@material-ui/core/styles"),r=require("@material-ui/core"),n=require("react-google-charts"),l=require("numeral"),o=require("axios"),i=require("@material-ui/core/Typography"),s=require("nunjucks"),u=require("@material-ui/core/FormControl"),d=require("@material-ui/core/Select"),c=require("@material-ui/core/MenuItem"),f=require("react-intersection-observer"),m=require("@mui/material"),p=require("@mui/icons-material/CheckBoxOutlineBlank"),h=require("@mui/icons-material/CheckBox"),y=require("@mui/material/Box"),g=require("@mui/material/InputLabel"),b=require("@mui/material/MenuItem"),E=require("@mui/material/FormControl"),v=require("@mui/material/Select"),w=require("eventemitter3"),x=require("@material-ui/core/Grid"),C=require("@material-ui/core/Container");function S(e){return e&&e.__esModule?e:{default:e}}function k(e){if(e&&e.__esModule)return e;var t=Object.create(null);return e&&Object.keys(e).forEach(function(a){if("default"!==a){var r=Object.getOwnPropertyDescriptor(e,a);Object.defineProperty(t,a,r.get?r:{enumerable:!0,get:function(){return e[a]}})}}),t.default=e,Object.freeze(t)}var q=k(e),M=S(t),R=S(l),I=S(o),T=S(i),A=S(s),D=S(u),F=S(d),O=S(c),_=S(p),z=S(h),Y=S(y),j=S(g),P=S(b),$=S(E),B=S(v),W=S(w),U=S(x),V=S(C);function G(){return G=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var r in a)({}).hasOwnProperty.call(a,r)&&(e[r]=a[r])}return e},G.apply(null,arguments)}const L=a.makeStyles(e=>({root:{width:"100%","& > * + *":{marginTop:e.spacing(2)}}}));function H(e){const t=L();return q.default.createElement("div",G({className:t.root},e),q.default.createElement(r.CircularProgress,{style:{color:"rgb(70, 134, 128)"},size:25}))}function K(e,t,a="array"){const r=e.columns,n=[...t.doc.metrics,...t.doc.dimensions].reduce((e,t)=>(e[t.name]=t,e),{});return e=>{const t="array"===a?[]:{};return r.reduce((t,r)=>{const l=e[r.name],o=n[r.name];let i=l;return i="timestamp"===o.type?new Date(l):o.format?o.format&&o.prefix?{v:+l,f:o.prefix+" "+R.default(l).format(o.format)}:o.format?{v:+l,f:R.default(l).format(o.format)}:l:l,"array"===a?t.push(i):t[r.name]=i?.f||i,t},t)}}const N="https://report-api.netcapital.pro",J=I.default.create({baseURL:N,headers:{"Content-Type":"application/json"}}),Q={},X=()=>{const e=Object.keys(Q);return e.length>0?e[0]:null},Z={setBaseUrl(e){J.defaults.baseURL=e||N},setToken(e){e&&(J.defaults.headers.common.Authorization=`Bearer ${e}`)},loadDashboardMeta:async({dashboardId:e})=>{const{data:t}=await J.get(`/dashboard-meta/${e}`);return Q[e]={dashboards:t.dashboards||{},charts:t.charts||{},reports:t.reports||{},reportMetadata:t.reportMetadata||{},dateRanges:t.dateRanges||[]},Q[e]},getDashboard:async({id:e,dashboardId:t})=>{const a=t||X();if(a&&Q[a]?.dashboards?.[e])return Q[a].dashboards[e];const{data:r}=await J.get(`/entity/dashboards/${e}`);return r},getChart:async({id:e,dashboardId:t})=>{const a=t||X();if(a&&Q[a]?.charts?.[e])return Q[a].charts[e];const{data:r}=await J.get(`/entity/charts/${e}`);return r},getReport:async({id:e,dashboardId:t})=>{const a=t||X();if(a&&Q[a]?.reports?.[e])return Q[a].reports[e];const{data:r}=await J.get(`/entity/reports/${e}`);return r},getProviders:async()=>{const{data:e}=await J.get("/entity/providers");return e},getReportSchema:async({id:e,dashboardId:t,query:a={}})=>{const r=t||X();if(r&&Q[r]?.reportMetadata?.[e])return Q[r].reportMetadata[e];const{data:n}=await J.post(`/reports/${e}/metadata`,a);return n},runReport:async({id:e,query:t={}})=>{const{data:a}=await J.post(`/reports/${e}/run`,t);return a},runAdHocReport:async({report:e})=>{const{data:t}=await J.post("/report-build/run",e);return t},getDateRanges:async({dashboardId:e}={})=>{const t=e||X();if(t&&Q[t]?.dateRanges)return Q[t].dateRanges;const{data:a}=await J.get("/globals/date-ranges");return a},getReportDefinitions:async()=>{const{data:e}=await J.get("/report-definitions");return e},getReportDefinition:async({id:e})=>{const{data:t}=await J.get(`/report-definitions/${e}`);return t},createReportDefinition:async({reportDefinition:e})=>{const{data:t}=await J.post("/report-definitions",e);return t},updateReportDefinition:async({id:e,reportDefinition:t})=>{const{data:a}=await J.put(`/report-definitions/${e}`,t);return a},deleteReportDefinition:async({id:e})=>{const{data:t}=await J.delete(`/report-definitions/${e}`);return t}},ee=a.makeStyles(e=>({headerRow:{fontFamily:e.typography.fontFamily,fontSize:e.typography.fontSize},tableRow:{fontFamily:e.typography.fontFamily,fontSize:e.typography.fontSize},oddTableRow:{fontFamily:e.typography.fontFamily,fontSize:e.typography.fontSize},headerCell:{backgroundColor:"white",padding:"4px !important"}})),te={none:"YYYY-MM-dd",day:"MMM dd",week:"MMM dd",month:"YYYY MMM",year:"YYYY"};const ae={GoogleChart:function({chart:t,source:a,view:r,report:l,schema:o,dashboard:i,query:s}){const[u,d]=q.default.useState([]),c=ee(),[f,m]=q.default.useState([]);e.useEffect(()=>{(async()=>{const e=await Z.getDateRanges();m(e)})()},[]);const p=e.useMemo(()=>{const e="YYYY-MM-dd",t=s?.date_range?.name,a=f.find(e=>e.name===t);if(!a)return e;return te[a?.granularity]||e},[f,s]);return q.default.useEffect(()=>{if(!(t&&r&&a&&l&&o))return;let e=[];e.push(function(e,t){const a=[...t.doc.metrics,...t.doc.dimensions];return e.columns.reduce((e,t)=>{const r=a.find(e=>e.name===t.name)||t;return e.push(r.title||r.name),e},[])}(r,o));const n=K(r,o);a?.forEach(t=>{const a=n(t);e.push(a)}),a?.length?d(e):d()},[t,a,r,l,o]),u?q.default.createElement("div",{style:{}},q.default.createElement(n.Chart,G({width:t?.doc.size?.width||"100%",chartType:t?.doc.chart?.type,data:u,options:(e=>{const a=["#468682","#ff686b","#6c757d","#FFD700","#073b4c"];if("Table"===t?.doc.chart?.type)return{...t?.doc.chart?.options,cssClassNames:c};if("AreaChart"===t?.doc.chart?.type){const r=t?.doc.chart?.options?.hAxis||{},n={...{ticks:e.slice(1).map(e=>e[0]),format:p},...r};return{...t?.doc.chart?.options,hAxis:n,focusTarget:"category",colors:a}}return{...t?.doc.chart?.options,colors:a}})(u)},t?.doc.chart?.props))):q.default.createElement("div",null)},LabelChart:function({chart:e,source:t,view:a,report:r,schema:n}){const[l,o]=q.default.useState([]),[i,s]=q.default.useState(),[u,d]=q.default.useState();return q.default.useEffect(()=>{if(!(e&&a&&t&&r&&n))return;let l=[];const i=K(a,n);t.forEach(e=>l.push(i(e))),o(l);const u=e?.doc?.chart?.options||{},c=u?.index||0;if(l.length>0&&s(l[0][c]),u.subText?.format){A.default.configure({autoescape:!1});const e=K(a,n,"object")(t[0]),r=A.default.renderString(u.subText?.format,e);d(r)}},[e,t,a,r,n]),q.default.createElement("div",{style:{display:"flex",justifyContent:"center",alignContent:"center",height:"100%",flexDirection:"column"}},q.default.createElement(T.default,{variant:"h6"},i?.f||i),q.default.createElement(T.default,{variant:"caption"},u))}};function re(e,t){return void 0!==ae[e]?q.default.createElement(ae[e],t):q.default.createElement(H,t)}const ne=q.createElement(_.default,{fontSize:"small"}),le=q.createElement(z.default,{fontSize:"small"});function oe({items:t,selectedKeys:a,defaultSelectedKeys:r,onChange:n,inputValue:l,defaultInputValue:o,onInputChange:i,debounceMs:s=300,label:u,placeholder:d,loading:c,disabled:f,size:p="small",error:h,helperText:y,limitTags:g=3,disableClearable:b,id:E,textFieldProps:v}){const w=e.useMemo(()=>Array.isArray(t)?t:[],[t]),x=Array.isArray(a),[C,S]=e.useState(Array.isArray(r)?r:[]),k=x?a:C,M=e.useMemo(()=>{const e=new Map;for(const t of w)e.set(t&&t.key,t);return e},[w]),R=e.useMemo(()=>(Array.isArray(k)?k:[]).map(e=>M.get(e)).filter(Boolean),[k,M]),I="string"==typeof l,[T,A]=e.useState("string"==typeof o?o:""),D=I?l:T,F=function(t,a=300){const r=e.useRef(t),n=e.useRef(null);return r.current=t,e.useEffect(()=>()=>{n.current&&window.clearTimeout(n.current)},[]),q.useCallback((...e)=>{r.current&&(n.current&&window.clearTimeout(n.current),n.current=window.setTimeout(()=>{r.current&&r.current(...e)},a))},[a])}(e=>{i&&i(e)},s),O=R;return q.createElement(m.FormControl,{fullWidth:!0,error:h,disabled:f},q.createElement(m.Autocomplete,{openOnFocus:!0,forcePopupIcon:!0,id:E,multiple:!0,disableCloseOnSelect:!0,options:w,value:O,inputValue:D,getOptionLabel:e=>e&&"object"==typeof e?e.value??"":"",isOptionEqualToValue:(e,t)=>e&&t&&e.key===t.key,loading:c,limitTags:g,disableClearable:b,onChange:(e,t)=>{const a=Array.isArray(t)?t.map(e=>e&&e.key):[];x||S(a),n&&n(a,Array.isArray(t)?t:[])},onInputChange:(e,t,a)=>{I||A(t??""),"input"===a?F(t??""):"clear"===a&&F("")},renderOption:(e,t,{selected:a})=>q.createElement("li",G({},e,{key:t&&t.key||Math.random().toString(36)}),q.createElement(m.Checkbox,{icon:ne,checkedIcon:le,style:{marginRight:8},checked:!!a}),t&&t.value),renderTags:(e,t)=>(Array.isArray(e)?e:[]).map((e,a)=>q.createElement(m.Chip,G({},t({index:a}),{key:e&&e.key||a,label:e&&e.value||""}))),renderInput:e=>q.createElement(m.TextField,G({},e,{label:u,placeholder:d,InputProps:{...e.InputProps,endAdornment:q.createElement(q.Fragment,null,c?q.createElement(m.CircularProgress,{size:18}):null,e.InputProps.endAdornment)},size:p},v))}),y?q.createElement(m.FormHelperText,null,y):null)}const ie=({filter:t,channel:a,query:r})=>{const[n,l]=e.useState([]),[o,i]=e.useState([]),[s,u]=e.useState(!1),[d,c]=e.useState("");return e.useEffect(()=>{i(r?.filter?.[t?.filter]||[])},[r]),e.useEffect(()=>{(async()=>{u(!0);const e=await async function(e,t){return t?.source?(await Z.runReport({id:t.source})).map(e=>({key:e[t.field],value:e[t.field]})):[]}(0,t);l(e),u(!1)})()},[d]),q.default.createElement("div",{style:{display:"flex"}},q.default.createElement("div",{style:{maxWidth:640,minWidth:200}},q.default.createElement(oe,{id:t?.title,label:t?.title,placeholder:"Type to search…",items:n,selectedKeys:o,onChange:(e,r)=>{i(e),a.emit("filterChanged",t,{[t.filter]:e})},onInputChange:e=>{c(e)},loading:s,debounceMs:300,helperText:o.length?`${o.length} selected`:""})))};function se({items:e,value:t,label:a,onChange:r,sx:n={width:"100%"}}){const l=e.some(e=>e.key===t)?t:"";return q.default.createElement(Y.default,{sx:n},q.default.createElement($.default,{fullWidth:!0},q.default.createElement(j.default,{id:"demo-simple-select-label"},a),q.default.createElement(B.default,{labelId:"demo-simple-select-label",id:"demo-simple-select",value:l,label:a,onChange:r,MenuProps:{style:{maxHeight:"300px"}},size:"small"},e.map(e=>{const{key:t,value:a,disabled:r}=e;return q.default.createElement(P.default,{key:t,value:t,disabled:r},a)}))))}const ue=({filter:t,channel:a,query:r})=>{const[n,l]=e.useState([]),[o,i]=e.useState("");return e.useEffect(()=>{i(r?.date_range?.name)},[r]),e.useEffect(()=>{(async()=>{const e=(await Z.getDateRanges()).filter(e=>!(t.allowedOptions.length>0)||t.allowedOptions.some(t=>t===e.name)).map(e=>({key:e.name,value:e.title}));l(e)})()},[]),q.default.createElement("div",{style:{minWidth:"200px",maxWidth:"640px"}},q.default.createElement(se,{items:n,value:o,label:t?.title,onChange:(e,r)=>{const n=e.target.value;i(n),a.emit("filterChanged",t,{date_range:{name:n}})}}))},de=({filters:e=[],channel:t,query:a})=>q.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px"}},e.map(e=>"multi-select"===e.type?q.default.createElement(ie,{key:e.title,channel:t,filter:e,query:a}):"date-range"===e.type?q.default.createElement(ue,{key:e.title,channel:t,filter:e,query:a}):null));var ce=e=>q.default.useRef(e||new W.default).current,fe=e=>{const t=q.default.useState({}),a=q.default.useCallback((a,r)=>{let n={...t.current,...r};for(var l in t.current=n,n)"date_range"===l||n[l].length||delete n[l];e?.emit("mergedFilterChanged",{value:n})},[e]);q.default.useEffect(()=>(e?.on("filterChanged",a),()=>{e?.off("filterChanged",a)}),[e])},me=({id:e,cache:t,dashboard:a,channel:r,...n})=>{const[l,o]=q.default.useState(),[i,s]=q.default.useState(),[u,d]=q.default.useState(),[c,m]=q.default.useState(),[p,h]=q.default.useState(re()),[y,g]=q.default.useState(),[b,E]=q.default.useState(0),[v,w]=q.default.useState(!1),[x,C]=q.default.useState(),[S,k]=q.default.useState(!1),R=q.default.useRef({value:n?.filter}),[I,A]=q.default.useState({}),{ref:_,inView:z,entry:Y}=f.useInView({threshold:.1,delay:1e3}),j=ce(r);fe(j);const P=q.default.useCallback(e=>{const t=e.target.value;E(t),g(l.doc.view[t])},[l]);q.default.useEffect(()=>{e&&(async()=>{const a=e,r=t?.[a]||await Z.getChart({id:a}),l=r.doc.source?.id,i=l?t?.[l]||await Z.getReport({id:l}):void 0,u=t?.[`schema_${l}`]||n?.schema||await Z.getReportSchema({id:l}),c=r.doc?.view?.[0];E(0),s(i),o(r),g(c),d(u),k(!0)})().catch(e=>{console.error(e.message)})},[e]),q.default.useEffect(()=>{l&&c&&(!l?.doc?.source?.id||i)&&u&&(async()=>{h(re(l.doc.chart?.component,{view:y,source:c,chart:l,report:i,schema:u,dashboard:a,query:I}))})().catch(e=>{console.error(e.message)})},[l,c,y,i,u]);const $=e=>{const t={...i?.doc.query.filter||{},...n?.filter,...e?.value},a=t.date_range||i?.doc.query.date_range;if(delete t.date_range,k(!1),C(),w(!0),"context"===l?.doc?.source?.type)return m({filter:t}),void w(!1);const r={filter:t,date_range:a,parameters:n?.params};A(r),Z.runReport({id:i.id,query:r}).then(e=>{m(l.doc.source.reverse?e.reverse():e)}).catch(e=>{m([])}).finally(()=>{w(!1)})},B=e=>{R.current=e,z?$(e):(C(e),k(!0))};return q.default.useEffect(()=>(j?.on("mergedFilterChanged",B),()=>{j?.off("mergedFilterChanged",B)}),[j,i,l,z]),q.default.useEffect(()=>{z&&S&&$(x)},[z,S]),q.default.useEffect(()=>{k(!0)},[n.params]),q.default.createElement(M.default,{ref:_,elevation:0,style:{borderRadius:12,padding:20,border:"1px solid #e5e5e5",background:"#fff",display:"flex",flexDirection:"column",gap:"12px",height:"100%"}},l&&q.default.createElement("div",{style:{display:"flex",alignItems:"center",lineHeight:0}},q.default.createElement(T.default,{variant:"subtitle2",style:{fontWeight:600,color:"#252525"}},n?.title||l.doc.name," ")),v?q.default.createElement(H,{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%",width:"100%"}}):q.default.createElement(q.default.Fragment,null,q.default.createElement("div",{style:{display:"flex"}},q.default.createElement("div",{style:{flexGrow:1}}),q.default.createElement("div",null,l?.doc?.view?.length>1&&q.default.createElement(D.default,null,q.default.createElement(F.default,{labelId:"date-range-select-label",id:"date-range-select",value:b,onChange:P,style:{fontSize:"12px"},disableUnderline:!0},l.doc.view.map((e,t)=>q.default.createElement(O.default,{key:t,value:t},e.title)))))),q.default.createElement("div",{style:{position:"relative",flexGrow:a?void 0:1,display:"flex",flexDirection:"column"}},q.default.createElement(de,{filters:l?.doc?.filters,channel:j,query:I}),p)))};var pe={Chart:me,Dashboard:function({id:t="sample_dashboard",api:a,params:r}){const[n,l]=q.default.useState(),[o]=q.default.useState(),[i,s]=q.default.useState([]),u=q.default.useRef({}),d=ce();fe(d),console.log({rows:i},{dashboard:n},{schema:o},{params:r}),e.useEffect(()=>{Z.setBaseUrl(a.base_url),Z.setToken(a.token)},[a]);const c=async e=>{const t=e?.doc?.rows||[],a=[];for(let e=0;e<t.length;e++){const r=t[e];r.columns?.forEach(e=>{if(e.override?.filter?.length){const t={};e.override.filter.forEach(e=>{e.hasOwnProperty("value")&&(t[e.field]=[e.value])}),e.filter=t}}),a.push(r)}s(a)};return q.default.useEffect(()=>{t&&(async()=>{Z.setBaseUrl(a.base_url),Z.setToken(a.token),await Z.loadDashboardMeta({dashboardId:t});const e=await Z.getDashboard({id:t});u.current[e?.id]=e,l(e),await c(e)})().catch(e=>console.error(e.message))},[t]),q.default.createElement(V.default,{maxWidth:!1,disableGutters:!0},q.default.createElement(U.default,{container:!0,spacing:3},i?.map((e,t)=>{const l=(e=>0===e?12:12/e)(e.columns.length);return q.default.createElement(q.default.Fragment,{key:t},1===t?q.default.createElement(U.default,{item:!0,xs:12},q.default.createElement(U.default,{container:!0,spacing:3},e.columns.map((e,t)=>q.default.createElement(U.default,{key:t,item:!0,xs:12,md:l},q.default.createElement(me,{api:a,cache:u.current,id:e.id,dashboard:n,schema:o,title:e.title,filter:e.filter,params:r}))))):e.columns.map((e,t)=>q.default.createElement(U.default,{key:t,item:!0,xs:12,md:l},q.default.createElement(me,{api:a,cache:u.current,id:e.id,dashboard:n,schema:o,title:e.title,filter:e.filter,params:r}))))})))}};exports.default=pe;
@@ -2,7 +2,7 @@ import * as React from 'react';
2
2
  import React__default, { useEffect, useMemo, useState, useRef } from 'react';
3
3
  import Paper from '@material-ui/core/Paper';
4
4
  import { makeStyles } from '@material-ui/core/styles';
5
- import LinearProgress from '@material-ui/core/LinearProgress';
5
+ import { CircularProgress } from '@material-ui/core';
6
6
  import { Chart as Chart$1 } from 'react-google-charts';
7
7
  import numeral from 'numeral';
8
8
  import axios from 'axios';
@@ -12,7 +12,7 @@ import FormControl$2 from '@material-ui/core/FormControl';
12
12
  import Select$1 from '@material-ui/core/Select';
13
13
  import MenuItem$1 from '@material-ui/core/MenuItem';
14
14
  import { useInView } from 'react-intersection-observer';
15
- import { FormControl, Autocomplete, TextField, CircularProgress, Chip, Checkbox, FormHelperText } from '@mui/material';
15
+ import { FormControl, Autocomplete, TextField, CircularProgress as CircularProgress$1, Chip, Checkbox, FormHelperText } from '@mui/material';
16
16
  import CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';
17
17
  import CheckBoxIcon from '@mui/icons-material/CheckBox';
18
18
  import Box from '@mui/material/Box';
@@ -22,7 +22,6 @@ import FormControl$1 from '@mui/material/FormControl';
22
22
  import Select from '@mui/material/Select';
23
23
  import EventEmitter from 'eventemitter3';
24
24
  import Grid from '@material-ui/core/Grid';
25
- import Box$1 from '@material-ui/core/Box';
26
25
  import Container from '@material-ui/core/Container';
27
26
 
28
27
  function _extends() {
@@ -37,8 +36,8 @@ function _extends() {
37
36
 
38
37
  const useStyles$1 = makeStyles(theme => ({
39
38
  root: {
40
- width: '100%',
41
- '& > * + *': {
39
+ width: "100%",
40
+ "& > * + *": {
42
41
  marginTop: theme.spacing(2)
43
42
  }
44
43
  }
@@ -47,7 +46,13 @@ function LinearIndeterminate(props) {
47
46
  const classes = useStyles$1();
48
47
  return /*#__PURE__*/React__default.createElement("div", _extends({
49
48
  className: classes.root
50
- }, props), /*#__PURE__*/React__default.createElement(LinearProgress, null));
49
+ }, props), /*#__PURE__*/React__default.createElement(CircularProgress, {
50
+ style: {
51
+ color: "rgb(70, 134, 128)"
52
+ } // custom color
53
+ ,
54
+ size: 25
55
+ }));
51
56
  }
52
57
 
53
58
  function ValuePicker(view, schema, outputFormat = 'array') {
@@ -384,11 +389,11 @@ const useStyles = makeStyles(theme => ({
384
389
  // },
385
390
  }));
386
391
  const dateRangeFormats = {
387
- "none": "YYYY-MM-dd",
388
- "day": "MMM dd",
389
- "week": "MMM dd",
390
- "month": "YYYY MMM",
391
- "year": "YYYY"
392
+ none: "YYYY-MM-dd",
393
+ day: "MMM dd",
394
+ week: "MMM dd",
395
+ month: "YYYY MMM",
396
+ year: "YYYY"
392
397
  };
393
398
  function GoogleChart({
394
399
  chart,
@@ -409,7 +414,7 @@ function GoogleChart({
409
414
  })();
410
415
  }, []);
411
416
  const dateRangeFormat = useMemo(() => {
412
- const defaultFormat = 'YYYY-MM-dd';
417
+ const defaultFormat = "YYYY-MM-dd";
413
418
  const name = query?.date_range?.name;
414
419
  const dateRange = dateRanges.find(f => f.name === name);
415
420
  if (!dateRange) return defaultFormat;
@@ -417,12 +422,14 @@ function GoogleChart({
417
422
  return format;
418
423
  }, [dateRanges, query]);
419
424
  const getOptions = data => {
420
- if (chart?.doc.chart?.type === 'Table') {
425
+ const customColors = ["#468682", "#ff686b", "#6c757d", "#FFD700", "#073b4c"]; // your custom colors
426
+
427
+ if (chart?.doc.chart?.type === "Table") {
421
428
  return {
422
429
  ...chart?.doc.chart?.options,
423
430
  cssClassNames: classes
424
431
  };
425
- } else if (chart?.doc.chart?.type === 'AreaChart') {
432
+ } else if (chart?.doc.chart?.type === "AreaChart") {
426
433
  const hAxisFromChart = chart?.doc.chart?.options?.hAxis || {};
427
434
  const hAxisDefaults = {
428
435
  ticks: data.slice(1).map(row => row[0]),
@@ -432,17 +439,18 @@ function GoogleChart({
432
439
  ...hAxisDefaults,
433
440
  ...hAxisFromChart
434
441
  };
435
-
436
- // console.log({GoogleChart:{chart,source,view,report,schema,query,dateRanges,dateRangeFormat,ticks:hAxis.ticks}})
437
-
438
442
  return {
439
443
  ...chart?.doc.chart?.options,
440
- ...{
441
- hAxis,
442
- focusTarget: 'category'
443
- }
444
+ hAxis,
445
+ focusTarget: "category",
446
+ colors: customColors // <-- add this line
447
+ };
448
+ } else {
449
+ return {
450
+ ...chart?.doc.chart?.options,
451
+ colors: customColors // add for other chart types too
444
452
  };
445
- } else return chart?.doc.chart?.options;
453
+ }
446
454
  };
447
455
  React__default.useEffect(() => {
448
456
  if (!chart || !view || !source || !report || !schema) return;
@@ -458,7 +466,7 @@ function GoogleChart({
458
466
  return data ? /*#__PURE__*/React__default.createElement("div", {
459
467
  style: {}
460
468
  }, /*#__PURE__*/React__default.createElement(Chart$1, _extends({
461
- width: chart?.doc.size?.width || '100%'
469
+ width: chart?.doc.size?.width || "100%"
462
470
  //height={dashboard ? (chart?.doc.size?.height || '300px') : '100%'}
463
471
  ,
464
472
  chartType: chart?.doc.chart?.type,
@@ -660,7 +668,7 @@ function CheckboxMultiAutocomplete({
660
668
  placeholder: placeholder,
661
669
  InputProps: {
662
670
  ...params.InputProps,
663
- endAdornment: /*#__PURE__*/React.createElement(React.Fragment, null, loading ? /*#__PURE__*/React.createElement(CircularProgress, {
671
+ endAdornment: /*#__PURE__*/React.createElement(React.Fragment, null, loading ? /*#__PURE__*/React.createElement(CircularProgress$1, {
664
672
  size: 18
665
673
  }) : null, params.InputProps.endAdornment)
666
674
  },
@@ -909,7 +917,7 @@ var Chart = ({
909
917
  entry
910
918
  } = useInView({
911
919
  /* Optional options */
912
- threshold: 0.10,
920
+ threshold: 0.1,
913
921
  delay: 1000
914
922
  });
915
923
  const channelUsed = useChannel(channel);
@@ -1002,7 +1010,7 @@ var Chart = ({
1002
1010
  setDirty(false);
1003
1011
  setFilter();
1004
1012
  setLoading(true);
1005
- if (chart?.doc?.source?.type === 'context') {
1013
+ if (chart?.doc?.source?.type === "context") {
1006
1014
  setSource({
1007
1015
  filter: finalFilter
1008
1016
  });
@@ -1038,9 +1046,9 @@ var Chart = ({
1038
1046
  }
1039
1047
  };
1040
1048
  React__default.useEffect(() => {
1041
- channelUsed?.on('mergedFilterChanged', onMergedFilterChanged);
1049
+ channelUsed?.on("mergedFilterChanged", onMergedFilterChanged);
1042
1050
  return () => {
1043
- channelUsed?.off('mergedFilterChanged', onMergedFilterChanged);
1051
+ channelUsed?.off("mergedFilterChanged", onMergedFilterChanged);
1044
1052
  };
1045
1053
  }, [channelUsed, report, chart, inView]);
1046
1054
  React__default.useEffect(() => {
@@ -1052,37 +1060,42 @@ var Chart = ({
1052
1060
  }, [props.params]);
1053
1061
  return /*#__PURE__*/React__default.createElement(Paper, {
1054
1062
  ref: ref,
1063
+ elevation: 0,
1055
1064
  style: {
1056
- //margin: "4px",
1057
- padding: "16px",
1058
- paddingTop: 0,
1059
- //flexGrow: dashboard ? undefined : 1, display: "flex", flexDirection: "column",
1060
- flexGrow: 1,
1061
- // gap:'16px',
1062
1065
  borderRadius: 12,
1063
- display: 'flex',
1064
- flexDirection: 'column',
1065
- gap: '16px'
1066
- },
1067
- elevation: 2
1068
- }, /*#__PURE__*/React__default.createElement(LinearIndeterminate, {
1066
+ padding: 20,
1067
+ border: "1px solid #e5e5e5",
1068
+ background: "#fff",
1069
+ display: "flex",
1070
+ flexDirection: "column",
1071
+ gap: "12px",
1072
+ height: "100%"
1073
+ }
1074
+ }, chart && /*#__PURE__*/React__default.createElement("div", {
1069
1075
  style: {
1070
- visibility: loading ? 'visible' : 'hidden'
1076
+ display: "flex",
1077
+ alignItems: "center",
1078
+ lineHeight: 0
1071
1079
  }
1072
- }), /*#__PURE__*/React__default.createElement("div", {
1080
+ }, /*#__PURE__*/React__default.createElement(Typography, {
1081
+ variant: "subtitle2",
1073
1082
  style: {
1074
- display: "flex"
1083
+ fontWeight: 600,
1084
+ color: "#252525"
1075
1085
  }
1076
- }, /*#__PURE__*/React__default.createElement("div", null, chart && /*#__PURE__*/React__default.createElement("div", {
1086
+ }, props?.title || chart.doc.name, " ")), loading ? /*#__PURE__*/React__default.createElement(LinearIndeterminate, {
1077
1087
  style: {
1078
1088
  display: "flex",
1089
+ justifyContent: "center",
1079
1090
  alignItems: "center",
1080
- lineHeight: 0
1091
+ height: "100%",
1092
+ width: "100%"
1081
1093
  }
1082
- }, /*#__PURE__*/React__default.createElement(Typography, {
1083
- noWrap: true,
1084
- variant: "caption"
1085
- }, props?.title || chart.doc.name, " "))), /*#__PURE__*/React__default.createElement("div", {
1094
+ }) : /*#__PURE__*/React__default.createElement(React__default.Fragment, null, /*#__PURE__*/React__default.createElement("div", {
1095
+ style: {
1096
+ display: "flex"
1097
+ }
1098
+ }, /*#__PURE__*/React__default.createElement("div", {
1086
1099
  style: {
1087
1100
  flexGrow: 1
1088
1101
  }
@@ -1105,15 +1118,15 @@ var Chart = ({
1105
1118
  // paddingTop: chart?.doc?.size?.vpad,
1106
1119
  // paddingBottom: chart?.doc?.size?.vpad,
1107
1120
  flexGrow: dashboard ? undefined : 1,
1108
- display: 'flex',
1109
- flexDirection: 'column'
1121
+ display: "flex",
1122
+ flexDirection: "column"
1110
1123
  // gap:'16px'
1111
1124
  }
1112
1125
  }, /*#__PURE__*/React__default.createElement(ChartFilters, {
1113
1126
  filters: chart?.doc?.filters,
1114
1127
  channel: channelUsed,
1115
1128
  query: currentQuery
1116
- }), chartType));
1129
+ }), chartType)));
1117
1130
  };
1118
1131
 
1119
1132
  function Dashboard({
@@ -1128,6 +1141,15 @@ function Dashboard({
1128
1141
  const cache = React__default.useRef({});
1129
1142
  const channel = useChannel();
1130
1143
  useFilterManager(channel);
1144
+ console.log({
1145
+ rows
1146
+ }, {
1147
+ dashboard
1148
+ }, {
1149
+ schema
1150
+ }, {
1151
+ params
1152
+ });
1131
1153
  useEffect(() => {
1132
1154
  // console.log('token changed',api);
1133
1155
 
@@ -1161,7 +1183,7 @@ function Dashboard({
1161
1183
  if (column.override?.filter?.length) {
1162
1184
  const filter = {};
1163
1185
  column.override.filter.forEach(item => {
1164
- if (item.hasOwnProperty('value')) filter[item.field] = [item.value];
1186
+ if (item.hasOwnProperty("value")) filter[item.field] = [item.value];
1165
1187
  // else filter[item.field] = [sourceDataRow[item.field]];
1166
1188
  });
1167
1189
  column.filter = filter;
@@ -1175,6 +1197,10 @@ function Dashboard({
1175
1197
  if (!id) return;
1176
1198
  init().catch(error => console.error(error.message));
1177
1199
  }, [id]);
1200
+ const getMd = count => {
1201
+ if (count === 0) return 12;
1202
+ return 12 / count;
1203
+ };
1178
1204
  return (
1179
1205
  /*#__PURE__*/
1180
1206
  // <Container>
@@ -1203,53 +1229,61 @@ function Dashboard({
1203
1229
  // </Container>
1204
1230
  React__default.createElement(Container, {
1205
1231
  maxWidth: false,
1206
- disableGutters: true,
1207
- style: {
1208
- // backgroundColor:'yellow',
1209
- height: '100vh',
1210
- padding: 0,
1211
- margin: 0,
1212
- overflow: 'hidden'
1213
- }
1232
+ disableGutters: true
1233
+ // style={{
1234
+ // padding: "24px",
1235
+ // background: "#f7f8fa",
1236
+ // borderRadius: "10px",
1237
+ // }}
1214
1238
  }, /*#__PURE__*/React__default.createElement(Grid, {
1215
1239
  container: true,
1216
- spacing: 2,
1217
- style: {
1218
- height: '100%',
1219
- width: '100%'
1220
- }
1221
- }, rows?.map((row, rowIndex) => /*#__PURE__*/React__default.createElement(Grid, {
1222
- key: rowIndex,
1223
- container: true,
1224
- item: true
1225
- // important: make items in this row stretch to same height
1226
- ,
1227
- alignItems: "stretch",
1228
- spacing: 2
1229
- }, row?.columns?.map((column, colIndex) => /*#__PURE__*/React__default.createElement(Grid, {
1230
- key: colIndex,
1231
- item: true,
1232
- xs: true,
1233
- style: {
1234
- display: 'flex'
1235
- }
1236
- }, /*#__PURE__*/React__default.createElement(Box$1, {
1237
- style: {
1238
- flex: 1,
1239
- display: 'flex',
1240
- flexDirection: 'column'
1241
- }
1242
- }, /*#__PURE__*/React__default.createElement(Chart, {
1243
- api: api,
1244
- cache: cache.current,
1245
- id: column.id,
1246
- dashboard: dashboard,
1247
- schema: schema,
1248
- channel: null,
1249
- title: column.title,
1250
- filter: column.filter,
1251
- params: params
1252
- }))))))))
1240
+ spacing: 3
1241
+ }, rows?.map((row, rowIndex) => {
1242
+ const count = row.columns.length;
1243
+ const md = getMd(count);
1244
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, {
1245
+ key: rowIndex
1246
+ }, rowIndex === 1 ?
1247
+ /*#__PURE__*/
1248
+ // Row 2 is special: nested grid inside a full-width container
1249
+ React__default.createElement(Grid, {
1250
+ item: true,
1251
+ xs: 12
1252
+ }, /*#__PURE__*/React__default.createElement(Grid, {
1253
+ container: true,
1254
+ spacing: 3
1255
+ }, row.columns.map((column, i) => /*#__PURE__*/React__default.createElement(Grid, {
1256
+ key: i,
1257
+ item: true,
1258
+ xs: 12,
1259
+ md: md
1260
+ }, /*#__PURE__*/React__default.createElement(Chart, {
1261
+ api: api,
1262
+ cache: cache.current,
1263
+ id: column.id,
1264
+ dashboard: dashboard,
1265
+ schema: schema,
1266
+ title: column.title,
1267
+ filter: column.filter,
1268
+ params: params
1269
+ }))))) :
1270
+ // All other rows behave normally
1271
+ row.columns.map((column, i) => /*#__PURE__*/React__default.createElement(Grid, {
1272
+ key: i,
1273
+ item: true,
1274
+ xs: 12,
1275
+ md: md
1276
+ }, /*#__PURE__*/React__default.createElement(Chart, {
1277
+ api: api,
1278
+ cache: cache.current,
1279
+ id: column.id,
1280
+ dashboard: dashboard,
1281
+ schema: schema,
1282
+ title: column.title,
1283
+ filter: column.filter,
1284
+ params: params
1285
+ }))));
1286
+ })))
1253
1287
  );
1254
1288
  }
1255
1289