@bygd/nc-report-ui 0.1.19 → 0.1.20

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"),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;
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"),v=require("@mui/material/FormControl"),E=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 R=k(e),q=S(t),M=S(l),A=S(o),I=S(i),T=S(s),O=S(u),D=S(d),F=S(c),P=S(p),_=S(h),j=S(y),z=S(g),Y=S(b),$=S(v),B=S(E),U=S(w),L=S(x),W=S(C);function V(){return V=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},V.apply(null,arguments)}const G=a.makeStyles(e=>({root:{width:"100%","& > * + *":{marginTop:e.spacing(2)}}}));function H(e){const t=G();return R.default.createElement("div",V({className:t.root},e),R.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+" "+M.default(l).format(o.format)}:o.format?{v:+l,f:M.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=A.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},downloadAdHocReport:async({report:e,filename:t})=>{const a=await J.post("/report-build/run?download=csv",e,{responseType:"blob"}),r=window.URL.createObjectURL(new Blob([a.data])),n=document.createElement("a");n.href=r;let l=t||"report.csv";if(!t){const e=a.headers["content-disposition"];if(e){const t=e.match(/filename="?(.+)"?/i);t&&t[1]&&(l=t[1])}}n.setAttribute("download",l),document.body.appendChild(n),n.click(),n.remove(),window.URL.revokeObjectURL(r)},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]=R.default.useState([]),c=ee(),[f,m]=R.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 R.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?R.default.createElement("div",{style:{}},R.default.createElement(n.Chart,V({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))):R.default.createElement("div",null)},LabelChart:function({chart:e,source:t,view:a,report:r,schema:n}){const[l,o]=R.default.useState([]),[i,s]=R.default.useState(),[u,d]=R.default.useState();return R.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){T.default.configure({autoescape:!1});const e=K(a,n,"object")(t[0]),r=T.default.renderString(u.subText?.format,e);d(r)}},[e,t,a,r,n]),R.default.createElement("div",{style:{display:"flex",justifyContent:"center",alignContent:"center",height:"100%",flexDirection:"column"}},R.default.createElement(I.default,{variant:"h6"},i?.f||i),R.default.createElement(I.default,{variant:"caption"},u))}};function re(e,t){return void 0!==ae[e]?R.default.createElement(ae[e],t):R.default.createElement(H,t)}const ne=R.createElement(P.default,{fontSize:"small"}),le=R.createElement(_.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:v,textFieldProps:E}){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,q=e.useMemo(()=>{const e=new Map;for(const t of w)e.set(t&&t.key,t);return e},[w]),M=e.useMemo(()=>(Array.isArray(k)?k:[]).map(e=>q.get(e)).filter(Boolean),[k,q]),A="string"==typeof l,[I,T]=e.useState("string"==typeof o?o:""),O=A?l:I,D=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)},[]),R.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),F=M;return R.createElement(m.FormControl,{fullWidth:!0,error:h,disabled:f},R.createElement(m.Autocomplete,{openOnFocus:!0,forcePopupIcon:!0,id:v,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: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)=>{A||T(t??""),"input"===a?D(t??""):"clear"===a&&D("")},renderOption:(e,t,{selected:a})=>R.createElement("li",V({},e,{key:t&&t.key||Math.random().toString(36)}),R.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)=>R.createElement(m.Chip,V({},t({index:a}),{key:e&&e.key||a,label:e&&e.value||""}))),renderInput:e=>R.createElement(m.TextField,V({},e,{label:u,placeholder:d,InputProps:{...e.InputProps,endAdornment:R.createElement(R.Fragment,null,c?R.createElement(m.CircularProgress,{size:18}):null,e.InputProps.endAdornment)},size:p},E))}),y?R.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]),R.default.createElement("div",{style:{display:"flex"}},R.default.createElement("div",{style:{maxWidth:640,minWidth:200}},R.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%"},disabled:l=!1}){const o=e.some(e=>e.key===t)?t:"";return R.default.createElement(j.default,{sx:n},R.default.createElement($.default,{fullWidth:!0},R.default.createElement(z.default,{id:"demo-simple-select-label"},a),R.default.createElement(B.default,{labelId:"demo-simple-select-label",id:"demo-simple-select",value:o,label:a,onChange:r,disabled:l,MenuProps:{style:{maxHeight:"300px"}},size:"small"},e.map(e=>{const{key:t,value:a,disabled:r}=e;return R.default.createElement(Y.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)})()},[]),R.default.createElement("div",{style:{minWidth:"200px",maxWidth:"640px"}},R.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})=>R.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px"}},e.map(e=>"multi-select"===e.type?R.default.createElement(ie,{key:e.title,channel:t,filter:e,query:a}):"date-range"===e.type?R.default.createElement(ue,{key:e.title,channel:t,filter:e,query:a}):null));var ce=e=>R.default.useRef(e||new U.default).current,fe=e=>{const t=R.default.useState({}),a=R.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]);R.default.useEffect(()=>(e?.on("filterChanged",a),()=>{e?.off("filterChanged",a)}),[e])},me=({id:e,cache:t,dashboard:a,channel:r,...n})=>{const[l,o]=R.default.useState(),[i,s]=R.default.useState(),[u,d]=R.default.useState(),[c,m]=R.default.useState(),[p,h]=R.default.useState(re()),[y,g]=R.default.useState(),[b,v]=R.default.useState(0),[E,w]=R.default.useState(!1),[x,C]=R.default.useState(),[S,k]=R.default.useState(!1),M=R.default.useRef({value:n?.filter}),[A,T]=R.default.useState({}),{ref:P,inView:_,entry:j}=f.useInView({threshold:.1,delay:1e3}),z=ce(r);fe(z);const Y=R.default.useCallback(e=>{const t=e.target.value;v(t),g(l.doc.view[t])},[l]);R.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];v(0),s(i),o(r),g(c),d(u),k(!0)})().catch(e=>{console.error(e.message)})},[e]),R.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:A}))})().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};T(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=>{M.current=e,_?$(e):(C(e),k(!0))};return R.default.useEffect(()=>(z?.on("mergedFilterChanged",B),()=>{z?.off("mergedFilterChanged",B)}),[z,i,l,_]),R.default.useEffect(()=>{_&&S&&$(x)},[_,S]),R.default.useEffect(()=>{k(!0)},[n.params]),R.default.createElement(q.default,{ref:P,elevation:0,style:{borderRadius:12,padding:20,border:"1px solid #e5e5e5",background:"#fff",display:"flex",flexDirection:"column",gap:"12px",height:"100%"}},l&&R.default.createElement("div",{style:{display:"flex",alignItems:"center",lineHeight:0}},R.default.createElement(I.default,{variant:"subtitle2",style:{fontWeight:600,color:"#252525"}},n?.title||l.doc.name," ")),E?R.default.createElement(H,{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100%",width:"100%"}}):R.default.createElement(R.default.Fragment,null,R.default.createElement("div",{style:{display:"flex"}},R.default.createElement("div",{style:{flexGrow:1}}),R.default.createElement("div",null,l?.doc?.view?.length>1&&R.default.createElement(O.default,null,R.default.createElement(D.default,{labelId:"date-range-select-label",id:"date-range-select",value:b,onChange:Y,style:{fontSize:"12px"},disableUnderline:!0},l.doc.view.map((e,t)=>R.default.createElement(F.default,{key:t,value:t},e.title)))))),R.default.createElement("div",{style:{position:"relative",flexGrow:a?void 0:1,display:"flex",flexDirection:"column"}},R.default.createElement(de,{filters:l?.doc?.filters,channel:z,query:A}),p)))};const pe=e.createContext(void 0),he=()=>e.useContext(pe);var ye={Chart:me,Dashboard:function({id:t="sample_dashboard",api:a,params:r}){const n=he(),l=a||n?.api||{},o=r||n?.parameters||{},[i,s]=R.default.useState(),[u]=R.default.useState(),[d,c]=R.default.useState([]),f=R.default.useRef({}),m=ce();fe(m),console.log({rows:d},{dashboard:i},{schema:u},{params:o}),e.useEffect(()=>{Z.setBaseUrl(l.base_url),Z.setToken(l.token)},[l]);const p=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)}c(a)};return R.default.useEffect(()=>{t&&(async()=>{Z.setBaseUrl(l.base_url),Z.setToken(l.token),await Z.loadDashboardMeta({dashboardId:t});const e=await Z.getDashboard({id:t});f.current[e?.id]=e,s(e),await p(e)})().catch(e=>console.error(e.message))},[t]),R.default.createElement(W.default,{maxWidth:!1,disableGutters:!0},R.default.createElement(L.default,{container:!0,spacing:3},d?.map((e,t)=>{const a=(e=>0===e?12:12/e)(e.columns.length);return R.default.createElement(R.default.Fragment,{key:t},1===t?R.default.createElement(L.default,{item:!0,xs:12},R.default.createElement(L.default,{container:!0,spacing:3},e.columns.map((e,t)=>R.default.createElement(L.default,{key:t,item:!0,xs:12,md:a},R.default.createElement(me,{api:l,cache:f.current,id:e.id,dashboard:i,schema:u,title:e.title,filter:e.filter,params:o}))))):e.columns.map((e,t)=>R.default.createElement(L.default,{key:t,item:!0,xs:12,md:a},R.default.createElement(me,{api:l,cache:f.current,id:e.id,dashboard:i,schema:u,title:e.title,filter:e.filter,params:o}))))})))},ReportingProvider:({defaultParameters:t={},defaultApi:a={},children:r})=>{const[n,l]=e.useState(t),[o,i]=e.useState(a),s={parameters:n,setParameters:l,api:o,setApi:i,setReportingContext:({parameters:e,api:t})=>{void 0!==e&&l(e),void 0!==t&&i(t)}};return R.default.createElement(pe.Provider,{value:s},r)},useReportingContext:()=>{const t=e.useContext(pe);if(void 0===t)throw new Error("useReportingContext must be used within a ReportingProvider");return t},useReportingContextOptional:he};exports.default=ye;
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import React__default, { useEffect, useMemo, useState, useRef } from 'react';
2
+ import React__default, { useEffect, useMemo, useState, useRef, useContext, createContext } from 'react';
3
3
  import Paper from '@material-ui/core/Paper';
4
4
  import { makeStyles } from '@material-ui/core/styles';
5
5
  import { CircularProgress } from '@material-ui/core';
@@ -280,6 +280,43 @@ const Api = {
280
280
  } = await apiClient.post(`/report-build/run`, report);
281
281
  return data;
282
282
  },
