@bygd/nc-report-ui 0.1.17 → 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"),o=require("axios"),u=require("@material-ui/core/Typography"),s=require("nunjucks"),i=require("@material-ui/core/FormControl"),c=require("@material-ui/core/Select"),d=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"),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(o),O=k(u),_=k(s),F=k(i),z=k(c),Y=k(d),P=k(p),j=k(h),D=k(y),B=k(g),$=k(b),W=k(E),L=k(v),U=k(w),V=k(x),G=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],o=n[r.name];let u=l;return u="timestamp"===o.type?new Date(l):o.format?o.format&&o.prefix?{v:+l,f:o.prefix+" "+T.default(l).format(o.format)}:o.format?{v:+l,f:T.default(l).format(o.format)}:l:l,"array"===a?t.push(u):t[r.name]=u?.f||u,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}},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:o,dashboard:u,query:s}){const[i,c]=M.default.useState([]),d=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&&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=Q(r,o);a?.forEach(t=>{const a=n(t);e.push(a)}),a?.length?c(e):c()},[t,a,r,l,o]),i?M.default.createElement("div",{style:{}},M.default.createElement(n.Chart,K({width:t?.doc.size?.width||"100%",chartType:t?.doc.chart?.type,data:i,options:(e=>{if("Table"===t?.doc.chart?.type)return{...t?.doc.chart?.options,cssClassNames:d};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})(i)},t?.doc.chart?.props))):M.default.createElement("div",null)},LabelChart:function({chart:e,source:t,view:a,report:r,schema:n}){const[l,o]=M.default.useState([]),[u,s]=M.default.useState(),[i,c]=M.default.useState();return M.default.useEffect(()=>{if(!(e&&a&&t&&r&&n))return;let l=[];const u=Q(a,n);t.forEach(e=>l.push(u(e))),o(l);const i=e?.doc?.chart?.options||{},d=i?.index||0;if(l.length>0&&s(l[0][d]),i.subText?.format){_.default.configure({autoescape:!1});const e=Q(a,n,"object")(t[0]),r=_.default.renderString(i.subText?.format,e);c(r)}},[e,t,a,r,n]),M.default.createElement("div",{style:{display:"flex",justifyContent:"center",alignContent:"center",height:"100%",flexDirection:"column"}},M.default.createElement(O.default,{variant:"h6"},u?.f||u),M.default.createElement(O.default,{variant:"caption"},i))}};function oe(e,t){return void 0!==le[e]?M.default.createElement(le[e],t):M.default.createElement(J,t)}const ue=M.createElement(P.default,{fontSize:"small"}),se=M.createElement(j.default,{fontSize:"small"});function ie({items:t,selectedKeys:a,defaultSelectedKeys:r,onChange:n,inputValue:l,defaultInputValue:o,onInputChange:u,debounceMs:s=300,label:i,placeholder:c,loading:d,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),[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 o?o:""),O=I?l:T,_=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=>{u&&u(e)},s),F=R;return M.createElement(m.FormControl,{fullWidth:!0,error:h,disabled:f},M.createElement(m.Autocomplete,{openOnFocus:!0,forcePopupIcon:!0,id:E,multiple:!0,disableCloseOnSelect:!0,options:w,value:F,inputValue:O,getOptionLabel:e=>e&&"object"==typeof e?e.value??"":"",isOptionEqualToValue:(e,t)=>e&&t&&e.key===t.key,loading:d,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?_(t??""):"clear"===a&&_("")},renderOption:(e,t,{selected:a})=>M.createElement("li",K({},e,{key:t&&t.key||Math.random().toString(36)}),M.createElement(m.Checkbox,{icon:ue,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:i,placeholder:c,InputProps:{...e.InputProps,endAdornment:M.createElement(M.Fragment,null,d?M.createElement(m.CircularProgress,{size:18}):null,e.InputProps.endAdornment)},size:p},v))}),y?M.createElement(m.FormHelperText,null,y):null)}const ce=({filter:t,channel:a,query:r})=>{const[n,l]=e.useState([]),[o,u]=e.useState([]),[s,i]=e.useState(!1),[c,d]=e.useState("");return e.useEffect(()=>{u(r?.filter?.[t?.filter]||[])},[r]),e.useEffect(()=>{(async()=>{i(!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),i(!1)})()},[c]),M.default.createElement("div",{style:{display:"flex"}},M.default.createElement("div",{style:{maxWidth:640,minWidth:200}},M.default.createElement(ie,{id:t?.title,label:t?.title,placeholder:"Type to search…",items:n,selectedKeys:o,onChange:(e,r)=>{u(e),a.emit("filterChanged",t,{[t.filter]:e})},onInputChange:e=>{d(e)},loading:s,debounceMs:300,helperText:o.length?`${o.length} selected`:""})))};function de({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(D.default,{sx:n},M.default.createElement(W.default,{fullWidth:!0},M.default.createElement(B.default,{id:"demo-simple-select-label"},a),M.default.createElement(L.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}=e;return M.default.createElement($.default,{key:t,value:t},a)}))))}const fe=({filter:t,channel:a,query:r})=>{const[n,l]=e.useState([]),[o,u]=e.useState("");return e.useEffect(()=>{u(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(de,{items:n,value:o,label:t?.title,onChange:(e,r)=>{const n=e.target.value;u(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(ce,{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 U.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,o]=M.default.useState(),[u,s]=M.default.useState(),[i,c]=M.default.useState(),[d,m]=M.default.useState(),[p,h]=M.default.useState(oe()),[y,g]=M.default.useState(),[b,E]=M.default.useState(0),[v,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:_,entry:P}=f.useInView({threshold:.1,delay:1e3}),j=pe(r);he(j);const D=M.default.useCallback(e=>{const t=e.target.value;E(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,u=l?t?.[l]||await ae.getReport({id:l}):void 0,i=t?.[`schema_${l}`]||n?.schema||await ae.getReportSchema({id:l}),d=r.doc?.view?.[0];E(0),s(u),o(r),g(d),c(i),k(!0)})().catch(e=>{console.error(e.message)})},[e]),M.default.useEffect(()=>{l&&d&&(!l?.doc?.source?.id||u)&&i&&(async()=>{h(oe(l.doc.chart?.component,{view:y,source:d,chart:l,report:u,schema:i,dashboard:a,query:I}))})().catch(e=>{console.error(e.message)})},[l,d,y,u,i]);const B=e=>{const t={...u?.doc.query.filter||{},...n?.filter,...e?.value},a=t.date_range||u?.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:u.id,query:r}).then(e=>{m(l.doc.source.reverse?e.reverse():e)}).catch(e=>{m([])}).finally(()=>{w(!1)})},$=e=>{q.current=e,_?B(e):(S(e),k(!0))};return M.default.useEffect(()=>(j?.on("mergedFilterChanged",$),()=>{j?.off("mergedFilterChanged",$)}),[j,u,l,_]),M.default.useEffect(()=>{_&&C&&B(x)},[_,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:v?"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(O.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(F.default,null,M.default.createElement(z.default,{labelId:"date-range-select-label",id:"date-range-select",value:b,onChange:D,style:{fontSize:"12px"},disableUnderline:!0},l.doc.view.map((e,t)=>M.default.createElement(Y.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:j,query:I}),p))};var ge={Chart:ye,Dashboard:function({id:t="sample_dashboard",api:a,params:r}){const[n,l]=M.default.useState(),[o]=M.default.useState(),[u,s]=M.default.useState([]),i=M.default.useRef({}),c=pe();he(c),e.useEffect(()=>{ae.setBaseUrl(a.base_url),ae.setToken(a.token)},[a]);const d=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});i.current[e?.id]=e,l(e),await d(e)})().catch(e=>console.error(e.message))},[t]),M.default.createElement(H.default,null,M.default.createElement(V.default,{container:!0,spacing:2},u?.map((e,t)=>M.default.createElement(V.default,{key:t,container:!0,item:!0,alignItems:"stretch",spacing:2},e?.columns?.map((e,t)=>M.default.createElement(V.default,{key:t,item:!0,xs:!0,style:{display:"flex"}},M.default.createElement(G.default,{style:{flex:1,display:"flex",flexDirection:"column"}},M.default.createElement(ye,{api:a,cache:i.current,id:e.id,dashboard:n,schema:o,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') {
@@ -291,6 +296,74 @@ const Api = {
291
296
  data
292
297
  } = await apiClient.get(`/globals/date-ranges`);
293
298
  return data;
299
+ },
300
+ /**
301
+ * Get all report definitions
302
+ * @returns {Promise} Axios response promise with array of report definitions
303
+ */
304
+ getReportDefinitions: async () => {
305
+ const {
306
+ data
307
+ } = await apiClient.get(`/report-definitions`);
308
+ return data;
309
+ },
310
+ /**
311
+ * Get report definition by ID
312
+ * @param {Object} params - Parameters object
313
+ * @param {string} params.id - Report definition ID
314
+ * @returns {Promise} Axios response promise with report definition
315
+ */
316
+ getReportDefinition: async ({
317
+ id
318
+ }) => {
319
+ const {
320
+ data
321
+ } = await apiClient.get(`/report-definitions/${id}`);
322
+ return data;
323
+ },
324
+ /**
325
+ * Create a new report definition
326
+ * @param {Object} params - Parameters object
327
+ * @param {Object} params.reportDefinition - Report definition object to create
328
+ * @returns {Promise} Axios response promise with created report definition
329
+ */
330
+ createReportDefinition: async ({
331
+ reportDefinition
332
+ }) => {
333
+ const {
334
+ data
335
+ } = await apiClient.post(`/report-definitions`, reportDefinition);
336
+ return data;
337
+ },
338
+ /**
339
+ * Update an existing report definition
340
+ * @param {Object} params - Parameters object
341
+ * @param {string} params.id - Report definition ID
342
+ * @param {Object} params.reportDefinition - Updated report definition object
343
+ * @returns {Promise} Axios response promise with updated report definition
344
+ */
345
+ updateReportDefinition: async ({
346
+ id,
347
+ reportDefinition
348
+ }) => {
349
+ const {
350
+ data
351
+ } = await apiClient.put(`/report-definitions/${id}`, reportDefinition);
352
+ return data;
353
+ },
354
+ /**
355
+ * Delete a report definition
356
+ * @param {Object} params - Parameters object
357
+ * @param {string} params.id - Report definition ID
358
+ * @returns {Promise} Axios response promise
359
+ */
360
+ deleteReportDefinition: async ({
361
+ id
362
+ }) => {
363
+ const {
364
+ data
365
+ } = await apiClient.delete(`/report-definitions/${id}`);
366
+ return data;
294
367
  }
295
368
  };
296
369
 
@@ -316,11 +389,11 @@ const useStyles = makeStyles(theme => ({
316
389
  // },
317
390
  }));
318
391
  const dateRangeFormats = {
319
- "none": "YYYY-MM-dd",
320
- "day": "MMM dd",
321
- "week": "MMM dd",
322
- "month": "YYYY MMM",
323
- "year": "YYYY"
392
+ none: "YYYY-MM-dd",
393
+ day: "MMM dd",
394
+ week: "MMM dd",
395
+ month: "YYYY MMM",
396
+ year: "YYYY"
324
397
  };
325
398
  function GoogleChart({
326
399
  chart,
@@ -341,7 +414,7 @@ function GoogleChart({
341
414
  })();
342
415
  }, []);
343
416
  const dateRangeFormat = useMemo(() => {
344
- const defaultFormat = 'YYYY-MM-dd';
417
+ const defaultFormat = "YYYY-MM-dd";
345
418
  const name = query?.date_range?.name;
346
419
  const dateRange = dateRanges.find(f => f.name === name);
347
420
  if (!dateRange) return defaultFormat;
@@ -349,12 +422,14 @@ function GoogleChart({
349
422
  return format;
350
423
  }, [dateRanges, query]);
351
424
  const getOptions = data => {
352
- 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") {
353
428
  return {
354
429
  ...chart?.doc.chart?.options,
355
430
  cssClassNames: classes
356
431
  };
357
- } else if (chart?.doc.chart?.type === 'AreaChart') {
432
+ } else if (chart?.doc.chart?.type === "AreaChart") {
358
433
  const hAxisFromChart = chart?.doc.chart?.options?.hAxis || {};
359
434
  const hAxisDefaults = {
360
435
  ticks: data.slice(1).map(row => row[0]),
@@ -364,17 +439,18 @@ function GoogleChart({
364
439
  ...hAxisDefaults,
365
440
  ...hAxisFromChart
366
441
  };
367
-
368
- // console.log({GoogleChart:{chart,source,view,report,schema,query,dateRanges,dateRangeFormat,ticks:hAxis.ticks}})
369
-
370
442
  return {
371
443
  ...chart?.doc.chart?.options,
372
- ...{
373
- hAxis,
374
- focusTarget: 'category'
375
- }
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
376
452
  };
377
- } else return chart?.doc.chart?.options;
453
+ }
378
454
  };
379
455
  React__default.useEffect(() => {
380
456
  if (!chart || !view || !source || !report || !schema) return;
@@ -390,7 +466,7 @@ function GoogleChart({
390
466
  return data ? /*#__PURE__*/React__default.createElement("div", {
391
467
  style: {}
392
468
  }, /*#__PURE__*/React__default.createElement(Chart$1, _extends({
393
- width: chart?.doc.size?.width || '100%'
469
+ width: chart?.doc.size?.width || "100%"
394
470
  //height={dashboard ? (chart?.doc.size?.height || '300px') : '100%'}
395
471
  ,
396
472
  chartType: chart?.doc.chart?.type,
@@ -592,7 +668,7 @@ function CheckboxMultiAutocomplete({
592
668
  placeholder: placeholder,
593
669
  InputProps: {
594
670
  ...params.InputProps,
595
- 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, {
596
672
  size: 18
597
673
  }) : null, params.InputProps.endAdornment)
598
674
  },
@@ -698,11 +774,13 @@ function SingleSelect({
698
774
  }, items.map(itm => {
699
775
  const {
700
776
  key,
701
- value
777
+ value,
778
+ disabled
702
779
  } = itm;
703
780
  return /*#__PURE__*/React__default.createElement(MenuItem, {
704
781
  key: key,
705
- value: key
782
+ value: key,
783
+ disabled: disabled
706
784
  }, value);
707
785
  }))));
708
786
  }
@@ -839,7 +917,7 @@ var Chart = ({
839
917
  entry
840
918
  } = useInView({
841
919
  /* Optional options */
842
- threshold: 0.10,
920
+ threshold: 0.1,
843
921
  delay: 1000
844
922
  });
845
923
  const channelUsed = useChannel(channel);
@@ -932,7 +1010,7 @@ var Chart = ({
932
1010
  setDirty(false);
933
1011
  setFilter();
934
1012
  setLoading(true);
935
- if (chart?.doc?.source?.type === 'context') {
1013
+ if (chart?.doc?.source?.type === "context") {
936
1014
  setSource({
937
1015
  filter: finalFilter
938
1016
  });
@@ -968,9 +1046,9 @@ var Chart = ({
968
1046
  }
969
1047
  };
970
1048
  React__default.useEffect(() => {
971
- channelUsed?.on('mergedFilterChanged', onMergedFilterChanged);
1049
+ channelUsed?.on("mergedFilterChanged", onMergedFilterChanged);
972
1050
  return () => {
973
- channelUsed?.off('mergedFilterChanged', onMergedFilterChanged);
1051
+ channelUsed?.off("mergedFilterChanged", onMergedFilterChanged);
974
1052
  };
975
1053
  }, [channelUsed, report, chart, inView]);
976
1054
  React__default.useEffect(() => {
@@ -982,37 +1060,42 @@ var Chart = ({
982
1060
  }, [props.params]);
983
1061
  return /*#__PURE__*/React__default.createElement(Paper, {
984
1062
  ref: ref,
1063
+ elevation: 0,
985
1064
  style: {
986
- //margin: "4px",
987
- padding: "16px",
988
- paddingTop: 0,
989
- //flexGrow: dashboard ? undefined : 1, display: "flex", flexDirection: "column",
990
- flexGrow: 1,
991
- // gap:'16px',
992
1065
  borderRadius: 12,
993
- display: 'flex',
994
- flexDirection: 'column',
995
- gap: '16px'
996
- },
997
- elevation: 2
998
- }, /*#__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", {
999
1075
  style: {
1000
- visibility: loading ? 'visible' : 'hidden'
1076
+ display: "flex",
1077
+ alignItems: "center",
1078
+ lineHeight: 0
1001
1079
  }
1002
- }), /*#__PURE__*/React__default.createElement("div", {
1080
+ }, /*#__PURE__*/React__default.createElement(Typography, {
1081
+ variant: "subtitle2",
1003
1082
  style: {
1004
- display: "flex"
1083
+ fontWeight: 600,
1084
+ color: "#252525"
1005
1085
  }
1006
- }, /*#__PURE__*/React__default.createElement("div", null, chart && /*#__PURE__*/React__default.createElement("div", {
1086
+ }, props?.title || chart.doc.name, " ")), loading ? /*#__PURE__*/React__default.createElement(LinearIndeterminate, {
1007
1087
  style: {
1008
1088
  display: "flex",
1089
+ justifyContent: "center",
1009
1090
  alignItems: "center",
1010
- lineHeight: 0
1091
+ height: "100%",
1092
+ width: "100%"
1011
1093
  }
1012
- }, /*#__PURE__*/React__default.createElement(Typography, {
1013
- noWrap: true,
1014
- variant: "caption"
1015
- }, 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", {
1016
1099
  style: {
1017
1100
  flexGrow: 1
1018
1101
  }
@@ -1035,15 +1118,15 @@ var Chart = ({
1035
1118
  // paddingTop: chart?.doc?.size?.vpad,
1036
1119
  // paddingBottom: chart?.doc?.size?.vpad,
1037
1120
  flexGrow: dashboard ? undefined : 1,
1038
- display: 'flex',
1039
- flexDirection: 'column'
1121
+ display: "flex",
1122
+ flexDirection: "column"
1040
1123
  // gap:'16px'
1041
1124
  }
1042
1125
  }, /*#__PURE__*/React__default.createElement(ChartFilters, {
1043
1126
  filters: chart?.doc?.filters,
1044
1127
  channel: channelUsed,
1045
1128
  query: currentQuery
1046
- }), chartType));
1129
+ }), chartType)));
1047
1130
  };
1048
1131
 
1049
1132
  function Dashboard({
@@ -1058,6 +1141,15 @@ function Dashboard({
1058
1141
  const cache = React__default.useRef({});
1059
1142
  const channel = useChannel();
1060
1143
  useFilterManager(channel);
1144
+ console.log({
1145
+ rows
1146
+ }, {
1147
+ dashboard
1148
+ }, {
1149
+ schema
1150
+ }, {
1151
+ params
1152
+ });
1061
1153
  useEffect(() => {
1062
1154
  // console.log('token changed',api);
1063
1155
 
@@ -1091,7 +1183,7 @@ function Dashboard({
1091
1183
  if (column.override?.filter?.length) {
1092
1184
  const filter = {};
1093
1185
  column.override.filter.forEach(item => {
1094
- if (item.hasOwnProperty('value')) filter[item.field] = [item.value];
1186
+ if (item.hasOwnProperty("value")) filter[item.field] = [item.value];
1095
1187
  // else filter[item.field] = [sourceDataRow[item.field]];
1096
1188
  });
1097
1189
  column.filter = filter;
@@ -1105,6 +1197,10 @@ function Dashboard({
1105
1197
  if (!id) return;
1106
1198
  init().catch(error => console.error(error.message));
1107
1199
  }, [id]);
1200
+ const getMd = count => {
1201
+ if (count === 0) return 12;
1202
+ return 12 / count;
1203
+ };
1108
1204
  return (
1109
1205
  /*#__PURE__*/
1110
1206
  // <Container>
@@ -1131,41 +1227,63 @@ function Dashboard({
1131
1227
  // )}
1132
1228
  // </Grid>
1133
1229
  // </Container>
1134
- React__default.createElement(Container, null, /*#__PURE__*/React__default.createElement(Grid, {
1230
+ React__default.createElement(Container, {
1231
+ maxWidth: false,
1232
+ disableGutters: true
1233
+ // style={{
1234
+ // padding: "24px",
1235
+ // background: "#f7f8fa",
1236
+ // borderRadius: "10px",
1237
+ // }}
1238
+ }, /*#__PURE__*/React__default.createElement(Grid, {
1135
1239
  container: true,
1136
- spacing: 2
1137
- }, rows?.map((row, rowIndex) => /*#__PURE__*/React__default.createElement(Grid, {
1138
- key: rowIndex,
1139
- container: true,
1140
- item: true
1141
- // important: make items in this row stretch to same height
1142
- ,
1143
- alignItems: "stretch",
1144
- spacing: 2
1145
- }, row?.columns?.map((column, colIndex) => /*#__PURE__*/React__default.createElement(Grid, {
1146
- key: colIndex,
1147
- item: true,
1148
- xs: true,
1149
- style: {
1150
- display: 'flex'
1151
- }
1152
- }, /*#__PURE__*/React__default.createElement(Box$1, {
1153
- style: {
1154
- flex: 1,
1155
- display: 'flex',
1156
- flexDirection: 'column'
1157
- }
1158
- }, /*#__PURE__*/React__default.createElement(Chart, {
1159
- api: api,
1160
- cache: cache.current,
1161
- id: column.id,
1162
- dashboard: dashboard,
1163
- schema: schema,
1164
- channel: null,
1165
- title: column.title,
1166
- filter: column.filter,
1167
- params: params
1168
- }))))))))
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
+ })))
1169
1287
  );
1170
1288
  }
1171
1289