283
+ /**
284
+ * Download ad-hoc report as CSV
285
+ * @param {Object} params - Parameters object
286
+ * @param {Object} params.report - Report definition object containing dimensions, metrics, etc.
287
+ * @param {string} [params.filename] - Optional filename for the downloaded file
288
+ * @returns {Promise} Downloads CSV file
289
+ */
290
+ downloadAdHocReport: async ({
291
+ report,
292
+ filename
293
+ }) => {
294
+ const response = await apiClient.post(`/report-build/run?download=csv`, report, {
295
+ responseType: 'blob'
296
+ });
297
+
298
+ // Create a download link and trigger download
299
+ const url = window.URL.createObjectURL(new Blob([response.data]));
300
+ const link = document.createElement('a');
301
+ link.href = url;
302
+
303
+ // Use provided filename, or extract from Content-Disposition header, or use default
304
+ let finalFilename = filename || 'report.csv';
305
+ if (!filename) {
306
+ const contentDisposition = response.headers['content-disposition'];
307
+ if (contentDisposition) {
308
+ const filenameMatch = contentDisposition.match(/filename="?(.+)"?/i);
309
+ if (filenameMatch && filenameMatch[1]) {
310
+ finalFilename = filenameMatch[1];
311
+ }
312
+ }
313
+ }
314
+ link.setAttribute('download', finalFilename);
315
+ document.body.appendChild(link);
316
+ link.click();
317
+ link.remove();
318
+ window.URL.revokeObjectURL(url);
319
+ },
283
320
  getDateRanges: async ({
284
321
  dashboardId
285
322
  } = {}) => {
@@ -747,7 +784,8 @@ function SingleSelect({
747
784
  onChange,
748
785
  sx = {
749
786
  width: '100%'
750
- }
787
+ },
788
+ disabled = false
751
789
  }) {
752
790
  // Check if the current value exists in items, otherwise use empty string
753
791
  const validValue = items.some(itm => itm.key === value) ? value : '';
@@ -763,6 +801,7 @@ function SingleSelect({
763
801
  value: validValue,
764
802
  label: label,
765
803
  onChange: onChange,
804
+ disabled: disabled,
766
805
  MenuProps: {
767
806
  style: {
768
807
  maxHeight: '300px'
@@ -1129,11 +1168,100 @@ var Chart = ({
1129
1168
  }), chartType)));
1130
1169
  };
1131
1170
 
1171
+ // Create the context
1172
+ const ReportingContext = /*#__PURE__*/createContext(undefined);
1173
+
1174
+ /**
1175
+ * ReportingProvider - Provides reporting configuration context to child components
1176
+ *
1177
+ * @param {Object} props
1178
+ * @param {Object} [props.defaultParameters] - Default parameters for reports (base_currency, merchants, client, etc.)
1179
+ * @param {Object} [props.defaultApi] - Default API configuration (token, base_url)
1180
+ * @param {React.ReactNode} props.children - Child components
1181
+ */
1182
+ const ReportingProvider = ({
1183
+ defaultParameters = {},
1184
+ defaultApi = {},
1185
+ children
1186
+ }) => {
1187
+ const [parameters, setParameters] = useState(defaultParameters);
1188
+ const [api, setApi] = useState(defaultApi);
1189
+ const value = {
1190
+ parameters,
1191
+ setParameters,
1192
+ api,
1193
+ setApi,
1194
+ // Convenience method to update both at once
1195
+ setReportingContext: ({
1196
+ parameters: newParams,
1197
+ api: newApi
1198
+ }) => {
1199
+ if (newParams !== undefined) {
1200
+ setParameters(newParams);
1201
+ }
1202
+ if (newApi !== undefined) {
1203
+ setApi(newApi);
1204
+ }
1205
+ }
1206
+ };
1207
+ return /*#__PURE__*/React__default.createElement(ReportingContext.Provider, {
1208
+ value: value
1209
+ }, children);
1210
+ };
1211
+
1212
+ /**
1213
+ * useReportingContext - Hook to access reporting context
1214
+ *
1215
+ * @returns {Object} Context value with parameters, api, and setter functions
1216
+ * @returns {Object} return.parameters - Current parameters object
1217
+ * @returns {Function} return.setParameters - Function to update parameters
1218
+ * @returns {Object} return.api - Current API configuration
1219
+ * @returns {Function} return.setApi - Function to update API configuration
1220
+ * @returns {Function} return.setReportingContext - Function to update both parameters and api
1221
+ *
1222
+ * @example
1223
+ * const { parameters, setParameters, api, setApi, setReportingContext } = useReportingContext();
1224
+ *
1225
+ * // Update parameters only
1226
+ * setParameters({ base_currency: 'USD', merchants: [...] });
1227
+ *
1228
+ * // Update API only
1229
+ * setApi({ token: 'new-token', base_url: 'https://api.example.com' });
1230
+ *
1231
+ * // Update both at once
1232
+ * setReportingContext({
1233
+ * parameters: { base_currency: 'EUR' },
1234
+ * api: { token: 'token', base_url: 'https://api.example.com' }
1235
+ * });
1236
+ */
1237
+ const useReportingContext = () => {
1238
+ const context = useContext(ReportingContext);
1239
+ if (context === undefined) {
1240
+ throw new Error('useReportingContext must be used within a ReportingProvider');
1241
+ }
1242
+ return context;
1243
+ };
1244
+
1245
+ /**
1246
+ * useReportingContextOptional - Hook to optionally access reporting context
1247
+ * Returns null if used outside of ReportingProvider (useful for optional fallback)
1248
+ *
1249
+ * @returns {Object|null} Context value or null if not within provider
1250
+ */
1251
+ const useReportingContextOptional = () => {
1252
+ return useContext(ReportingContext);
1253
+ };
1254
+
1132
1255
  function Dashboard({
1133
1256
  id = "sample_dashboard",
1134
1257
  api,
1135
1258
  params
1136
1259
  }) {
1260
+ const reportingContext = useReportingContextOptional();
1261
+
1262
+ // Use props if provided, otherwise fall back to context
1263
+ const finalApi = api || reportingContext?.api || {};
1264
+ const finalParams = params || reportingContext?.parameters || {};
1137
1265
  const [dashboard, setDashboard] = React__default.useState();
1138
1266
  //const [schema, setSchema] = React.useState();
1139
1267
  const [schema] = React__default.useState();
@@ -1148,17 +1276,17 @@ function Dashboard({
1148
1276
  }, {
1149
1277
  schema
1150
1278
  }, {
1151
- params
1279
+ params: finalParams
1152
1280
  });
1153
1281
  useEffect(() => {
1154
- // console.log('token changed',api);
1282
+ // console.log('token changed',finalApi);
1155
1283
 
1156
- Api.setBaseUrl(api.base_url);
1157
- Api.setToken(api.token);
1158
- }, [api]);
1284
+ Api.setBaseUrl(finalApi.base_url);
1285
+ Api.setToken(finalApi.token);
1286
+ }, [finalApi]);
1159
1287
  const init = async () => {
1160
- Api.setBaseUrl(api.base_url);
1161
- Api.setToken(api.token);
1288
+ Api.setBaseUrl(finalApi.base_url);
1289
+ Api.setToken(finalApi.token);
1162
1290
  await Api.loadDashboardMeta({
1163
1291
  dashboardId: id
1164
1292
  });
@@ -1258,14 +1386,14 @@ function Dashboard({
1258
1386
  xs: 12,
1259
1387
  md: md
1260
1388
  }, /*#__PURE__*/React__default.createElement(Chart, {
1261
- api: api,
1389
+ api: finalApi,
1262
1390
  cache: cache.current,
1263
1391
  id: column.id,
1264
1392
  dashboard: dashboard,
1265
1393
  schema: schema,
1266
1394
  title: column.title,
1267
1395
  filter: column.filter,
1268
- params: params
1396
+ params: finalParams
1269
1397
  }))))) :
1270
1398
  // All other rows behave normally
1271
1399
  row.columns.map((column, i) => /*#__PURE__*/React__default.createElement(Grid, {
@@ -1274,14 +1402,14 @@ function Dashboard({
1274
1402
  xs: 12,
1275
1403
  md: md
1276
1404
  }, /*#__PURE__*/React__default.createElement(Chart, {
1277
- api: api,
1405
+ api: finalApi,
1278
1406
  cache: cache.current,
1279
1407
  id: column.id,
1280
1408
  dashboard: dashboard,
1281
1409
  schema: schema,
1282
1410
  title: column.title,
1283
1411
  filter: column.filter,
1284
- params: params
1412
+ params: finalParams
1285
1413
  }))));
1286
1414
  })))
1287
1415
  );
@@ -1289,7 +1417,10 @@ function Dashboard({
1289
1417
 
1290
1418
  var index = {
1291
1419
  Chart,
1292
- Dashboard
1420
+ Dashboard,
1421
+ ReportingProvider,
1422
+ useReportingContext,
1423
+ useReportingContextOptional
1293
1424
  };
1294
1425
 
1295
1426
  export { index as default };