@devtable/dashboard 14.4.0 → 14.4.1
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.
- package/dist/dashboard.es.js +2 -2
- package/dist/dashboard.umd.js +2 -2
- package/dist/stats.html +1 -1
- package/dist/version.json +2 -2
- package/package.json +1 -1
package/dist/dashboard.es.js
CHANGED
|
@@ -2751,7 +2751,7 @@ class Wa {
|
|
|
2751
2751
|
}), this.instanceRegistry.clear(), this.factoryRegistry.clear();
|
|
2752
2752
|
}
|
|
2753
2753
|
}
|
|
2754
|
-
const Is = "14.4.
|
|
2754
|
+
const Is = "14.4.1", bg = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
2755
2755
|
__proto__: null,
|
|
2756
2756
|
version: Is
|
|
2757
2757
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
@@ -26759,7 +26759,7 @@ function uz(e) {
|
|
|
26759
26759
|
requireTrendingReason: l
|
|
26760
26760
|
};
|
|
26761
26761
|
}
|
|
26762
|
-
const t = S.uniq(e.derivedMetrics.map((i) => i.calculation)).filter((i) => wo.has(i))
|
|
26762
|
+
const t = S.uniq(e.derivedMetrics.map((i) => i.calculation)).filter((i) => wo.has(i)), n = e.supportTrending ? `当前指标涉及 ${t.map((i) => S.get(So, i, i)).join("、")},缺少时序则无法展示有效结果。` : "";
|
|
26763
26763
|
return {
|
|
26764
26764
|
filters: e.filters,
|
|
26765
26765
|
groupBys: e.groupBys,
|
package/dist/dashboard.umd.js
CHANGED
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
${Object.entries(t).map(([a,l])=>`const ${a} = '${l}';`).join(`
|
|
52
52
|
`)}
|
|
53
53
|
return ${e};
|
|
54
|
-
`)(r)}catch(a){return console.error(a),console.log(e),e}}function Wt(e,t,r,a){const l=Tu(t,a);return e.replaceAll(/(\{\{([^{\}]+(?=}))\}\})/g,(...i)=>{const c=i[2];if(!c)return c;const d=l[c];if(d)return d;const u=Su(c);return ku(u,l,r)})}function zu(e,t){const r=Ua.decode(t);r!==e&&(console.error("Inconsistent sql"),console.groupCollapsed("Inconsistent sql"),console.table({before:e,after:t,v:r}),console.groupEnd())}async function Du({query:e,name:t,payload:r,additionals:a},l){if(!e.sql)return[];const{type:o,key:i,sql:c,pre_process:d,post_process:u}=e,p=Sn(c,r),f=pd({sql:p,pre_process:d}),v=Ua.encode(f);zu(f,v);let _=await Ce.query(l)({type:o,key:i,query:v,...a},{params:{name:t}});return _=hd(u,_,Un(r)),_}async function Iu({type:e,key:t,configString:r,name:a,additionals:l},o){try{return await Ce.httpDataSourceQuery(o)({type:e,key:t,query:r,...l},{params:{name:a}})}catch(i){if(me.isCancel(i))throw i;return console.error(i),i}}async function Mu({key:e,configString:t,name:r,additionals:a},l){try{return await Ce.mericoMetricQuery(l)({type:"merico_metric_system",key:e,query:t,...a},{params:{name:r}})}catch(o){throw o}}async function Yn(){try{return(await Ce.post()("/datasource/list",{filter:{},sort:[{field:"create_time",order:"ASC"}],pagination:{page:1,pagesize:100}},{})).data}catch(e){return console.error(e),[]}}async function Qs(){try{return(await Ce.post()("/sql_snippet/list",{filter:{},sort:[{field:"id",order:"ASC"}],pagination:{page:1,pagesize:1e3}},{})).data}catch(e){return console.error(e),[]}}class Ws{constructor(t){P(this,"rootRef");this.rootRef=F.observable({current:t})}async deleteItem(t){F.runInAction(()=>{y.unset(this.rootRef.current,[t])})}getItem(t){const r=this.getValueFromRoot(t);return Promise.resolve(r)}getValueFromRoot(t){return t===null?F.toJS(this.rootRef.current):y.get(this.rootRef.current,[t])}setItem(t,r){if(t===null)if(y.isObject(r))F.runInAction(()=>{this.rootRef.current=r});else throw new Error("Cannot set root value to non-object");else F.runInAction(()=>{y.set(this.rootRef.current,[t],r)});return Promise.resolve(this.getItem(t))}watchItem(t,r,a){return F.reaction(()=>this.getValueFromRoot(t),(l,o)=>{r(l,o)},{requiresObservable:!0,fireImmediately:y.get(a,"fireImmediately",!1)})}}class Au{constructor(){P(this,"channels",new Map);P(this,"globalChannel",new Ya)}getChannel(t){const r=this.channels.get(t);if(r)return r;const a=new Ya;return this.channels.set(t,a),a}}class Pu{constructor(t){P(this,"instances",new Map);this.pluginManager=t}get availableVizList(){return this.pluginManager.installedPlugins.flatMap(t=>t.manifest.viz)}resolveComponent(t){return this.pluginManager.factory.viz(t)}getOrCreateInstance(t){const r=this.instances.get(t.id);if(r)return r;const a={id:t.id,name:t.viz.type,type:t.viz.type,messageChannels:new Au,instanceData:new Ws(t.viz.conf)};return this.instances.set(t.id,a),a}}function Us(e,t,r,a){return{vizManager:r,locale:"zh",msgChannels:e.messageChannels,instanceData:e.instanceData,pluginData:new Ws({}),colorPalette:{getColor(){return()=>""}},data:t,variables:a}}const $u=e=>{const{panel:t,measure:r,vizManager:a,data:l,variables:o}=e,i=a.resolveComponent(t.viz.type),c=a.getOrCreateInstance(t),d={...Us(c,l,a,o),viewport:{width:r.w,height:r.h}},u=i.viewRender;return n.jsx(u,{context:d,instance:c,...y.omit(e,["panel","vizManager","data"])})},Vu=e=>{const{vizManager:t,panel:r,data:a,variables:l}=e,o=t.resolveComponent(r.viz.type),i=t.getOrCreateInstance(r),c={...Us(i,a,t,l)},d=o.configRender;return n.jsx(d,{context:c,instance:i,...y.omit(e,["panel","vizManager","data"])})},Ys=(e,t)=>{const r=Pe.bezier(e),a=Pe.bezier(t);return function(l){return l<50?r(l*2/100).hex():a((l-50)*2/100).hex()}},Ut=e=>{const t=Pe.bezier(e);return function(r){return t(r/100).hex()}},Eu={type:"interpolation",displayName:"style.color.interpolation.palette.red_green",getColor:Ys(["darkred","deeppink","lightyellow"],["lightyellow","lightgreen","teal"]),name:"red-green",category:"diverging"},Bu={type:"interpolation",displayName:"style.color.interpolation.palette.yellow_blue",getColor:Ys(["#8f531d","#ffd347","#e3efe3"],["#eefaee","#4ecbbf","#003f94"]),name:"yellow-blue",category:"diverging"},Lu={type:"interpolation",displayName:"style.color.interpolation.palette.red",getColor:Ut(["#fff7f1","darkred"]),name:"red",category:"sequential"},qu={type:"interpolation",displayName:"style.color.interpolation.palette.green",getColor:Ut(["#f0ffed","darkgreen"]),name:"green",category:"sequential"},Ou={type:"interpolation",displayName:"style.color.interpolation.palette.blue",getColor:Ut(["#f9fcff","#48b3e9","darkblue"]),name:"blue",category:"sequential"},Nu={type:"interpolation",displayName:"style.color.interpolation.palette.orange",getColor:Ut(["#fff7f1","darkorange","#b60000"]),name:"orange",category:"sequential"};class Gu{constructor(t){P(this,"symbol");this.symbol=Symbol(t)}}function Ke(e){return new Gu(e)}class Kn{constructor(){P(this,"parent");P(this,"factoryRegistry",new Map);P(this,"instanceRegistry",new Map)}createScoped(){const t=new Kn;return t.parent=this,t}getRequired(t){return this.get(t)}get(t){if(this.instanceRegistry.has(t.symbol))return this.instanceRegistry.get(t.symbol);const r=this.factoryRegistry.get(t.symbol);if(r){const a=r(this);return this.instanceRegistry.set(t.symbol,a),a}if(this.parent)return this.parent.get(t)}provideFactory(t,r){return this.factoryRegistry.has(t.symbol)?console.warn(`Token ${t.symbol.toString()} is already registered`):this.factoryRegistry.set(t.symbol,r),this}provideValue(t,r){return this.factoryRegistry.has(t.symbol)?console.warn(`Token ${t.symbol.toString()} is already registered`):this.factoryRegistry.set(t.symbol,()=>r),this}dispose(){this.instanceRegistry.forEach(t=>{const r=y.get(t,"dispose");y.isFunction(r)&&r.bind(t)()}),this.instanceRegistry.clear(),this.factoryRegistry.clear()}}const Ks="14.4.0",Fu=Object.freeze(Object.defineProperty({__proto__:null,version:Ks},Symbol.toStringTag,{value:"Module"}));class ju{constructor(t){P(this,"staticColors",new Map);P(this,"interpolations",new Map);t.installedPlugins.forEach(r=>{r.manifest.color.forEach(a=>{this.register(a)})})}getStaticColors(){return Array.from(this.staticColors.values())}register(t){const r=this.encodeColor(t);t.type==="single"?(this.staticColors.has(r)&&console.warn(`the color '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`),this.staticColors.set(r,t)):t.type==="interpolation"&&(this.interpolations.has(r)&&console.warn(`the interpolation '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`,`the interpolation '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`),this.interpolations.set(r,t))}decodeStaticColor(t){return this.staticColors.get(t)}encodeColor(t){return`\${${t.category}}.{${t.name}}`}decodeInterpolation(t){return this.interpolations.get(t)}getColorInterpolations(){return Array.from(this.interpolations.values())}}class Qu{constructor(){P(this,"plugins",new Map);P(this,"vizComponents",new Map);P(this,"factory",{viz:t=>{const r=this.vizComponents.get(t);if(r)return r;throw new Error(`Viz Component (${t}) not found`)}})}install(t){if(this.plugins.has(t.id))throw new Error(`Plugin (${t.id}) has been installed before`);this.plugins.set(t.id,t);for(const r of t.manifest.viz){if(this.vizComponents.has(r.name))throw new Error(`Viz Component (${r.name}) has been installed before`);this.vizComponents.set(r.name,r)}}get installedPlugins(){return Array.from(this.plugins.values())}}class Wu{constructor(){P(this,"migrations",[])}version(t,r){return this.migrations.push({version:t,handler:r}),this}run(t,r,a){var i;if(t.from===t.to)return r;if(t.from>t.to)throw new Error(`Can not downgrade from version '${t.from}' to (${t.to})`);const l=this.migrations.filter(c=>c.version>t.from&&c.version<=t.to),o=y.orderBy(l,"version","asc");if(((i=y.last(o))==null?void 0:i.version)!==t.to)throw new Error(`Migration to version ${t.to} not found`);return o.reduce((c,d)=>d.handler(c,a),r)}}class H extends Wu{constructor(){super(),this.configVersions()}version(t,r){return super.version(t,(a,l)=>({version:t,...r(a,l)}))}async migrate({configData:t,panelModel:r}){const a=await t.getItem(null),l=y.get(a,"version",0),o=this.run({from:l,to:this.VERSION},a,{panelModel:r});await t.setItem(null,o)}async needMigration({configData:t}){const r=await t.getItem(null);return y.get(r,"version",0)<this.VERSION}}const E=(e,t)=>{const[r,{setFalse:a}]=q.useBoolean(!0),[l,o]=g.useState();g.useEffect(()=>(e.getItem(t).then(c=>{o(c),a()}),e.watchItem(t,c=>{o(c)})));const i=g.useCallback(async c=>{await e.setItem(t,c),o(c)},[e,t]);return{loading:r,value:l,set:i}},be={top:16,right:16,bottom:16,left:16},Ee=e=>Math.max(0,e-be.left-be.right),Be=e=>Math.max(0,e-be.top-be.bottom),It=(e,t)=>({width:Ee(e),height:Be(t)}),ye=({width:e,height:t,children:r})=>n.jsx(s.Box,{pt:be.top,pr:be.right,pb:be.bottom,pl:be.left,sx:{width:e,height:t,overflow:"hidden",position:"relative"},children:r}),Xn={x_axis_data_key:"",y_axis_data_key:"",z_axis_data_key:"",xAxis3D:{type:"value",name:"X Axis Name"},yAxis3D:{type:"value",name:"Y Axis Name"},zAxis3D:{type:"value",name:"Z Axis Name"}};function Uu({context:e}){const{value:t}=E(e.instanceData,"config"),r=e.data,{width:a,height:l}=e.viewport,{x_axis_data_key:o,y_axis_data_key:i,z_axis_data_key:c,xAxis3D:d,yAxis3D:u,zAxis3D:p}=y.defaults({},t,Xn),f=g.useMemo(()=>Lt(r,o),[r,o]),{x:v,y:_,z:x}=g.useMemo(()=>({x:A(o),y:A(i),z:A(c)}),[o,i,c]),{min:T,max:k}=g.useMemo(()=>{const M=y.minBy(f,L=>L[x.columnKey]),I=y.maxBy(f,L=>L[x.columnKey]);return{min:y.get(M,x.columnKey),max:y.get(I,x.columnKey)}},[f,x]),z={tooltip:{},backgroundColor:"#fff",visualMap:{show:!0,dimension:2,min:T,max:k,inRange:{color:["#313695","#4575b4","#74add1","#abd9e9","#e0f3f8","#ffffbf","#fee090","#fdae61","#f46d43","#d73027","#a50026"]}},xAxis3D:d,yAxis3D:u,zAxis3D:p,grid3D:{viewControl:{projection:"orthographic",autoRotate:!1},light:{main:{shadow:!0,quality:"ultra",intensity:1.5}}},series:[{type:"bar3D",wireframe:{},data:f.map(M=>[M[v.columnKey],M[_.columnKey],M[x.columnKey]])}]};return t?n.jsx(ye,{width:a,height:l,children:n.jsx(de,{echarts:ie,option:z,style:It(a,l),notMerge:!0,theme:"merico-light"})}):null}const B=S.observer(g.forwardRef(({label:e,required:t,description:r,value:a,onChange:l,queryID:o,clearable:i=!1,sx:c,...d},u)=>{const{panel:p}=te(),f=g.useMemo(()=>p.dataFieldOptionGroups(a,i,o),[a,i,o]);if(f.length===0){const v=p.explainDataKey(a);return n.jsxs(s.HoverCard,{shadow:"md",position:"bottom-start",withinPortal:!0,zIndex:320,children:[n.jsx(s.HoverCard.Target,{children:n.jsx(s.Box,{children:n.jsx(s.TextInput,{label:e,required:t,defaultValue:v.columnKey,readOnly:!0,disabled:!0})})}),n.jsx(s.HoverCard.Dropdown,{children:n.jsxs(s.Group,{justify:"flex-start",gap:0,children:[n.jsx(s.Text,{size:"xs",c:v.queryName?"black":"red",ff:"monospace",children:v.queryName??v.queryID}),n.jsx(s.Text,{size:"xs",c:"black",ff:"monospace",children:"."}),n.jsx(s.Text,{size:"xs",c:"red",ff:"monospace",children:v.columnKey})]})})]})}return n.jsx(s.Select,{ref:u,label:e,description:r,data:f,value:a,onChange:X(l),required:t,sx:c,maxDropdownHeight:500,...d})}));function Yu({context:e}){const{value:t,set:r}=E(e.instanceData,"config"),a=y.defaults({},t,Xn),{control:l,handleSubmit:o,reset:i}=b.useForm({defaultValues:a});return g.useEffect(()=>{i(a)},[t]),t?n.jsx(s.Stack,{gap:"xs",children:n.jsxs("form",{onSubmit:o(r),children:[n.jsx(s.Text,{size:"sm",children:"X Axis"}),n.jsxs(s.Group,{justify:"space-between",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[n.jsx(b.Controller,{name:"x_axis_data_key",control:l,render:({field:c})=>n.jsx(B,{label:"Data Field",required:!0,...c})}),n.jsx(b.Controller,{name:"xAxis3D.name",control:l,render:({field:c})=>n.jsx(s.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...c})})]}),n.jsx(s.Text,{mt:"lg",size:"sm",children:"Y Axis"}),n.jsxs(s.Group,{justify:"space-between",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[n.jsx(b.Controller,{name:"y_axis_data_key",control:l,render:({field:c})=>n.jsx(B,{label:"Data Field",required:!0,...c})}),n.jsx(b.Controller,{name:"yAxis3D.name",control:l,render:({field:c})=>n.jsx(s.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...c})})]}),n.jsx(s.Text,{mt:"lg",size:"sm",children:"Z Axis"}),n.jsxs(s.Group,{justify:"space-between",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[n.jsx(b.Controller,{name:"z_axis_data_key",control:l,render:({field:c})=>n.jsx(B,{label:"Data Field",required:!0,...c})}),n.jsx(b.Controller,{name:"zAxis3D.name",control:l,render:({field:c})=>n.jsx(s.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...c})})]}),n.jsx(s.Group,{justify:"center",mt:"xl",grow:!0,sx:{width:"60%"},mx:"auto",children:n.jsxs(s.Button,{color:"blue",type:"submit",children:[n.jsx(C.IconDeviceFloppy,{size:20}),n.jsx(s.Text,{ml:"md",size:"sm",children:"Save"})]})})]})}):null}const Ku=[{lang:"en",resources:{bar_chart_3d:{viz_name:"Bar Chart(3D)"}}},{lang:"zh",resources:{bar_chart_3d:{viz_name:"柱图(3D)"}}}];function Xu(e,{panelModel:t}){try{const r=t.queryIDs[0];if(!r)throw new Error("cannot migrate when queryID is empty");const a=d=>d&&`${r}.${d}`,{x_axis_data_key:l,y_axis_data_key:o,z_axis_data_key:i,...c}=e;return{...c,x_axis_data_key:a(l),y_axis_data_key:a(o),z_axis_data_key:a(i)}}catch(r){throw console.error("[Migration failed]",r),r}}class Zu extends H{constructor(){super(...arguments);P(this,"VERSION",2)}configVersions(){this.version(1,r=>({version:1,config:r})),this.version(2,(r,a)=>{const{config:l}=r;return{...r,version:2,config:Xu(l,a)}})}}const Ju={displayName:"viz.bar_chart_3d.viz_name",displayGroup:"chart.groups.echarts_based_charts",migrator:new Zu,name:"bar-3d",viewRender:Uu,configRender:Yu,createConfig(){return{version:2,config:y.cloneDeep(Xn)}},translation:Ku},Hu=({disabled:e,value:t,onChange:r})=>{const a=l=>{l&&r(l)};return n.jsxs(s.Box,{sx:{position:"relative"},children:[e&&n.jsx(s.Overlay,{backgroundOpacity:.6,color:"#fff",zIndex:5,blur:2}),n.jsx(we,{height:"500px",defaultLanguage:"javascript",value:t,onChange:a,theme:"vs-dark",options:{minimap:{enabled:!1},readOnly:e}})]})};function ve({enabled:e,func_content:t}){return(r,a)=>{if(!e)return r;try{return new Function(`return ${t}`)()(r,a)}catch(l){return console.error(`[getEchartsXAxisLabel] failed parsing custom function, error: ${l.message}`),r}}}function pe(){return{enabled:!1,func_content:["function label(value, index) {"," // your code goes here"," // return value","}"].join(`
|
|
54
|
+
`)(r)}catch(a){return console.error(a),console.log(e),e}}function Wt(e,t,r,a){const l=Tu(t,a);return e.replaceAll(/(\{\{([^{\}]+(?=}))\}\})/g,(...i)=>{const c=i[2];if(!c)return c;const d=l[c];if(d)return d;const u=Su(c);return ku(u,l,r)})}function zu(e,t){const r=Ua.decode(t);r!==e&&(console.error("Inconsistent sql"),console.groupCollapsed("Inconsistent sql"),console.table({before:e,after:t,v:r}),console.groupEnd())}async function Du({query:e,name:t,payload:r,additionals:a},l){if(!e.sql)return[];const{type:o,key:i,sql:c,pre_process:d,post_process:u}=e,p=Sn(c,r),f=pd({sql:p,pre_process:d}),v=Ua.encode(f);zu(f,v);let _=await Ce.query(l)({type:o,key:i,query:v,...a},{params:{name:t}});return _=hd(u,_,Un(r)),_}async function Iu({type:e,key:t,configString:r,name:a,additionals:l},o){try{return await Ce.httpDataSourceQuery(o)({type:e,key:t,query:r,...l},{params:{name:a}})}catch(i){if(me.isCancel(i))throw i;return console.error(i),i}}async function Mu({key:e,configString:t,name:r,additionals:a},l){try{return await Ce.mericoMetricQuery(l)({type:"merico_metric_system",key:e,query:t,...a},{params:{name:r}})}catch(o){throw o}}async function Yn(){try{return(await Ce.post()("/datasource/list",{filter:{},sort:[{field:"create_time",order:"ASC"}],pagination:{page:1,pagesize:100}},{})).data}catch(e){return console.error(e),[]}}async function Qs(){try{return(await Ce.post()("/sql_snippet/list",{filter:{},sort:[{field:"id",order:"ASC"}],pagination:{page:1,pagesize:1e3}},{})).data}catch(e){return console.error(e),[]}}class Ws{constructor(t){P(this,"rootRef");this.rootRef=F.observable({current:t})}async deleteItem(t){F.runInAction(()=>{y.unset(this.rootRef.current,[t])})}getItem(t){const r=this.getValueFromRoot(t);return Promise.resolve(r)}getValueFromRoot(t){return t===null?F.toJS(this.rootRef.current):y.get(this.rootRef.current,[t])}setItem(t,r){if(t===null)if(y.isObject(r))F.runInAction(()=>{this.rootRef.current=r});else throw new Error("Cannot set root value to non-object");else F.runInAction(()=>{y.set(this.rootRef.current,[t],r)});return Promise.resolve(this.getItem(t))}watchItem(t,r,a){return F.reaction(()=>this.getValueFromRoot(t),(l,o)=>{r(l,o)},{requiresObservable:!0,fireImmediately:y.get(a,"fireImmediately",!1)})}}class Au{constructor(){P(this,"channels",new Map);P(this,"globalChannel",new Ya)}getChannel(t){const r=this.channels.get(t);if(r)return r;const a=new Ya;return this.channels.set(t,a),a}}class Pu{constructor(t){P(this,"instances",new Map);this.pluginManager=t}get availableVizList(){return this.pluginManager.installedPlugins.flatMap(t=>t.manifest.viz)}resolveComponent(t){return this.pluginManager.factory.viz(t)}getOrCreateInstance(t){const r=this.instances.get(t.id);if(r)return r;const a={id:t.id,name:t.viz.type,type:t.viz.type,messageChannels:new Au,instanceData:new Ws(t.viz.conf)};return this.instances.set(t.id,a),a}}function Us(e,t,r,a){return{vizManager:r,locale:"zh",msgChannels:e.messageChannels,instanceData:e.instanceData,pluginData:new Ws({}),colorPalette:{getColor(){return()=>""}},data:t,variables:a}}const $u=e=>{const{panel:t,measure:r,vizManager:a,data:l,variables:o}=e,i=a.resolveComponent(t.viz.type),c=a.getOrCreateInstance(t),d={...Us(c,l,a,o),viewport:{width:r.w,height:r.h}},u=i.viewRender;return n.jsx(u,{context:d,instance:c,...y.omit(e,["panel","vizManager","data"])})},Vu=e=>{const{vizManager:t,panel:r,data:a,variables:l}=e,o=t.resolveComponent(r.viz.type),i=t.getOrCreateInstance(r),c={...Us(i,a,t,l)},d=o.configRender;return n.jsx(d,{context:c,instance:i,...y.omit(e,["panel","vizManager","data"])})},Ys=(e,t)=>{const r=Pe.bezier(e),a=Pe.bezier(t);return function(l){return l<50?r(l*2/100).hex():a((l-50)*2/100).hex()}},Ut=e=>{const t=Pe.bezier(e);return function(r){return t(r/100).hex()}},Eu={type:"interpolation",displayName:"style.color.interpolation.palette.red_green",getColor:Ys(["darkred","deeppink","lightyellow"],["lightyellow","lightgreen","teal"]),name:"red-green",category:"diverging"},Bu={type:"interpolation",displayName:"style.color.interpolation.palette.yellow_blue",getColor:Ys(["#8f531d","#ffd347","#e3efe3"],["#eefaee","#4ecbbf","#003f94"]),name:"yellow-blue",category:"diverging"},Lu={type:"interpolation",displayName:"style.color.interpolation.palette.red",getColor:Ut(["#fff7f1","darkred"]),name:"red",category:"sequential"},qu={type:"interpolation",displayName:"style.color.interpolation.palette.green",getColor:Ut(["#f0ffed","darkgreen"]),name:"green",category:"sequential"},Ou={type:"interpolation",displayName:"style.color.interpolation.palette.blue",getColor:Ut(["#f9fcff","#48b3e9","darkblue"]),name:"blue",category:"sequential"},Nu={type:"interpolation",displayName:"style.color.interpolation.palette.orange",getColor:Ut(["#fff7f1","darkorange","#b60000"]),name:"orange",category:"sequential"};class Gu{constructor(t){P(this,"symbol");this.symbol=Symbol(t)}}function Ke(e){return new Gu(e)}class Kn{constructor(){P(this,"parent");P(this,"factoryRegistry",new Map);P(this,"instanceRegistry",new Map)}createScoped(){const t=new Kn;return t.parent=this,t}getRequired(t){return this.get(t)}get(t){if(this.instanceRegistry.has(t.symbol))return this.instanceRegistry.get(t.symbol);const r=this.factoryRegistry.get(t.symbol);if(r){const a=r(this);return this.instanceRegistry.set(t.symbol,a),a}if(this.parent)return this.parent.get(t)}provideFactory(t,r){return this.factoryRegistry.has(t.symbol)?console.warn(`Token ${t.symbol.toString()} is already registered`):this.factoryRegistry.set(t.symbol,r),this}provideValue(t,r){return this.factoryRegistry.has(t.symbol)?console.warn(`Token ${t.symbol.toString()} is already registered`):this.factoryRegistry.set(t.symbol,()=>r),this}dispose(){this.instanceRegistry.forEach(t=>{const r=y.get(t,"dispose");y.isFunction(r)&&r.bind(t)()}),this.instanceRegistry.clear(),this.factoryRegistry.clear()}}const Ks="14.4.1",Fu=Object.freeze(Object.defineProperty({__proto__:null,version:Ks},Symbol.toStringTag,{value:"Module"}));class ju{constructor(t){P(this,"staticColors",new Map);P(this,"interpolations",new Map);t.installedPlugins.forEach(r=>{r.manifest.color.forEach(a=>{this.register(a)})})}getStaticColors(){return Array.from(this.staticColors.values())}register(t){const r=this.encodeColor(t);t.type==="single"?(this.staticColors.has(r)&&console.warn(`the color '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`),this.staticColors.set(r,t)):t.type==="interpolation"&&(this.interpolations.has(r)&&console.warn(`the interpolation '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`,`the interpolation '${t.name}' has been registered under '${t.category}', previous registered value will be overridden`),this.interpolations.set(r,t))}decodeStaticColor(t){return this.staticColors.get(t)}encodeColor(t){return`\${${t.category}}.{${t.name}}`}decodeInterpolation(t){return this.interpolations.get(t)}getColorInterpolations(){return Array.from(this.interpolations.values())}}class Qu{constructor(){P(this,"plugins",new Map);P(this,"vizComponents",new Map);P(this,"factory",{viz:t=>{const r=this.vizComponents.get(t);if(r)return r;throw new Error(`Viz Component (${t}) not found`)}})}install(t){if(this.plugins.has(t.id))throw new Error(`Plugin (${t.id}) has been installed before`);this.plugins.set(t.id,t);for(const r of t.manifest.viz){if(this.vizComponents.has(r.name))throw new Error(`Viz Component (${r.name}) has been installed before`);this.vizComponents.set(r.name,r)}}get installedPlugins(){return Array.from(this.plugins.values())}}class Wu{constructor(){P(this,"migrations",[])}version(t,r){return this.migrations.push({version:t,handler:r}),this}run(t,r,a){var i;if(t.from===t.to)return r;if(t.from>t.to)throw new Error(`Can not downgrade from version '${t.from}' to (${t.to})`);const l=this.migrations.filter(c=>c.version>t.from&&c.version<=t.to),o=y.orderBy(l,"version","asc");if(((i=y.last(o))==null?void 0:i.version)!==t.to)throw new Error(`Migration to version ${t.to} not found`);return o.reduce((c,d)=>d.handler(c,a),r)}}class H extends Wu{constructor(){super(),this.configVersions()}version(t,r){return super.version(t,(a,l)=>({version:t,...r(a,l)}))}async migrate({configData:t,panelModel:r}){const a=await t.getItem(null),l=y.get(a,"version",0),o=this.run({from:l,to:this.VERSION},a,{panelModel:r});await t.setItem(null,o)}async needMigration({configData:t}){const r=await t.getItem(null);return y.get(r,"version",0)<this.VERSION}}const E=(e,t)=>{const[r,{setFalse:a}]=q.useBoolean(!0),[l,o]=g.useState();g.useEffect(()=>(e.getItem(t).then(c=>{o(c),a()}),e.watchItem(t,c=>{o(c)})));const i=g.useCallback(async c=>{await e.setItem(t,c),o(c)},[e,t]);return{loading:r,value:l,set:i}},be={top:16,right:16,bottom:16,left:16},Ee=e=>Math.max(0,e-be.left-be.right),Be=e=>Math.max(0,e-be.top-be.bottom),It=(e,t)=>({width:Ee(e),height:Be(t)}),ye=({width:e,height:t,children:r})=>n.jsx(s.Box,{pt:be.top,pr:be.right,pb:be.bottom,pl:be.left,sx:{width:e,height:t,overflow:"hidden",position:"relative"},children:r}),Xn={x_axis_data_key:"",y_axis_data_key:"",z_axis_data_key:"",xAxis3D:{type:"value",name:"X Axis Name"},yAxis3D:{type:"value",name:"Y Axis Name"},zAxis3D:{type:"value",name:"Z Axis Name"}};function Uu({context:e}){const{value:t}=E(e.instanceData,"config"),r=e.data,{width:a,height:l}=e.viewport,{x_axis_data_key:o,y_axis_data_key:i,z_axis_data_key:c,xAxis3D:d,yAxis3D:u,zAxis3D:p}=y.defaults({},t,Xn),f=g.useMemo(()=>Lt(r,o),[r,o]),{x:v,y:_,z:x}=g.useMemo(()=>({x:A(o),y:A(i),z:A(c)}),[o,i,c]),{min:T,max:k}=g.useMemo(()=>{const M=y.minBy(f,L=>L[x.columnKey]),I=y.maxBy(f,L=>L[x.columnKey]);return{min:y.get(M,x.columnKey),max:y.get(I,x.columnKey)}},[f,x]),z={tooltip:{},backgroundColor:"#fff",visualMap:{show:!0,dimension:2,min:T,max:k,inRange:{color:["#313695","#4575b4","#74add1","#abd9e9","#e0f3f8","#ffffbf","#fee090","#fdae61","#f46d43","#d73027","#a50026"]}},xAxis3D:d,yAxis3D:u,zAxis3D:p,grid3D:{viewControl:{projection:"orthographic",autoRotate:!1},light:{main:{shadow:!0,quality:"ultra",intensity:1.5}}},series:[{type:"bar3D",wireframe:{},data:f.map(M=>[M[v.columnKey],M[_.columnKey],M[x.columnKey]])}]};return t?n.jsx(ye,{width:a,height:l,children:n.jsx(de,{echarts:ie,option:z,style:It(a,l),notMerge:!0,theme:"merico-light"})}):null}const B=S.observer(g.forwardRef(({label:e,required:t,description:r,value:a,onChange:l,queryID:o,clearable:i=!1,sx:c,...d},u)=>{const{panel:p}=te(),f=g.useMemo(()=>p.dataFieldOptionGroups(a,i,o),[a,i,o]);if(f.length===0){const v=p.explainDataKey(a);return n.jsxs(s.HoverCard,{shadow:"md",position:"bottom-start",withinPortal:!0,zIndex:320,children:[n.jsx(s.HoverCard.Target,{children:n.jsx(s.Box,{children:n.jsx(s.TextInput,{label:e,required:t,defaultValue:v.columnKey,readOnly:!0,disabled:!0})})}),n.jsx(s.HoverCard.Dropdown,{children:n.jsxs(s.Group,{justify:"flex-start",gap:0,children:[n.jsx(s.Text,{size:"xs",c:v.queryName?"black":"red",ff:"monospace",children:v.queryName??v.queryID}),n.jsx(s.Text,{size:"xs",c:"black",ff:"monospace",children:"."}),n.jsx(s.Text,{size:"xs",c:"red",ff:"monospace",children:v.columnKey})]})})]})}return n.jsx(s.Select,{ref:u,label:e,description:r,data:f,value:a,onChange:X(l),required:t,sx:c,maxDropdownHeight:500,...d})}));function Yu({context:e}){const{value:t,set:r}=E(e.instanceData,"config"),a=y.defaults({},t,Xn),{control:l,handleSubmit:o,reset:i}=b.useForm({defaultValues:a});return g.useEffect(()=>{i(a)},[t]),t?n.jsx(s.Stack,{gap:"xs",children:n.jsxs("form",{onSubmit:o(r),children:[n.jsx(s.Text,{size:"sm",children:"X Axis"}),n.jsxs(s.Group,{justify:"space-between",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[n.jsx(b.Controller,{name:"x_axis_data_key",control:l,render:({field:c})=>n.jsx(B,{label:"Data Field",required:!0,...c})}),n.jsx(b.Controller,{name:"xAxis3D.name",control:l,render:({field:c})=>n.jsx(s.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...c})})]}),n.jsx(s.Text,{mt:"lg",size:"sm",children:"Y Axis"}),n.jsxs(s.Group,{justify:"space-between",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[n.jsx(b.Controller,{name:"y_axis_data_key",control:l,render:({field:c})=>n.jsx(B,{label:"Data Field",required:!0,...c})}),n.jsx(b.Controller,{name:"yAxis3D.name",control:l,render:({field:c})=>n.jsx(s.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...c})})]}),n.jsx(s.Text,{mt:"lg",size:"sm",children:"Z Axis"}),n.jsxs(s.Group,{justify:"space-between",grow:!0,p:"md",sx:{position:"relative",border:"1px solid #eee"},children:[n.jsx(b.Controller,{name:"z_axis_data_key",control:l,render:({field:c})=>n.jsx(B,{label:"Data Field",required:!0,...c})}),n.jsx(b.Controller,{name:"zAxis3D.name",control:l,render:({field:c})=>n.jsx(s.TextInput,{sx:{flexGrow:1},size:"md",label:"Name",...c})})]}),n.jsx(s.Group,{justify:"center",mt:"xl",grow:!0,sx:{width:"60%"},mx:"auto",children:n.jsxs(s.Button,{color:"blue",type:"submit",children:[n.jsx(C.IconDeviceFloppy,{size:20}),n.jsx(s.Text,{ml:"md",size:"sm",children:"Save"})]})})]})}):null}const Ku=[{lang:"en",resources:{bar_chart_3d:{viz_name:"Bar Chart(3D)"}}},{lang:"zh",resources:{bar_chart_3d:{viz_name:"柱图(3D)"}}}];function Xu(e,{panelModel:t}){try{const r=t.queryIDs[0];if(!r)throw new Error("cannot migrate when queryID is empty");const a=d=>d&&`${r}.${d}`,{x_axis_data_key:l,y_axis_data_key:o,z_axis_data_key:i,...c}=e;return{...c,x_axis_data_key:a(l),y_axis_data_key:a(o),z_axis_data_key:a(i)}}catch(r){throw console.error("[Migration failed]",r),r}}class Zu extends H{constructor(){super(...arguments);P(this,"VERSION",2)}configVersions(){this.version(1,r=>({version:1,config:r})),this.version(2,(r,a)=>{const{config:l}=r;return{...r,version:2,config:Xu(l,a)}})}}const Ju={displayName:"viz.bar_chart_3d.viz_name",displayGroup:"chart.groups.echarts_based_charts",migrator:new Zu,name:"bar-3d",viewRender:Uu,configRender:Yu,createConfig(){return{version:2,config:y.cloneDeep(Xn)}},translation:Ku},Hu=({disabled:e,value:t,onChange:r})=>{const a=l=>{l&&r(l)};return n.jsxs(s.Box,{sx:{position:"relative"},children:[e&&n.jsx(s.Overlay,{backgroundOpacity:.6,color:"#fff",zIndex:5,blur:2}),n.jsx(we,{height:"500px",defaultLanguage:"javascript",value:t,onChange:a,theme:"vs-dark",options:{minimap:{enabled:!1},readOnly:e}})]})};function ve({enabled:e,func_content:t}){return(r,a)=>{if(!e)return r;try{return new Function(`return ${t}`)()(r,a)}catch(l){return console.error(`[getEchartsXAxisLabel] failed parsing custom function, error: ${l.message}`),r}}}function pe(){return{enabled:!1,func_content:["function label(value, index) {"," // your code goes here"," // return value","}"].join(`
|
|
55
55
|
`)}}const Le=g.forwardRef(({value:e,onChange:t,triggerButtonText:r},a)=>{const{t:l}=m.useTranslation(),[o,{setTrue:i,setFalse:c}]=q.useBoolean(),[d,u]=g.useState(e);g.useEffect(()=>{u(e)},[e]);const p=k=>{u({...d,enabled:k})},f=()=>{c();const{enabled:k,func_content:z}=d,M={enabled:k,func_content:z};u(M),t(M)},v=()=>{c(),u(e)},_=k=>{u(z=>({...z,func_content:k}))},x=()=>{_(pe().func_content)},T=r??l("chart.axis.customize_label");return n.jsxs(n.Fragment,{children:[n.jsx(s.Button,{variant:"filled",color:"grape",leftSection:n.jsx(C.IconMathFunction,{size:16}),mt:24,onClick:i,sx:{flexGrow:0},children:T}),n.jsx(s.Modal,{size:800,title:T,opened:o,onClose:c,closeOnClickOutside:!1,withCloseButton:!1,zIndex:320,children:o&&n.jsxs(s.Stack,{children:[n.jsx(s.Checkbox,{mt:10,label:l("common.enabled"),checked:d.enabled,onChange:k=>p(k.currentTarget.checked)}),n.jsx(Hu,{value:d.func_content,onChange:_,disabled:!d.enabled}),n.jsxs(s.Group,{justify:"space-between",children:[n.jsx(s.Button,{onClick:x,color:"red",leftSection:n.jsx(C.IconRecycle,{size:20}),children:l("common.actions.reset_to_default")}),n.jsxs(s.Group,{justify:"flex-end",children:[n.jsx(s.Button,{onClick:v,variant:"subtle",children:l("common.actions.cancel")}),n.jsx(s.Button,{color:"green",leftSection:n.jsx(C.IconDeviceFloppy,{size:16}),onClick:f,children:l("common.actions.save")})]})]})]})})]})}),dt={x_axis_scroll:!1,y_axis_scroll:!1,x_axis_slider:!1,y_axis_slider:!1};function Xs(){return y.cloneDeep(dt)}const Ru=[{lang:"en",resources:{boxplot:{viz_name:"Boxplot Chart",box:"Box",outlier:"Outlier",scatter:"Scatter",click_series:{label:"Click box, scatter or outlier"}}}},{lang:"zh",resources:{boxplot:{viz_name:"箱线图",box:"箱体",outlier:"异常点",scatter:"散点",click_series:{label:"点击箱体、散点或异常点"}}}}],Zs={id:"builtin:echarts:click-echart:series",displayName:"viz.boxplot.click_series.label",nameRender:tp,configRender:ep,payload:[{name:"type",description:"Always 'click'",valueType:"string"},{name:"seriesType",description:"'boxplot'",valueType:"string"},{name:"name",description:"Name of the series clicked",valueType:"string"},{name:"color",description:"Color",valueType:"string"},{name:"value",description:"Record of 'name', 'min', 'q1', 'median', 'q3', 'max'",valueType:"object"},{name:"rowData",description:"Data of the row",valueType:"object"}]};function ep(e){return n.jsx(n.Fragment,{})}function tp(e){const{t}=m.useTranslation();return n.jsx(s.Text,{size:"sm",children:t("viz.boxplot.click_series.label")})}const Yt=g.forwardRef(({sectionTitle:e,value:t,onChange:r},a)=>{const{t:l,i18n:o}=m.useTranslation(),i=d=>u=>{const p=y.cloneDeep(t);y.set(p,d,u),r(p)},c=g.useMemo(()=>[{label:l("chart.axis.overflow.truncate"),value:"truncate"},{label:l("chart.axis.overflow.break_line"),value:"break"},{label:l("chart.axis.overflow.break_word"),value:"breakAll"}],[o.language]);return n.jsxs(s.Stack,{gap:0,children:[e&&n.jsx(s.Divider,{mb:-5,mt:5,variant:"dotted",label:e,labelPosition:"right",styles:{label:{color:"dimmed"}}}),n.jsxs(s.Group,{grow:!0,wrap:"nowrap",children:[n.jsx(s.NumberInput,{label:l("chart.axis.overflow.max_width"),hideControls:!0,value:t.width,onChange:i("width")}),n.jsx(s.Select,{label:l("chart.axis.overflow.label"),data:c,value:t.overflow,onChange:i("overflow")}),n.jsx(s.TextInput,{label:l("chart.axis.overflow.ellipsis"),value:t.ellipsis,disabled:!0})]})]})}),qe=g.forwardRef(({value:e,onChange:t},r)=>{const{t:a}=m.useTranslation(),l=i=>{t({...e,on_axis:i})},o=i=>{t({...e,in_tooltip:i})};return n.jsxs(s.Stack,{ref:r,gap:0,children:[n.jsx(Yt,{sectionTitle:a("chart.axis.overflow.section_title.on_axis"),value:e.on_axis,onChange:l}),n.jsx(Yt,{sectionTitle:a("chart.axis.overflow.section_title.in_tooltip"),value:e.in_tooltip,onChange:o})]})});function _e(){return{on_axis:{width:80,overflow:"truncate",ellipsis:"..."},in_tooltip:{width:200,overflow:"break",ellipsis:"..."}}}function Ie({overflow:e,width:t}){const r={truncate:"initial",break:"break-all",breakAll:"break-word"}[e],a=e==="truncate"?"nowrap":"initial",l={truncate:"ellipsis",break:"clip",breakAll:"clip"}[e];return`
|
|
56
56
|
max-width: ${t}px;
|
|
57
57
|
word-break: ${r};
|
|
@@ -461,7 +461,7 @@
|
|
|
461
461
|
SELECT count(*) AS total
|
|
462
462
|
FROM ${r}.${t}
|
|
463
463
|
`}})).actions(e=>({setPage(t){e.page=t},resetPage(){e.page=1},setLimit(t){e.limit=t}})).actions(e=>({afterCreate(){h.addDisposer(e,F.reaction(()=>e.keywordString,e.resetPage,{fireImmediately:!1,delay:0})),h.addDisposer(e,F.reaction(()=>e.limit,e.resetPage,{fireImmediately:!1,delay:0}))}})),nT=h.types.model({data:h.types.optional(h.types.frozen(),{}),state:h.types.optional(h.types.enumeration(["idle","loading","error"]),"idle"),error:h.types.frozen()}).views(e=>({get loading(){return e.state==="loading"},get empty(){return Object.keys(e.data).length===0}})),rT=h.types.model({tables:h.types.optional(nT,{}),columns:h.types.optional(RC,{}),tableData:h.types.optional(tT,{}),indexes:h.types.optional(eT,{}),table_schema:h.types.optional(h.types.string,""),table_name:h.types.optional(h.types.string,"")}).views(e=>({get dataSource(){return h.getParent(e)},get key(){return this.dataSource.key},get type(){return this.dataSource.type},get sqlDataSourceType(){return this.type},get reloadConditionString(){const t=this.type,{table_name:r,table_schema:a}=e;return`${t};${r};${a}`}})).volatile(()=>({controllers:{tables:new AbortController,columns:new AbortController,indexes:new AbortController,tableData:new AbortController}})).actions(e=>({setKeywords(t,r){e.table_schema=t,e.table_name=r}})).actions(e=>({initKeywords(){if(e.tables.empty)return;const t=Object.keys(e.tables.data)[0],r=e.tables.data[t][0].table_name;e.setKeywords(t,r)}})).actions(e=>{const t=h.flow(function*(){var r;(r=e.controllers.tables)==null||r.abort(),e.controllers.tables=new AbortController,e.tables.state="loading";try{const a=yield*h.toGenerator(Ce.structure(e.controllers.tables.signal)({query_type:"TABLES",type:e.sqlDataSourceType,key:e.key,table_schema:"",table_name:""},{params:{query_type:"TABLES"}}));e.tables.data=y.groupBy(a,"table_schema"),e.tables.state="idle",e.tables.error=null,e.initKeywords()}catch(a){if(!me.isCancel(a)){e.tables.data={};const l=y.get(a,"message","unkown error");e.tables.error=y.get(a,"response.data.detail.message",l),e.tables.state="error"}}});return{loadTables:t,loadTablesIfEmpty(){e.tables.empty&&t()},loadColumns:h.flow(function*(){var r;(r=e.controllers.columns)==null||r.abort(),e.controllers.columns=new AbortController,e.columns.state="loading";try{e.columns.data=yield*h.toGenerator(Ce.structure(e.controllers.columns.signal)({query_type:"COLUMNS",type:e.sqlDataSourceType,key:e.key,table_schema:e.table_schema,table_name:e.table_name},{params:{query_type:"COLUMNS"}})),e.columns.state="idle",e.columns.error=null}catch(a){if(me.isCancel(a))e.columns.state="idle",e.columns.error=null;else{e.columns.data=[];const l=y.get(a,"message","unkown error");e.columns.error=y.get(a,"response.data.detail.message",l),e.columns.state="error"}}}),loadIndexes:h.flow(function*(){var r;(r=e.controllers.indexes)==null||r.abort(),e.controllers.indexes=new AbortController,e.indexes.state="loading";try{e.indexes.data=yield*h.toGenerator(Ce.structure(e.controllers.indexes.signal)({query_type:"INDEXES",type:e.sqlDataSourceType,key:e.key,table_schema:e.table_schema,table_name:e.table_name},{params:{query_type:"INDEXES"}})),e.indexes.state="idle",e.indexes.error=null}catch(a){if(me.isCancel(a))e.indexes.state="idle",e.indexes.error=null;else{e.indexes.data=[];const l=y.get(a,"message","unkown error");e.indexes.error=y.get(a,"response.data.detail.message",l),e.indexes.state="error"}}}),loadTableData:h.flow(function*(){var a;(a=e.controllers.tableData)==null||a.abort(),e.controllers.tableData=new AbortController;const r=e.tableData;r.state="loading";try{r.data=yield*h.toGenerator(Ce.structure(e.controllers.tableData.signal)({query_type:"DATA",type:e.sqlDataSourceType,key:e.key,table_schema:e.table_schema,table_name:e.table_name,limit:r.limit,offset:r.offset},{params:{query_type:"DATA"}}));const[{total:l}]=yield*h.toGenerator(Ce.structure(e.controllers.tableData.signal)({query_type:"COUNT",type:e.sqlDataSourceType,key:e.key,table_schema:e.table_schema,table_name:e.table_name},{params:{query_type:"COUNT"}}));r.total=Number(l),r.state="idle",r.error=null}catch(l){if(me.isCancel(l))r.state="idle",r.error=null;else{r.data=[];const o=y.get(l,"message","unkown error");r.error=y.get(l,"response.data.detail.message",o),r.state="error"}}})}}).actions(e=>({afterCreate(){h.addDisposer(e,F.reaction(()=>e.reloadConditionString,e.loadColumns,{fireImmediately:!1,delay:500}))}})).actions(e=>({afterCreate(){h.addDisposer(e,F.reaction(()=>e.reloadConditionString,e.loadIndexes,{fireImmediately:!1,delay:500})),h.addDisposer(e,F.reaction(()=>`${e.reloadConditionString};limit:${e.tableData.limit};offset:${e.tableData.offset}`,e.loadTableData,{fireImmediately:!1,delay:0}))}})),Ti=new Set(["yoy_ratio","step_ratio","span_steps_calculation"]),Si={accumulate:"累计计算",yoy_ratio:"年同比率(yoy)",step_ratio:"环比率",span_steps_calculation:"移动计算",percentage_total:"总占"};function aT(e){var a;if("cols"in e){const{cols:l}=e,o=((a=l.find(c=>c.type==="trending_date_col"))==null?void 0:a.metricSourceCol)??null,i=Ti.has(e.calculation)?`当前指标涉及 ${y.get(Si,e.calculation,e.calculation)},缺少时序则无法展示有效结果。
|
|
464
|
-
`:"";return{filters:l.filter(c=>c.type==="filter").map(c=>c.metricSourceCol),groupBys:l.filter(c=>c.type==="group_by").map(c=>c.metricSourceCol),trendingDateCol:o,supportTrending:!!o,requireTrendingReason:i}}const t=y.uniq(e.derivedMetrics.map(l=>l.calculation)).filter(l=>Ti.has(l)).concat(["span_steps_calculation","step_ratio","yoy_ratio"]),r=e.supportTrending?`当前指标涉及 ${t.map(l=>y.get(Si,l,l)).join("、")},缺少时序则无法展示有效结果。`:"";return{filters:e.filters,groupBys:e.groupBys,trendingDateCol:null,supportTrending:e.supportTrending&&t.length>0,requireTrendingReason:r}}const ki={string:"维度列",number:"数值列",date:"数值列",boolean:"维度列",dimension:"扩展维度"};function zi(e){return y.groupBy(e,r=>{const{dataType:a}=r;return a?ki[a]:r.dimension!==null?ki.dimension:"ERROR"})}function sT(e){if(e.length===0)return[];const t=zi(e);return Object.entries(t).map(([a,l])=>({group:`${a}(${l.length})`,items:l.map(o=>{const{dataType:i,dimension:c}=o;return c?{group:o.name,description:o.description,items:c.fields.map(d=>({label:d.field,value:`${o.name} -> ${d.field}`,...d}))}:{label:o.name,value:o.name,...o}})}))}function lT(e){if(e.length===0)return[];const t=zi(e);return Object.entries(t).map(([a,l])=>({group:`${a}(${l.length})`,items:l.map(o=>({label:o.name,value:o.name,description:o.description,dataType:o.dataType??"dimension",dimension:o.dimension}))}))}function oT(e,t){if(!t)throw new Error("Shouldnt run query without ID");if(e==="derived")return`/buffet/api/metric_management/derived_metric/${t}`;if(e==="combined")return`/buffet/api/metric_management/combined_metric/${t}`;throw new Error(`Unexpected metric type[${e}]`)}const iT=h.types.model({data:h.types.optional(h.types.frozen(),null),filters:h.types.optional(h.types.frozen(),[]),groupBys:h.types.optional(h.types.frozen(),[]),trendingDateCol:h.types.optional(h.types.frozen(),null),supportTrending:h.types.optional(h.types.boolean,!1),requireTrendingReason:h.types.optional(h.types.string,""),state:h.types.optional(h.types.enumeration(["idle","loading","error"]),"idle"),error:h.types.frozen()}).volatile(()=>({controller:new AbortController})).views(e=>({get loading(){return e.state==="loading"},get hasData(){return e.data!==null},get mmInfo(){return h.getParent(e)},get metricID(){return this.mmInfo.metricID},get metric(){return this.mmInfo.metric},get metricType(){var t;return(t=this.metric)==null?void 0:t.type},get filterColOptions(){return sT(e.filters)},get groupByColOptions(){return lT(e.groupBys)},get flatGroupByColOptions(){const t=this.groupByColOptions,r=[];return t.forEach(({group:a,items:l})=>{r.push(...l)}),r},getGroupByOptions(t){const r=new Set(t);return this.flatGroupByColOptions.filter(a=>r.has(a.value))}})).actions(e=>({load:h.flow(function*(){var t;if(e.mmInfo.type===G.MericoMetricSystem&&!(!e.metricID||!e.metricType)){(t=e.controller)==null||t.abort(),e.controller=new AbortController,e.state="loading";try{const r=oT(e.metricType,e.metricID),a=Ft(e.mmInfo.dataSource,{url:r,method:"GET",data:{key:e.mmInfo.key}}),l=yield*h.toGenerator(Ce.mericoMetricInfo(e.controller.signal)({key:e.mmInfo.key,query:JSON.stringify(a),...e.mmInfo.additionalQueryInfo},e.controller.signal)),o=jt(e.mmInfo.dataSource,l),i=y.cloneDeep(o.data),{filters:c,groupBys:d,trendingDateCol:u,supportTrending:p,requireTrendingReason:f}=aT(o.data);e.data=i,e.filters=c,e.groupBys=d,e.supportTrending=p,e.requireTrendingReason=f,e.trendingDateCol=u,e.state="idle",e.error=null}catch(r){if(!me.isCancel(r)){e.data=null;const a=y.get(r,"message","unkown error");e.error=y.get(r,"response.data.detail.message",a),e.state="error"}}}})})).actions(e=>({afterCreate(){h.addDisposer(e,F.reaction(()=>e.metricID+e.metricType,e.load,{fireImmediately:!0,delay:0}))}})),cT=h.types.model({keyword:h.types.optional(h.types.string,""),data:h.types.optional(h.types.frozen(),[]),state:h.types.optional(h.types.enumeration(["idle","loading","error"]),"idle"),error:h.types.frozen()}).volatile(()=>({controller:new AbortController})).views(e=>({get loading(){return e.state==="loading"},get empty(){return Object.keys(e.data).length===0},get mmInfo(){return h.getParent(e)}})).actions(e=>({setKeyword(t){e.keyword=t}})).actions(e=>({load:h.flow(function*(){var t;if(e.mmInfo.type===G.MericoMetricSystem){(t=e.controller)==null||t.abort(),e.controller=new AbortController,e.state="loading";try{const r=Ft(e.mmInfo.dataSource,{url:"/buffet/api/metric_management/search",method:"POST",data:{key:e.mmInfo.key},params:{search:e.keyword}}),a=yield*h.toGenerator(Ce.mericoMetricInfo(e.controller.signal)({key:e.mmInfo.key,query:JSON.stringify(r),...e.mmInfo.additionalQueryInfo},e.controller.signal)),o=jt(e.mmInfo.dataSource,a).data;e.data=o,e.state="idle",e.error=null}catch(r){if(!me.isCancel(r)){e.data=[];const a=y.get(r,"message","unkown error");e.error=y.get(r,"response.data.detail.message",a),e.state="error"}}}})})).actions(e=>({afterCreate(){h.addDisposer(e,F.reaction(()=>`${e.mmInfo.type}:${e.keyword}`,e.load,{fireImmediately:!0,delay:0}))}})),dT=h.types.model({metrics:h.types.optional(cT,{}),metricDetail:h.types.optional(iT,{}),keyword:h.types.optional(h.types.string,""),metricID:h.types.optional(h.types.string,"")}).views(e=>({get rootModel(){return h.getRoot(e)},get contentModel(){return this.rootModel.content},get additionalQueryInfo(){return this.contentModel.getAdditionalQueryInfo("")},get dataSource(){return h.getParent(e)},get key(){return this.dataSource.key},get type(){return this.dataSource.type},get metric(){return e.metricID?e.metrics.data.find(t=>t.id===e.metricID)??null:null}})).actions(e=>({selectMetric(t){e.metricID=t}})),uT=h.types.compose("DataSourceModel",Jr,h.types.model({dbInfo:h.types.optional(rT,{}),mericoMetricInfo:h.types.optional(dT,{})})),pT=h.types.model("DataSourcesModel",{list:h.types.optional(h.types.array(uT),[])}).views(e=>({find({type:t,key:r}){return e.list.find(a=>a.key===r&&a.type===t)},get options(){return e.list.map(t=>({value:t.key,label:t.key}))}})).actions(e=>({replace(t){e.list.length=0,e.list.push(...t)}}));function hT(e){return e.length===1&&e[0]==="_QUERY_VARS_"}function gT(e){return e.length===1&&e[0]==="_MOCK_CONTEXT_"}function fT(e){return e.length===1&&e[0]==="_FILTERS_"}function bT(e){return e.length===2&&e[0]==="_FILTERS_"}function yT(e){return e.length===1&&e[0]==="_SQL_SNIPPETS_"}function vT(e){return e.length===2&&e[0]==="_SQL_SNIPPETS_"}function _T(e){return e.length===2&&e[0]==="_QUERIES_"}function xT(e){return e.length===1&&e[0]==="_QUERIES_"}function mT(e){return e.length===2&&e[0]==="_VIEWS_"}function ga(e){return e.length===6&&e[0]==="_VIEWS_"&&e[2]==="_PANELS_"}function ht(e){return{label:e,value:e,_type:"ACTION",_action_type:e,Icon:null,children:null}}function wT(e){switch(e._type){case"GROUP":case"ACTION":return null;case"query_variables":return["_QUERY_VARS_"];case"mock_context":return["_MOCK_CONTEXT_"];case"filter":return["_FILTERS_",e.value];case"sql_snippet":return["_SQL_SNIPPETS_",e.value];case"query":return["_QUERIES_",e.value];case"view":return["_VIEWS_",e.value];case"panel":return e.parentID?["_VIEWS_",e.parentID,"_PANELS_",e.value,"_TABS_","Data"]:(console.error("[getPathFromOption] parentID is required"),null)}}const CT=h.types.model("EditorModel",{path:h.types.optional(h.types.frozen(),[]),settings_open:h.types.optional(h.types.boolean,!1)}).views(e=>({get isPanelPath(){return ga(e.path)},get panelTab(){return this.isPanelPath?y.get(e.path,5,"Data"):null},get navOptions(){const{content:t}=h.getRoot(e),{filters:r,views:a,sqlSnippets:l,queries:o}=t;return[{label:"query_variable.labels",value:"_QUERY_VARS_",_type:"query_variables",Icon:C.IconVariable},{label:"mock_context.label",value:"_MOCK_CONTEXT_",Icon:C.IconCodeDots,_type:"mock_context"},{label:"filter.labels",value:"_FILTERS_",Icon:C.IconFilter,children:[ht("_FILTERS_SETTINGS_"),...r.options,ht("_Add_A_Filter_")],_type:"GROUP"},{label:"sql_snippet.labels",value:"_SQL_SNIPPETS_",Icon:C.IconCopy,children:[ht("_SQL_SNIPPETS_SETTINGS_"),...l.options,ht("_Add_A_SQL_SNIPPET_")],_type:"GROUP"},{label:"query.labels",value:"_QUERIES_",Icon:C.IconDatabase,children:[ht("_QUERIES_SETTINGS_"),...o.options,ht("_Add_A_QUERY_")],_type:"GROUP"},{label:"view.labels",value:"_VIEWS_",Icon:C.IconBoxMultiple,children:[...a.editorOptions,ht("_Add_A_VIEW_")],_type:"GROUP"}]},isOptionActive(t,r){return t.length===0?!1:ga(t)?t[3]===r.value:t[t.length-1]===r.value},isOptionOpened(t){const{path:r}=e;return r.length===0||!t.children||t.children.length===0?!1:r.includes(t.value)}})).actions(e=>({setPath(t){e.path=t},setSettingsOpen(t){e.settings_open=t},openAndSetPath(t){this.setPath(t),e.settings_open||(e.settings_open=!0)}})).actions(e=>({setPanelTab(t){if(!e.isPanelPath||e.panelTab===t||!t)return;const r=y.clone(e.path);r[5]=t,e.setPath(r)},open(t){e.setPath(t),e.setSettingsOpen(!0)},close(){e.setSettingsOpen(!1)},navigate(t){const r=wT(t);r&&e.setPath(r)}})).views(e=>({get spotlightActionGroups(){const{content:t}=h.getRoot(e),{filters:r,views:a,sqlSnippets:l,queries:o}=t,i={group:"spotlight.main_group",actions:[{id:"query_variable.labels",title:"query_variable.labels",onClick:()=>e.openAndSetPath(["_QUERY_VARS_"]),iconKey:"query_variables"},{id:"mock_context.label",title:"mock_context.label",onClick:()=>e.openAndSetPath(["_MOCK_CONTEXT_"]),iconKey:"mock_context"},{id:"filter.labels",title:"filter.labels",onClick:()=>e.openAndSetPath(["_FILTERS_"]),iconKey:"filter"},{id:"sql_snippet.labels",title:"sql_snippet.labels",onClick:()=>e.openAndSetPath(["_SQL_SNIPPETS_"]),iconKey:"sql_snippet"},{id:"query.labels",title:"query.labels",onClick:()=>e.openAndSetPath(["_QUERIES_"]),iconKey:"query"}]},c={group:"filter.labels",actions:[]};r.options.forEach(f=>{c.actions.push({id:`_FILTERS_.${f.value}`,title:f.label,onClick:()=>e.openAndSetPath(["_FILTERS_",f.value]),iconKey:"filter"})});const d={group:"sql_snippet.labels",actions:[]};l.options.forEach(f=>{d.actions.push({id:`_SQL_SNIPPETS_.${f.value}`,title:f.label,onClick:()=>e.openAndSetPath(["_SQL_SNIPPETS_",f.value]),iconKey:"sql_snippet"})});const u={group:"query.labels",actions:[]};o.options.forEach(f=>{u.actions.push({id:`_QUERIES_.${f.value}`,title:f.label,onClick:()=>e.openAndSetPath(["_QUERIES_",f.value]),iconKey:"query"})});const p=[i,c,d,u];return a.editorOptions.forEach(f=>{const v={group:f.label,actions:[]};v.actions.push({id:`_VIEWS_.${f.value}`,title:f.label,onClick:()=>e.openAndSetPath(["_VIEWS_",f.value]),iconKey:"view",group:f.label}),f.children.forEach(_=>{_._type!=="ACTION"&&v.actions.push({id:`_VIEWS_._PANELS_.${_.value}`,title:_.label,viz:_.viz,onClick:()=>e.openAndSetPath(["_VIEWS_",f.value,"_PANELS_",_.value,"_TABS_","Panel"]),iconKey:"panel",group:f.label})}),p.push(v)}),p}})),TT=h.types.compose("LayoutsModel",ia,h.types.model({currentLayoutWrapperWidth:h.types.optional(h.types.number,0)})).views(e=>({get divisionPreviewScale(){const t=e.currentLayoutPreviewWidth,r=e.currentLayoutWrapperWidth;return!t||!r||t<=r?1:r/t}})).actions(e=>({addALayoutItem(t){e.list.forEach(r=>{r.addNewLayout(t)})},duplicateLayoutItemsByPanelID(t,r){e.list.forEach(a=>{const l=a.findByPanelID(t);if(!l){console.error(`Can't find a layout item by panelID[${t}] in layoutSet[${a.name}]`);return}a.list.push({...l,id:Ne.v4(),panelID:r,y:1/0})})},removeByPanelID(t){e.list.forEach(r=>{r.removeByPanelID(t)})},removeByPanelIDs(t){e.list.forEach(r=>{r.removeByPanelIDs(t)})},setCurrentLayoutWrapperWidth(t){e.currentLayoutWrapperWidth=t},addALayoutSet(t,r,a){const l=e.basisLayoutSet,o={id:t,name:r,breakpoint:a,list:l.json.list.map(i=>({...i,id:Ne.v4()}))};e.list.push(o)},updateLayoutSetsInfo(t){const r=y.keyBy(e.list,"id");t.forEach(o=>{const i=r[o.id];if(i){i.setName(o.name),i.setBreakpoint(o.breakpoint),delete r[o.id];return}this.addALayoutSet(o.id,o.name,o.breakpoint)});const a=new Set(Object.keys(r)),l=a.size>0;a.forEach(o=>{const i=e.list.findIndex(c=>c.id===o);e.list.splice(i,1)}),l&&e.setCurrentBreakpoint("basis")},updateCurrentLayoutItem(t){e.currentLayoutSet.updateLayoutItem(t)},updateCurrentLayoutItems(t){t.forEach(r=>{e.currentLayoutSet.updateLayoutItem(r)})},append(t){e.list.push(t)},appendMultiple(t){t.length!==0&&e.list.push(...t)},remove(t){e.list.splice(t,1)},removeByID(t){const r=e.list.findIndex(a=>a.id===t);r!==-1&&e.list.splice(r,1)},removeByIDs(t){t.forEach(r=>{this.removeByID(r)})}})),Di=na.views(e=>({get realDataFieldOptions(){return e.queryIDs.length===0?[]:e.queries.map(t=>{const r=t.data;return r.length===0?[]:Object.keys(r[0]).map(l=>({label:l,value:`${t.id}.${l}`,group:t.name,group_id:t.id,disabled:!1}))}).flat()},get realQueryOptions(){return e.queryIDs.length===0?[]:e.queries.map(t=>({label:t.name,value:t.id,disabled:!1}))},queryOptions(t,r){const a=[...this.realQueryOptions];return t&&!a.find(l=>l.value===t)&&a.unshift({label:t,value:t,disabled:!0}),r&&a.unshift({label:"unset",value:"",disabled:!1}),a},get realVariableOptions(){const t=e.variableValueMap;return Object.entries(e.variableAggValueMap).map(([r,a])=>({label:r,value:r,formattedValue:t[r],aggValue:a,disabled:!1}))},variableOptions(t,r){const a=[...this.realVariableOptions];return t&&!a.find(l=>l.value===t)&&a.unshift({label:t,value:t,formattedValue:"",aggValue:"",disabled:!0}),r&&a.unshift({label:"unset",value:"",formattedValue:"",aggValue:"",disabled:!1}),a},dataFieldOptions(t,r,a){let l=[...this.realDataFieldOptions];if(a&&(l=l.filter(o=>o.group_id===a)),t&&!l.find(o=>o.value===t)){const o=A(t),i=e.queryByID(o.queryID);l.unshift({label:o.columnKey,value:t,group:i?i.name:o.queryID,group_id:i?i.id:"",disabled:!0})}return r&&l.unshift({label:"unset",value:"",group:"",group_id:"",disabled:!1}),l},dataFieldOptionGroups(t,r,a){const l=this.dataFieldOptions(t,r,a);return Object.entries(y.groupBy(l,"group")).map(([i,c])=>({group:i,items:c.map(d=>({label:d.label,value:d.value,group_id:d.group_id,disabled:d.disabled}))}))},explainDataKey(t){const{queryID:r,columnKey:a}=A(t),l=e.queries.find(o=>o.id===r);return l?{queryID:r,queryName:l.name,columnKey:a}:{queryID:r,queryName:null,columnKey:a}}})).actions(e=>({removeSelf(){h.getParent(e,2).removeByID(e.id)}})).actions(e=>({moveToView(t,r){h.getRoot(e).content.views.findByID(t).removePanelID(e.id),h.getRoot(e).content.views.findByID(r).appendPanelID(e.id),h.getRoot(e).editor.setPath(["_VIEWS_",r,"_PANELS_",e.id])}})),Ii=h.types.compose("PanelsModel",ra,h.types.model({list:h.types.optional(h.types.array(Di),[])})).views(e=>({get contentModel(){return h.getRoot(e).content},editorOptions(t,r){const a=e.panelsByIDs(r);a.length!==r.length&&console.warn(`Unfulfilled panels for View[${t}]`);const l=a.map(i=>({label:i.name,value:i.id,_type:"panel",parentID:t,viz:S1[i.viz.type]})),o="_Add_A_PANEL_";return l.push({label:o,value:o,_type:"ACTION",_action_type:o,parentID:t,Icon:null,children:null}),l}})).actions(e=>({replace(t){e.list=h.castToSnapshot(t)},append(t){e.list.push(t)},appendMultiple(t){t.length!==0&&e.list.push(...t)},remove(t){e.list.splice(t,1)},removeByID(t){const r=e.list.findIndex(a=>a.id===t);r!==-1&&e.list.splice(r,1)},removeByIDs(t){t.forEach(r=>{this.removeByID(r)})},duplicateByID(t){const r=e.list.find(l=>l.id===t);if(!r){console.error(new Error(`[duplicate panel] Can't find a panel by id[${t}]`));return}const a=new Date().getTime().toString();return e.list.push({...r.json,id:a,title:{...r.json.title}}),e.contentModel.layouts.duplicateLayoutItemsByPanelID(r.id,a),a},replaceByIndex(t,r){e.list.splice(t,1,r)}})),ST=ea.actions(e=>({getSchema(){const t=e.json,r=[],a=[];e.panels.forEach(i=>{const c=i.getSchema();r.push(c.panel),c.queries.length>0&&a.push(...c.queries)});const l=e.contentModel.layouts.jsonByPanelIDSet(new Set(e.panelIDs));return{views:[t],panels:r,definition:{queries:y.uniqBy(a,i=>i.id)},layouts:l,version:Je}},downloadSchema(){if(e.type===$.Tabs){console.error(new Error("Please choose a tab first"));return}const t=JSON.stringify(this.getSchema(),null,2),r=e.name;St(r,t)}})),Mi=h.types.compose("ViewsModel",ta,h.types.model({current:h.types.optional(h.types.array(ST),[]),idOfVIE:h.types.string})).views(e=>({get isVIETheFirstView(){return e.current.length===0||!e.idOfVIE?!1:e.current[0].id===e.idOfVIE},get VIE(){return e.current.find(({id:t})=>t===e.idOfVIE)},get options(){return e.current.map(t=>({label:t.name,value:t.id,type:t.type}))},get editorOptions(){const t=h.getRoot(e).content.panels;return e.current.map(r=>({label:r.name,value:r.id,_type:"view",children:t.editorOptions(r.id,r.panelIDs)}))},get contentModel(){return h.getRoot(e).content}})).actions(e=>({setIDOfVIE(t){e.idOfVIE=t,e.visibleViewIDs.length=0,e.visibleViewIDs.push(t)},resetIDOfVIE(){this.setIDOfVIE(e.current[0].id)},replace(t){e.current.replace(t)},addANewView(t,r,a,l){e.current.push({id:t,name:r,type:a,config:l,panelIDs:[]})},append(t){e.current.push(t)},appendMultiple(t){t.length!==0&&e.current.push(...t)},remove(t){e.current.splice(t,1)},removeByID(t){const r=e.current.findIndex(i=>i.id===t);if(r===-1)return;const a=e.current[r],l=e.contentModel.panels,o=e.contentModel.layouts;l.removeByIDs(a.panelIDs),o.removeByPanelIDs(a.panelIDs),e.current.splice(r,1),this.resetIDOfVIE()},replaceByIndex(t,r){e.current.splice(t,1,r)},addARandomNewView(){const t=new Date().getTime().toString();this.addANewView(t,$.Division,$.Division,{_name:$.Division}),this.setIDOfVIE(t)},removeVIE(){e.current.length!==1&&(this.removeByID(e.idOfVIE),this.resetIDOfVIE())}}));function fa(e){const t=e.length>0?[e[0].id]:[],r=e.length>0?e[0].id:"";return{current:e.map(l=>{const{_name:o=l.type}=l.config;return{...l,config:{...l.config,_name:o},panelIDs:l.panelIDs}}),visibleViewIDs:t,idOfVIE:r}}const kT=h.types.model({id:h.types.string,name:h.types.string,dashboard_id:h.types.string,create_time:h.types.string,update_time:h.types.string,version:h.types.string,filters:xi,queries:wi,sqlSnippets:Ci,views:Mi,panels:Ii,layouts:TT,mock_context:$r,origin:h.types.maybe(h.types.frozen())}).views(e=>({get json(){return{id:e.id,name:e.name,create_time:e.create_time,update_time:e.update_time,dashboard_id:e.dashboard_id,content:{views:e.views.json,panels:e.panels.json,filters:e.filters.json,version:e.version,layouts:e.layouts.json,definition:{queries:e.queries.json,sqlSnippets:e.sqlSnippets.json,mock_context:e.mock_context.current}}}},get contentJSON(){return this.json.content},get filtersChanged(){const t="filters.current";return!y.isEqual(h.getSnapshot(y.get(e,t)),y.get(e.origin,t))},get queriesChanged(){const t="queries.current",r=h.getSnapshot(y.get(e,t)).map(l=>y.pick(l,["id","name","key","type","run_by","pre_process","post_process","config"])),a=y.get(e.origin,t);return!y.isEqual(r,a)},get sqlSnippetsChanged(){const t="sqlSnippets.current";return!y.isEqual(h.getSnapshot(y.get(e,t)),y.get(e.origin,t))},get viewsChanged(){const t="views.current";return!y.isEqual(e.views.json,y.get(e.origin,t))},get panelsChanged(){const t="panels.list";return!y.isEqual(h.getSnapshot(y.get(e,t)),y.get(e.origin,t))},get layoutsChanged(){const t="layouts.list";return!y.isEqual(h.getSnapshot(y.get(e,t)),y.get(e.origin,t))},get mockContextChanged(){const t="mock_context.current";return!y.isEqual(y.get(e,t),y.get(e.origin,t))},get context(){const t=h.getParent(e).context.current;return{...e.mock_context.current,...t}},get payloadForSQL(){const t=h.getParent(e).globalSQLSnippets,r={context:this.context,filters:e.filters.valuesForPayload};return{...r,sql_snippets:Pt(e.sqlSnippets.current,"key","value",r),global_sql_snippets:Pt(t.list,"id","content",r)}},get payloadForViz(){const t=h.getParent(e).context.current;return{context:{...e.mock_context.current,...t},filters:e.filters.valuesForPayload}},get dashboardState(){return Un(this.payloadForSQL)},getAdditionalQueryInfo(t){return{content_id:e.id,query_id:t,params:this.dashboardState}},get changed(){return this.filtersChanged||this.queriesChanged||this.sqlSnippetsChanged||this.viewsChanged||this.panelsChanged||this.layoutsChanged||this.mockContextChanged},get data(){return e.queries.current.map(({id:r,data:a})=>({id:r,data:a})).reduce((r,a)=>(r[a.id]=a.data,r),{})},getDataStuffByID(t){const r=e.queries.findByID(t);return r?{data:r.data,len:r.data.length,state:r.state,error:r.error}:{data:[],len:0,state:"idle",error:void 0}}})).views(e=>({get queriesUsage(){const t=e.panels.idMap,r=[];e.views.current.forEach(l=>{l.panelIDs.forEach(o=>{const i=t.get(o);if(!i)return;const c="panel",d=i.name,u=[{id:l.id,label:l.name}];i.queryIDs.forEach(p=>{r.push({id:o,queryID:p,type:c,type_label:"panel.label",label:d,views:u})})})});const a=e.views.idMap;return e.filters.current.filter(l=>!!y.get(l,"config.options_query_id")).forEach(l=>{r.push({type:"filter",type_label:"filter.label",id:l.id,queryID:y.get(l,"config.options_query_id"),label:l.label,views:l.visibleInViewsIDs.map(o=>{var i;return{id:o,label:((i=a.get(o))==null?void 0:i.name)??o}})})}),e.queries.current.forEach(l=>{if(!l.isTransform)return;l.config.dep_query_ids.forEach(i=>{r.push({type:"transform-query",type_label:"query.transform.full_label",id:l.id,queryID:i,label:l.name,views:[]})})}),y.groupBy(r,"queryID")},get hasUnusedQueries(){return e.queries.current.length>Object.keys(this.queriesUsage).length},findQueryUsage(t){return this.queriesUsage[t]??[]},get sqlSnippetsUsage(){const t=[];return e.queries.current.forEach(r=>{if(!r.typedAsSQL)return;const a=r.config;y.uniq(a.sql.match(Qt.sqlSnippet)).forEach(o=>{t.push({queryID:r.id,sqlSnippetKey:o,queryName:r.name})})}),y.groupBy(t,"sqlSnippetKey")},get hasUnusedSQLSnippets(){return e.sqlSnippets.current.length>Object.keys(this.sqlSnippetsUsage).length},findSQLSnippetUsage(t){return this.sqlSnippetsUsage[t]??[]}})).actions(e=>({removeUnusedQueries(){const t=new Set(Object.keys(e.queriesUsage)),r=e.queries.current.filter(a=>!t.has(a.id)).map(a=>a.id);e.queries.removeQueries(r)},removeUnusedSQLSnippets(){const t=new Set(Object.keys(e.sqlSnippetsUsage)),r=e.sqlSnippets.current.filter(a=>!t.has(a.key)).map(a=>a.key);e.sqlSnippets.removeByKeys(r)},duplicatePanelByID(t,r){var l;const a=e.panels.duplicateByID(t);a&&((l=e.views.findByID(r))==null||l.appendPanelID(a))},removePanelByID(t,r){var a;e.panels.removeByID(t),e.layouts.removeByPanelID(t),(a=e.views.findByID(r))==null||a.removePanelID(t)},addANewPanel(t){var a;const r=Ne.v4();e.panels.append(Fo(r)),(a=e.views.findByID(t))==null||a.appendPanelID(r),e.layouts.addALayoutItem(r)},applyJSONSchema(t){var f;const{views:r,panels:a,filters:l,definition:o={},layouts:i}=t,{queries:c,sqlSnippets:d,mock_context:u}=o,p=new Map;if(Array.isArray(a)){const v=a.map(_=>{const x=Ne.v4();return p.set(_.id,x),{..._,id:x}});if(e.panels.appendMultiple(v),!Array.isArray(r)||r.length===0){const _=v.map(x=>x.id);(f=e.views.VIE)==null||f.appendPanelIDs(_)}}if(Array.isArray(r)){const v=r.map(_=>{const x=_.panelIDs.map(T=>p.get(T)??T);return{..._,id:Ne.v4(),panelIDs:x}});e.views.appendMultiple(v)}if(Array.isArray(i)){const v=(T,k)=>e.layouts.breakpointNameRecord[T]===k;let _=[];const x=i.filter(T=>v(T.name,T.breakpoint));x.forEach(T=>{T.id==="basis"&&(_=T.list),T.list.forEach(k=>{const z=p.get(k.panelID);k.id=Ne.v4(),k.panelID=z})}),e.layouts.list.forEach(T=>{const k=x.find(z=>z.name===T.name&&z.breakpoint===T.breakpoint);if(!k){_.forEach(z=>{T.addLayout(z)});return}k.list.forEach(z=>{T.addLayout(z)})})}Array.isArray(l)&&e.filters.appendMultiple(l),Array.isArray(c)&&e.queries.appendMultiple(c),Array.isArray(d)&&e.sqlSnippets.appendMultiple(d),u&&Object.keys(u).length>0&&e.mock_context.defaults(u)}})).actions(e=>({reset(){h.applySnapshot(e.filters.current,e.origin.filters.current),h.applySnapshot(e.queries.current,e.origin.queries.current),h.applySnapshot(e.sqlSnippets.current,e.origin.sqlSnippets.current),h.applySnapshot(e.views.current,e.origin.views.current),h.applySnapshot(e.panels.list,e.origin.panels.list),h.applySnapshot(e.layouts.list,e.origin.layouts.list),e.mock_context.current=e.origin.mock_context.current},resetFilters(){h.applySnapshot(e.filters.current,e.origin.filters.current)},updateCurrent(t){const{id:r,name:a,content:l}=t;if(!l)throw new Error("unexpected null content when updating a content model");const{version:o,filters:i,views:c,panels:d,definition:{queries:u,sqlSnippets:p,mock_context:f={}}}=l;e.id=r,e.name=a,e.version=o,h.applySnapshot(e.filters.current,i),h.applySnapshot(e.views.current,fa(c).current),h.applySnapshot(e.panels.list,d),h.applySnapshot(e.queries.current,u),h.applySnapshot(e.sqlSnippets.current,p),e.mock_context.current=f}})),ba=h.types.snapshotProcessor(kT,{preProcessor(e){return{...e,origin:e}},postProcessor(e){delete e.origin;const t=h.castToSnapshot(e.queries.current.map(r=>y.pick(r,["id","key","type","sql"])));return y.defaults({},{queries:{current:t}},e)}});function zT(e,t){t.filters&&h.applySnapshot(e.filters.current,t.filters)}function Ai({id:e,name:t,dashboard_id:r,create_time:a,update_time:l,content:o},i,c){if(!o)throw new Error("unexpected null content when creating a content model");const{version:d,filters:u,views:p,panels:f,layouts:v,definition:{queries:_,sqlSnippets:x,mock_context:T={}}}=o;return ba.create({id:e,name:t,dashboard_id:r,create_time:a,update_time:l,version:d,filters:sa(u,i,T,c),queries:{current:_},sqlSnippets:{current:x},mock_context:Vr(T),views:fa(p),panels:{list:f},layouts:{list:v,currentBreakpoint:v[0].id}})}const Pi=h.types.model({id:h.types.identifier,name:h.types.string,group:h.types.string,content:ba,content_id:h.types.string,datasources:pT,globalSQLSnippets:Hr,context:un,editor:CT}).views(e=>({get json(){return{id:e.id,name:e.name,group:e.group,content_id:e.content_id}},get queryVariables(){return{context:{...e.content.mock_context.current,...e.context.current},filters:e.content.filters.previewValues}},get queryVariablesString(){return JSON.stringify(this.queryVariables,null,2)}})).actions(e=>({updateCurrentContent(t){e.content.updateCurrent(t)},updateCurrent(t,r){const{id:a,name:l,group:o,content_id:i}=t;e.id=a,e.name=l,e.group=o,e.content_id=i,this.updateCurrentContent(r)}}));function $i({id:e,name:t,group:r,content_id:a},l,o,i,c,d){return Pi.create({id:e,name:t,group:r,content_id:a,content:Ai(l,c,d),datasources:{list:o},globalSQLSnippets:{list:i},context:Rr(c),editor:{}})}const DT={translation:{filter:{label:"Filter",labels:"Filters",add:"Add a Filter",manage:"Manage Filters",delete:"Delete this filter",show_filters:"Show Filters",hide_filters:"Hide Filters",field:{widget:"Widget",visible_in:"Visible in...",key_placeholder:"A unique key to refer",label_placeholder:"Label for this field",auto_submit:"Submit automatically",order:"Placement Order",custom_default_value:{trigger:"Custom default value",title:"Custom default value",tips:"Tips",tip_1:"Function has the highest priority of getting filter's default value",tip_2:"Leave this editor empty to disable this feature"}},widget:{names:{select:"Select",multi_select:"Multi Select",tree_select:"Tree Select",tree_single_select:"Tree Single Select",text_input:"Text Input",checkbox:"Checkbox",date_range:"Date Range"},common:{use_query_data_as_options:"Use query data as options",fetch_options_from_datasource:"Fetch options from datasource",or_fetch_options_from_datasource:"Or fetch options from datasource",selector_option_empty:"Not found",see_data_structure:"Click to see expected data structure",using_query:"Using query",default_selection_count:"Select first N options by default",min_width:"Min width",x_selected:"{{count}} selected"},text_input:{default_value:"Default Value",required:"Required"},select:{width:"Width",required:"Required",clearable:"Clearable",configure_options:"Configure options",default_selection:"Default Selection",no_default_selection:"none",select_first_option_by_default:"Select the first option by default",preset_options:{apply:"Apply preset options",date_unit:"Date units"}},multi_select:{width_description:"At least 160px"},tree_select:{strictly:"Parent and children nodes are not associated"},tree_single_select:{select_first_option_by_default:"Select the first option by default"},checkbox:{description:"Description",default_checked:"Default checked"},date_range:{required:"Required",allow_single_date:"Allow choosing 1 day",display_format:"Display format",max_days:"Max days",one_day:"1 day",x_days:"{{count}} days",x_max_days:"{{max_days}} days max",default_value:"Default value",default_by_shortcut:"Default by shortcut",default_by_shortcut_placeholder:"Priors default value",start_date:"Start date",end_date:"End date",shortcut:{last:{label:"last",d:"yesterday",w:"week",m:"month",m2:"2 months",m3:"3 months",y:"year",full:{d:"yesterday",w:"last week",m:"last month",m2:"last 2 months",m3:"last 3 months",y:"last year"}},recent:{label:"recent",d7:"7 days",d30:"30 days",d60:"60 days",d90:"90 days",d180:"180 days",d365:"365 days",full:{d7:"recent 7 days",d30:"recent 30 days",d60:"recent 60 days",d90:"recent 90 days",d180:"recent 180 days",d365:"recent 365 days"}},this:{label:"this",d:"today",w:"week",m:"month",y:"year",full:{d:"today",w:"this week",m:"this month",y:"this year"}},this_so_far:{label:"this...so far",w:"week",m:"month",y:"year",full:{w:"this week so far",m:"this month so far",y:"this year so far"}}}}}},view:{label:"View",labels:"Views",add:"Add a View",delete:"Delete this View",download_schema:"Download this View",component:{div:{label:"Division"},tabs:{label:"Tabs",tabs_settings:"Tabs Settings",tab:{name:"Tab Name",view:"View",order:"Placement Order",color:"Color",delete:"Delete this tab",switch_to_view:"Swith to View: {{name}}"}},modal:{label:"Modal",modal_settings:"Modal settings",title:"Modal Title",custom_title:"Customize modal title",width:"Width",height:"Height"}}},interactions:{label:"Interactions",add:"Add an interaction",interactions_viewer:"Interactions Viewer",unavailable:"Unavailable",unavailable_reason:"This visualization does not have available interactions to choose from",trigger:{setup:"Setup Trigger",label:"Trigger",payload:"Payload"},operation:{setup:"Operation Settings",label:"Operation",settings:"Settings",variables:"Variables",console_log:{label:"console.log | debug",log_content:"log content"},open_link:{label:"Open Link",url:"URL",open_in_new_tab:"Open in new tab"},open_view:{label:"Open View",view:"View"},set_filter_values:{label:"Set Filter Values",set_filter:"Set filter",with:"with"},clear_filter_values:{label:"Clear Filter Values",select_filter:"Select filters to clear"}}},query_variable:{label:"Query Variable",labels:"Query Variables",add:"Add a Variable",guide:{tabs:{guide:"Guide",variables_in_this_dashboard:"Variables in this dashboard",global_sql_snippets:"Global SQL Snippets"}},open:"See Query Variables"},sql_snippet:{label:"SQL Snippet",labels:"SQL Snippets",add:"Add a SQL Snippet",delete:"Delete this SQL Snippet",delete_unused:"Delete unused SQL Snippets",manage:"Manage SQL Snippets",key:"Key",key_occupied:"This key is occupied by another snippet",edit_snippet:"Edit SQL Snippet",preview_snippet:"Preview SQL Snippet",usage:{label:"Usage"}},global_sql_snippet:{label:"Global SQL Snippet",labels:"Global SQL Snippets",description:"SQL snippets worth sharing between dashboards are managed in System Settings by admins."},common:{titles:{settings:"Settings",edit:"Edit",config:"Config"},pagination:{label:"Pagination",page_size:"Page Size",total:"Total",total_rows:"Total {{total}} row(s)"},align:{horizontal:{label:"Horizontal Align",left:"left",center:"center",right:"right"},vertical:{label:"Vertical Align",top:"top",center:"center",bottom:"bottom"}},id:"ID",name:"Name",key:"Key",label:"Label",value:"Value",type:"Type",info:"Info",min:"Min",max:"Max",invalid:"Invalid",data_field:"Data Field",name_data_field:"Name Data Field",value_data_field:"Value Data Field",color_data_field:"Color Data Field",enabled:"Enabled",copied:"Copied to clipboard",action:"Action",actions:{actions:"Actions",open:"Open",close:"Close",save:"Save",save_changes:"Save Changes",revert:"Revert",revert_changes:"Revert Changes",reset_to_default:"Reset to default",init_with_default:"Init with default",select_all:"Select All",clear:"Clear",clear_selection:"Clear Selection",refresh:"Refresh",download_data:"Download Data",download_schema:"Download Schema",download_screenshot:"Screenshot",enter_fullscreen:"Full Screen",duplicate:"Duplicate",delete:"Delete",cancel:"Cancel",confirm:"Confirm",add_an_option:"Add an Option",edit:"Edit",end_editing:"End editing <0>{{name}}</0>"},tabs:{variant:{label:"Variant",default:"Default",outline:"Outline",pills:"Pills"},orientation:{label:"Orientation",horizontal:"Horizontal",vertical:"Vertical"},grow_tabs:"Grow Tabs"},choose_a_tab_first:"Please choose a tab first"},breakpoint:{label_one:"Screen size",label_other:"Screen sizes",add:"Add a screen size",manage:"Manage screen sizes",breakpoint:"Min Width"},context:{label:"Context"},mock_context:{label:"Mock Context",hint:"A valid json string is required"},panel:{label:"Panel",labels:"Panels",add:"Add a Panel",delete:"Delete This Panel",panel_name:"Panel Name",panel_description:"Description",panel_description_click:"Click to see description",show_title:"Show title",use_name_as_title:"Use name as title",settings:{change_view:"Move into Another View",change_view_title:"Move panel into another view",choose_queries:"Choose queries",need_to_choose_queries:"Choose at least 1 query for its data"},style:{label:"Style",width:"Width",width_postfix:"of 36 columns",height:"Height",height_postfix:"px",border:"Border"},variable:{label:"Variable",labels:"Variables",add:"Add a Variable",delete:"Delete this Variable",aggregation:{label:"Aggregation",fallback_value:"Fallback Value",fallback_value_description:"Used when data is empty or the aggregation yields NaN"},guide:{text:`-- You may reference dashboard state & panel variables in rich-text content or custom functions.
|
|
464
|
+
`:"";return{filters:l.filter(c=>c.type==="filter").map(c=>c.metricSourceCol),groupBys:l.filter(c=>c.type==="group_by").map(c=>c.metricSourceCol),trendingDateCol:o,supportTrending:!!o,requireTrendingReason:i}}const t=y.uniq(e.derivedMetrics.map(l=>l.calculation)).filter(l=>Ti.has(l)),r=e.supportTrending?`当前指标涉及 ${t.map(l=>y.get(Si,l,l)).join("、")},缺少时序则无法展示有效结果。`:"";return{filters:e.filters,groupBys:e.groupBys,trendingDateCol:null,supportTrending:e.supportTrending&&t.length>0,requireTrendingReason:r}}const ki={string:"维度列",number:"数值列",date:"数值列",boolean:"维度列",dimension:"扩展维度"};function zi(e){return y.groupBy(e,r=>{const{dataType:a}=r;return a?ki[a]:r.dimension!==null?ki.dimension:"ERROR"})}function sT(e){if(e.length===0)return[];const t=zi(e);return Object.entries(t).map(([a,l])=>({group:`${a}(${l.length})`,items:l.map(o=>{const{dataType:i,dimension:c}=o;return c?{group:o.name,description:o.description,items:c.fields.map(d=>({label:d.field,value:`${o.name} -> ${d.field}`,...d}))}:{label:o.name,value:o.name,...o}})}))}function lT(e){if(e.length===0)return[];const t=zi(e);return Object.entries(t).map(([a,l])=>({group:`${a}(${l.length})`,items:l.map(o=>({label:o.name,value:o.name,description:o.description,dataType:o.dataType??"dimension",dimension:o.dimension}))}))}function oT(e,t){if(!t)throw new Error("Shouldnt run query without ID");if(e==="derived")return`/buffet/api/metric_management/derived_metric/${t}`;if(e==="combined")return`/buffet/api/metric_management/combined_metric/${t}`;throw new Error(`Unexpected metric type[${e}]`)}const iT=h.types.model({data:h.types.optional(h.types.frozen(),null),filters:h.types.optional(h.types.frozen(),[]),groupBys:h.types.optional(h.types.frozen(),[]),trendingDateCol:h.types.optional(h.types.frozen(),null),supportTrending:h.types.optional(h.types.boolean,!1),requireTrendingReason:h.types.optional(h.types.string,""),state:h.types.optional(h.types.enumeration(["idle","loading","error"]),"idle"),error:h.types.frozen()}).volatile(()=>({controller:new AbortController})).views(e=>({get loading(){return e.state==="loading"},get hasData(){return e.data!==null},get mmInfo(){return h.getParent(e)},get metricID(){return this.mmInfo.metricID},get metric(){return this.mmInfo.metric},get metricType(){var t;return(t=this.metric)==null?void 0:t.type},get filterColOptions(){return sT(e.filters)},get groupByColOptions(){return lT(e.groupBys)},get flatGroupByColOptions(){const t=this.groupByColOptions,r=[];return t.forEach(({group:a,items:l})=>{r.push(...l)}),r},getGroupByOptions(t){const r=new Set(t);return this.flatGroupByColOptions.filter(a=>r.has(a.value))}})).actions(e=>({load:h.flow(function*(){var t;if(e.mmInfo.type===G.MericoMetricSystem&&!(!e.metricID||!e.metricType)){(t=e.controller)==null||t.abort(),e.controller=new AbortController,e.state="loading";try{const r=oT(e.metricType,e.metricID),a=Ft(e.mmInfo.dataSource,{url:r,method:"GET",data:{key:e.mmInfo.key}}),l=yield*h.toGenerator(Ce.mericoMetricInfo(e.controller.signal)({key:e.mmInfo.key,query:JSON.stringify(a),...e.mmInfo.additionalQueryInfo},e.controller.signal)),o=jt(e.mmInfo.dataSource,l),i=y.cloneDeep(o.data),{filters:c,groupBys:d,trendingDateCol:u,supportTrending:p,requireTrendingReason:f}=aT(o.data);e.data=i,e.filters=c,e.groupBys=d,e.supportTrending=p,e.requireTrendingReason=f,e.trendingDateCol=u,e.state="idle",e.error=null}catch(r){if(!me.isCancel(r)){e.data=null;const a=y.get(r,"message","unkown error");e.error=y.get(r,"response.data.detail.message",a),e.state="error"}}}})})).actions(e=>({afterCreate(){h.addDisposer(e,F.reaction(()=>e.metricID+e.metricType,e.load,{fireImmediately:!0,delay:0}))}})),cT=h.types.model({keyword:h.types.optional(h.types.string,""),data:h.types.optional(h.types.frozen(),[]),state:h.types.optional(h.types.enumeration(["idle","loading","error"]),"idle"),error:h.types.frozen()}).volatile(()=>({controller:new AbortController})).views(e=>({get loading(){return e.state==="loading"},get empty(){return Object.keys(e.data).length===0},get mmInfo(){return h.getParent(e)}})).actions(e=>({setKeyword(t){e.keyword=t}})).actions(e=>({load:h.flow(function*(){var t;if(e.mmInfo.type===G.MericoMetricSystem){(t=e.controller)==null||t.abort(),e.controller=new AbortController,e.state="loading";try{const r=Ft(e.mmInfo.dataSource,{url:"/buffet/api/metric_management/search",method:"POST",data:{key:e.mmInfo.key},params:{search:e.keyword}}),a=yield*h.toGenerator(Ce.mericoMetricInfo(e.controller.signal)({key:e.mmInfo.key,query:JSON.stringify(r),...e.mmInfo.additionalQueryInfo},e.controller.signal)),o=jt(e.mmInfo.dataSource,a).data;e.data=o,e.state="idle",e.error=null}catch(r){if(!me.isCancel(r)){e.data=[];const a=y.get(r,"message","unkown error");e.error=y.get(r,"response.data.detail.message",a),e.state="error"}}}})})).actions(e=>({afterCreate(){h.addDisposer(e,F.reaction(()=>`${e.mmInfo.type}:${e.keyword}`,e.load,{fireImmediately:!0,delay:0}))}})),dT=h.types.model({metrics:h.types.optional(cT,{}),metricDetail:h.types.optional(iT,{}),keyword:h.types.optional(h.types.string,""),metricID:h.types.optional(h.types.string,"")}).views(e=>({get rootModel(){return h.getRoot(e)},get contentModel(){return this.rootModel.content},get additionalQueryInfo(){return this.contentModel.getAdditionalQueryInfo("")},get dataSource(){return h.getParent(e)},get key(){return this.dataSource.key},get type(){return this.dataSource.type},get metric(){return e.metricID?e.metrics.data.find(t=>t.id===e.metricID)??null:null}})).actions(e=>({selectMetric(t){e.metricID=t}})),uT=h.types.compose("DataSourceModel",Jr,h.types.model({dbInfo:h.types.optional(rT,{}),mericoMetricInfo:h.types.optional(dT,{})})),pT=h.types.model("DataSourcesModel",{list:h.types.optional(h.types.array(uT),[])}).views(e=>({find({type:t,key:r}){return e.list.find(a=>a.key===r&&a.type===t)},get options(){return e.list.map(t=>({value:t.key,label:t.key}))}})).actions(e=>({replace(t){e.list.length=0,e.list.push(...t)}}));function hT(e){return e.length===1&&e[0]==="_QUERY_VARS_"}function gT(e){return e.length===1&&e[0]==="_MOCK_CONTEXT_"}function fT(e){return e.length===1&&e[0]==="_FILTERS_"}function bT(e){return e.length===2&&e[0]==="_FILTERS_"}function yT(e){return e.length===1&&e[0]==="_SQL_SNIPPETS_"}function vT(e){return e.length===2&&e[0]==="_SQL_SNIPPETS_"}function _T(e){return e.length===2&&e[0]==="_QUERIES_"}function xT(e){return e.length===1&&e[0]==="_QUERIES_"}function mT(e){return e.length===2&&e[0]==="_VIEWS_"}function ga(e){return e.length===6&&e[0]==="_VIEWS_"&&e[2]==="_PANELS_"}function ht(e){return{label:e,value:e,_type:"ACTION",_action_type:e,Icon:null,children:null}}function wT(e){switch(e._type){case"GROUP":case"ACTION":return null;case"query_variables":return["_QUERY_VARS_"];case"mock_context":return["_MOCK_CONTEXT_"];case"filter":return["_FILTERS_",e.value];case"sql_snippet":return["_SQL_SNIPPETS_",e.value];case"query":return["_QUERIES_",e.value];case"view":return["_VIEWS_",e.value];case"panel":return e.parentID?["_VIEWS_",e.parentID,"_PANELS_",e.value,"_TABS_","Data"]:(console.error("[getPathFromOption] parentID is required"),null)}}const CT=h.types.model("EditorModel",{path:h.types.optional(h.types.frozen(),[]),settings_open:h.types.optional(h.types.boolean,!1)}).views(e=>({get isPanelPath(){return ga(e.path)},get panelTab(){return this.isPanelPath?y.get(e.path,5,"Data"):null},get navOptions(){const{content:t}=h.getRoot(e),{filters:r,views:a,sqlSnippets:l,queries:o}=t;return[{label:"query_variable.labels",value:"_QUERY_VARS_",_type:"query_variables",Icon:C.IconVariable},{label:"mock_context.label",value:"_MOCK_CONTEXT_",Icon:C.IconCodeDots,_type:"mock_context"},{label:"filter.labels",value:"_FILTERS_",Icon:C.IconFilter,children:[ht("_FILTERS_SETTINGS_"),...r.options,ht("_Add_A_Filter_")],_type:"GROUP"},{label:"sql_snippet.labels",value:"_SQL_SNIPPETS_",Icon:C.IconCopy,children:[ht("_SQL_SNIPPETS_SETTINGS_"),...l.options,ht("_Add_A_SQL_SNIPPET_")],_type:"GROUP"},{label:"query.labels",value:"_QUERIES_",Icon:C.IconDatabase,children:[ht("_QUERIES_SETTINGS_"),...o.options,ht("_Add_A_QUERY_")],_type:"GROUP"},{label:"view.labels",value:"_VIEWS_",Icon:C.IconBoxMultiple,children:[...a.editorOptions,ht("_Add_A_VIEW_")],_type:"GROUP"}]},isOptionActive(t,r){return t.length===0?!1:ga(t)?t[3]===r.value:t[t.length-1]===r.value},isOptionOpened(t){const{path:r}=e;return r.length===0||!t.children||t.children.length===0?!1:r.includes(t.value)}})).actions(e=>({setPath(t){e.path=t},setSettingsOpen(t){e.settings_open=t},openAndSetPath(t){this.setPath(t),e.settings_open||(e.settings_open=!0)}})).actions(e=>({setPanelTab(t){if(!e.isPanelPath||e.panelTab===t||!t)return;const r=y.clone(e.path);r[5]=t,e.setPath(r)},open(t){e.setPath(t),e.setSettingsOpen(!0)},close(){e.setSettingsOpen(!1)},navigate(t){const r=wT(t);r&&e.setPath(r)}})).views(e=>({get spotlightActionGroups(){const{content:t}=h.getRoot(e),{filters:r,views:a,sqlSnippets:l,queries:o}=t,i={group:"spotlight.main_group",actions:[{id:"query_variable.labels",title:"query_variable.labels",onClick:()=>e.openAndSetPath(["_QUERY_VARS_"]),iconKey:"query_variables"},{id:"mock_context.label",title:"mock_context.label",onClick:()=>e.openAndSetPath(["_MOCK_CONTEXT_"]),iconKey:"mock_context"},{id:"filter.labels",title:"filter.labels",onClick:()=>e.openAndSetPath(["_FILTERS_"]),iconKey:"filter"},{id:"sql_snippet.labels",title:"sql_snippet.labels",onClick:()=>e.openAndSetPath(["_SQL_SNIPPETS_"]),iconKey:"sql_snippet"},{id:"query.labels",title:"query.labels",onClick:()=>e.openAndSetPath(["_QUERIES_"]),iconKey:"query"}]},c={group:"filter.labels",actions:[]};r.options.forEach(f=>{c.actions.push({id:`_FILTERS_.${f.value}`,title:f.label,onClick:()=>e.openAndSetPath(["_FILTERS_",f.value]),iconKey:"filter"})});const d={group:"sql_snippet.labels",actions:[]};l.options.forEach(f=>{d.actions.push({id:`_SQL_SNIPPETS_.${f.value}`,title:f.label,onClick:()=>e.openAndSetPath(["_SQL_SNIPPETS_",f.value]),iconKey:"sql_snippet"})});const u={group:"query.labels",actions:[]};o.options.forEach(f=>{u.actions.push({id:`_QUERIES_.${f.value}`,title:f.label,onClick:()=>e.openAndSetPath(["_QUERIES_",f.value]),iconKey:"query"})});const p=[i,c,d,u];return a.editorOptions.forEach(f=>{const v={group:f.label,actions:[]};v.actions.push({id:`_VIEWS_.${f.value}`,title:f.label,onClick:()=>e.openAndSetPath(["_VIEWS_",f.value]),iconKey:"view",group:f.label}),f.children.forEach(_=>{_._type!=="ACTION"&&v.actions.push({id:`_VIEWS_._PANELS_.${_.value}`,title:_.label,viz:_.viz,onClick:()=>e.openAndSetPath(["_VIEWS_",f.value,"_PANELS_",_.value,"_TABS_","Panel"]),iconKey:"panel",group:f.label})}),p.push(v)}),p}})),TT=h.types.compose("LayoutsModel",ia,h.types.model({currentLayoutWrapperWidth:h.types.optional(h.types.number,0)})).views(e=>({get divisionPreviewScale(){const t=e.currentLayoutPreviewWidth,r=e.currentLayoutWrapperWidth;return!t||!r||t<=r?1:r/t}})).actions(e=>({addALayoutItem(t){e.list.forEach(r=>{r.addNewLayout(t)})},duplicateLayoutItemsByPanelID(t,r){e.list.forEach(a=>{const l=a.findByPanelID(t);if(!l){console.error(`Can't find a layout item by panelID[${t}] in layoutSet[${a.name}]`);return}a.list.push({...l,id:Ne.v4(),panelID:r,y:1/0})})},removeByPanelID(t){e.list.forEach(r=>{r.removeByPanelID(t)})},removeByPanelIDs(t){e.list.forEach(r=>{r.removeByPanelIDs(t)})},setCurrentLayoutWrapperWidth(t){e.currentLayoutWrapperWidth=t},addALayoutSet(t,r,a){const l=e.basisLayoutSet,o={id:t,name:r,breakpoint:a,list:l.json.list.map(i=>({...i,id:Ne.v4()}))};e.list.push(o)},updateLayoutSetsInfo(t){const r=y.keyBy(e.list,"id");t.forEach(o=>{const i=r[o.id];if(i){i.setName(o.name),i.setBreakpoint(o.breakpoint),delete r[o.id];return}this.addALayoutSet(o.id,o.name,o.breakpoint)});const a=new Set(Object.keys(r)),l=a.size>0;a.forEach(o=>{const i=e.list.findIndex(c=>c.id===o);e.list.splice(i,1)}),l&&e.setCurrentBreakpoint("basis")},updateCurrentLayoutItem(t){e.currentLayoutSet.updateLayoutItem(t)},updateCurrentLayoutItems(t){t.forEach(r=>{e.currentLayoutSet.updateLayoutItem(r)})},append(t){e.list.push(t)},appendMultiple(t){t.length!==0&&e.list.push(...t)},remove(t){e.list.splice(t,1)},removeByID(t){const r=e.list.findIndex(a=>a.id===t);r!==-1&&e.list.splice(r,1)},removeByIDs(t){t.forEach(r=>{this.removeByID(r)})}})),Di=na.views(e=>({get realDataFieldOptions(){return e.queryIDs.length===0?[]:e.queries.map(t=>{const r=t.data;return r.length===0?[]:Object.keys(r[0]).map(l=>({label:l,value:`${t.id}.${l}`,group:t.name,group_id:t.id,disabled:!1}))}).flat()},get realQueryOptions(){return e.queryIDs.length===0?[]:e.queries.map(t=>({label:t.name,value:t.id,disabled:!1}))},queryOptions(t,r){const a=[...this.realQueryOptions];return t&&!a.find(l=>l.value===t)&&a.unshift({label:t,value:t,disabled:!0}),r&&a.unshift({label:"unset",value:"",disabled:!1}),a},get realVariableOptions(){const t=e.variableValueMap;return Object.entries(e.variableAggValueMap).map(([r,a])=>({label:r,value:r,formattedValue:t[r],aggValue:a,disabled:!1}))},variableOptions(t,r){const a=[...this.realVariableOptions];return t&&!a.find(l=>l.value===t)&&a.unshift({label:t,value:t,formattedValue:"",aggValue:"",disabled:!0}),r&&a.unshift({label:"unset",value:"",formattedValue:"",aggValue:"",disabled:!1}),a},dataFieldOptions(t,r,a){let l=[...this.realDataFieldOptions];if(a&&(l=l.filter(o=>o.group_id===a)),t&&!l.find(o=>o.value===t)){const o=A(t),i=e.queryByID(o.queryID);l.unshift({label:o.columnKey,value:t,group:i?i.name:o.queryID,group_id:i?i.id:"",disabled:!0})}return r&&l.unshift({label:"unset",value:"",group:"",group_id:"",disabled:!1}),l},dataFieldOptionGroups(t,r,a){const l=this.dataFieldOptions(t,r,a);return Object.entries(y.groupBy(l,"group")).map(([i,c])=>({group:i,items:c.map(d=>({label:d.label,value:d.value,group_id:d.group_id,disabled:d.disabled}))}))},explainDataKey(t){const{queryID:r,columnKey:a}=A(t),l=e.queries.find(o=>o.id===r);return l?{queryID:r,queryName:l.name,columnKey:a}:{queryID:r,queryName:null,columnKey:a}}})).actions(e=>({removeSelf(){h.getParent(e,2).removeByID(e.id)}})).actions(e=>({moveToView(t,r){h.getRoot(e).content.views.findByID(t).removePanelID(e.id),h.getRoot(e).content.views.findByID(r).appendPanelID(e.id),h.getRoot(e).editor.setPath(["_VIEWS_",r,"_PANELS_",e.id])}})),Ii=h.types.compose("PanelsModel",ra,h.types.model({list:h.types.optional(h.types.array(Di),[])})).views(e=>({get contentModel(){return h.getRoot(e).content},editorOptions(t,r){const a=e.panelsByIDs(r);a.length!==r.length&&console.warn(`Unfulfilled panels for View[${t}]`);const l=a.map(i=>({label:i.name,value:i.id,_type:"panel",parentID:t,viz:S1[i.viz.type]})),o="_Add_A_PANEL_";return l.push({label:o,value:o,_type:"ACTION",_action_type:o,parentID:t,Icon:null,children:null}),l}})).actions(e=>({replace(t){e.list=h.castToSnapshot(t)},append(t){e.list.push(t)},appendMultiple(t){t.length!==0&&e.list.push(...t)},remove(t){e.list.splice(t,1)},removeByID(t){const r=e.list.findIndex(a=>a.id===t);r!==-1&&e.list.splice(r,1)},removeByIDs(t){t.forEach(r=>{this.removeByID(r)})},duplicateByID(t){const r=e.list.find(l=>l.id===t);if(!r){console.error(new Error(`[duplicate panel] Can't find a panel by id[${t}]`));return}const a=new Date().getTime().toString();return e.list.push({...r.json,id:a,title:{...r.json.title}}),e.contentModel.layouts.duplicateLayoutItemsByPanelID(r.id,a),a},replaceByIndex(t,r){e.list.splice(t,1,r)}})),ST=ea.actions(e=>({getSchema(){const t=e.json,r=[],a=[];e.panels.forEach(i=>{const c=i.getSchema();r.push(c.panel),c.queries.length>0&&a.push(...c.queries)});const l=e.contentModel.layouts.jsonByPanelIDSet(new Set(e.panelIDs));return{views:[t],panels:r,definition:{queries:y.uniqBy(a,i=>i.id)},layouts:l,version:Je}},downloadSchema(){if(e.type===$.Tabs){console.error(new Error("Please choose a tab first"));return}const t=JSON.stringify(this.getSchema(),null,2),r=e.name;St(r,t)}})),Mi=h.types.compose("ViewsModel",ta,h.types.model({current:h.types.optional(h.types.array(ST),[]),idOfVIE:h.types.string})).views(e=>({get isVIETheFirstView(){return e.current.length===0||!e.idOfVIE?!1:e.current[0].id===e.idOfVIE},get VIE(){return e.current.find(({id:t})=>t===e.idOfVIE)},get options(){return e.current.map(t=>({label:t.name,value:t.id,type:t.type}))},get editorOptions(){const t=h.getRoot(e).content.panels;return e.current.map(r=>({label:r.name,value:r.id,_type:"view",children:t.editorOptions(r.id,r.panelIDs)}))},get contentModel(){return h.getRoot(e).content}})).actions(e=>({setIDOfVIE(t){e.idOfVIE=t,e.visibleViewIDs.length=0,e.visibleViewIDs.push(t)},resetIDOfVIE(){this.setIDOfVIE(e.current[0].id)},replace(t){e.current.replace(t)},addANewView(t,r,a,l){e.current.push({id:t,name:r,type:a,config:l,panelIDs:[]})},append(t){e.current.push(t)},appendMultiple(t){t.length!==0&&e.current.push(...t)},remove(t){e.current.splice(t,1)},removeByID(t){const r=e.current.findIndex(i=>i.id===t);if(r===-1)return;const a=e.current[r],l=e.contentModel.panels,o=e.contentModel.layouts;l.removeByIDs(a.panelIDs),o.removeByPanelIDs(a.panelIDs),e.current.splice(r,1),this.resetIDOfVIE()},replaceByIndex(t,r){e.current.splice(t,1,r)},addARandomNewView(){const t=new Date().getTime().toString();this.addANewView(t,$.Division,$.Division,{_name:$.Division}),this.setIDOfVIE(t)},removeVIE(){e.current.length!==1&&(this.removeByID(e.idOfVIE),this.resetIDOfVIE())}}));function fa(e){const t=e.length>0?[e[0].id]:[],r=e.length>0?e[0].id:"";return{current:e.map(l=>{const{_name:o=l.type}=l.config;return{...l,config:{...l.config,_name:o},panelIDs:l.panelIDs}}),visibleViewIDs:t,idOfVIE:r}}const kT=h.types.model({id:h.types.string,name:h.types.string,dashboard_id:h.types.string,create_time:h.types.string,update_time:h.types.string,version:h.types.string,filters:xi,queries:wi,sqlSnippets:Ci,views:Mi,panels:Ii,layouts:TT,mock_context:$r,origin:h.types.maybe(h.types.frozen())}).views(e=>({get json(){return{id:e.id,name:e.name,create_time:e.create_time,update_time:e.update_time,dashboard_id:e.dashboard_id,content:{views:e.views.json,panels:e.panels.json,filters:e.filters.json,version:e.version,layouts:e.layouts.json,definition:{queries:e.queries.json,sqlSnippets:e.sqlSnippets.json,mock_context:e.mock_context.current}}}},get contentJSON(){return this.json.content},get filtersChanged(){const t="filters.current";return!y.isEqual(h.getSnapshot(y.get(e,t)),y.get(e.origin,t))},get queriesChanged(){const t="queries.current",r=h.getSnapshot(y.get(e,t)).map(l=>y.pick(l,["id","name","key","type","run_by","pre_process","post_process","config"])),a=y.get(e.origin,t);return!y.isEqual(r,a)},get sqlSnippetsChanged(){const t="sqlSnippets.current";return!y.isEqual(h.getSnapshot(y.get(e,t)),y.get(e.origin,t))},get viewsChanged(){const t="views.current";return!y.isEqual(e.views.json,y.get(e.origin,t))},get panelsChanged(){const t="panels.list";return!y.isEqual(h.getSnapshot(y.get(e,t)),y.get(e.origin,t))},get layoutsChanged(){const t="layouts.list";return!y.isEqual(h.getSnapshot(y.get(e,t)),y.get(e.origin,t))},get mockContextChanged(){const t="mock_context.current";return!y.isEqual(y.get(e,t),y.get(e.origin,t))},get context(){const t=h.getParent(e).context.current;return{...e.mock_context.current,...t}},get payloadForSQL(){const t=h.getParent(e).globalSQLSnippets,r={context:this.context,filters:e.filters.valuesForPayload};return{...r,sql_snippets:Pt(e.sqlSnippets.current,"key","value",r),global_sql_snippets:Pt(t.list,"id","content",r)}},get payloadForViz(){const t=h.getParent(e).context.current;return{context:{...e.mock_context.current,...t},filters:e.filters.valuesForPayload}},get dashboardState(){return Un(this.payloadForSQL)},getAdditionalQueryInfo(t){return{content_id:e.id,query_id:t,params:this.dashboardState}},get changed(){return this.filtersChanged||this.queriesChanged||this.sqlSnippetsChanged||this.viewsChanged||this.panelsChanged||this.layoutsChanged||this.mockContextChanged},get data(){return e.queries.current.map(({id:r,data:a})=>({id:r,data:a})).reduce((r,a)=>(r[a.id]=a.data,r),{})},getDataStuffByID(t){const r=e.queries.findByID(t);return r?{data:r.data,len:r.data.length,state:r.state,error:r.error}:{data:[],len:0,state:"idle",error:void 0}}})).views(e=>({get queriesUsage(){const t=e.panels.idMap,r=[];e.views.current.forEach(l=>{l.panelIDs.forEach(o=>{const i=t.get(o);if(!i)return;const c="panel",d=i.name,u=[{id:l.id,label:l.name}];i.queryIDs.forEach(p=>{r.push({id:o,queryID:p,type:c,type_label:"panel.label",label:d,views:u})})})});const a=e.views.idMap;return e.filters.current.filter(l=>!!y.get(l,"config.options_query_id")).forEach(l=>{r.push({type:"filter",type_label:"filter.label",id:l.id,queryID:y.get(l,"config.options_query_id"),label:l.label,views:l.visibleInViewsIDs.map(o=>{var i;return{id:o,label:((i=a.get(o))==null?void 0:i.name)??o}})})}),e.queries.current.forEach(l=>{if(!l.isTransform)return;l.config.dep_query_ids.forEach(i=>{r.push({type:"transform-query",type_label:"query.transform.full_label",id:l.id,queryID:i,label:l.name,views:[]})})}),y.groupBy(r,"queryID")},get hasUnusedQueries(){return e.queries.current.length>Object.keys(this.queriesUsage).length},findQueryUsage(t){return this.queriesUsage[t]??[]},get sqlSnippetsUsage(){const t=[];return e.queries.current.forEach(r=>{if(!r.typedAsSQL)return;const a=r.config;y.uniq(a.sql.match(Qt.sqlSnippet)).forEach(o=>{t.push({queryID:r.id,sqlSnippetKey:o,queryName:r.name})})}),y.groupBy(t,"sqlSnippetKey")},get hasUnusedSQLSnippets(){return e.sqlSnippets.current.length>Object.keys(this.sqlSnippetsUsage).length},findSQLSnippetUsage(t){return this.sqlSnippetsUsage[t]??[]}})).actions(e=>({removeUnusedQueries(){const t=new Set(Object.keys(e.queriesUsage)),r=e.queries.current.filter(a=>!t.has(a.id)).map(a=>a.id);e.queries.removeQueries(r)},removeUnusedSQLSnippets(){const t=new Set(Object.keys(e.sqlSnippetsUsage)),r=e.sqlSnippets.current.filter(a=>!t.has(a.key)).map(a=>a.key);e.sqlSnippets.removeByKeys(r)},duplicatePanelByID(t,r){var l;const a=e.panels.duplicateByID(t);a&&((l=e.views.findByID(r))==null||l.appendPanelID(a))},removePanelByID(t,r){var a;e.panels.removeByID(t),e.layouts.removeByPanelID(t),(a=e.views.findByID(r))==null||a.removePanelID(t)},addANewPanel(t){var a;const r=Ne.v4();e.panels.append(Fo(r)),(a=e.views.findByID(t))==null||a.appendPanelID(r),e.layouts.addALayoutItem(r)},applyJSONSchema(t){var f;const{views:r,panels:a,filters:l,definition:o={},layouts:i}=t,{queries:c,sqlSnippets:d,mock_context:u}=o,p=new Map;if(Array.isArray(a)){const v=a.map(_=>{const x=Ne.v4();return p.set(_.id,x),{..._,id:x}});if(e.panels.appendMultiple(v),!Array.isArray(r)||r.length===0){const _=v.map(x=>x.id);(f=e.views.VIE)==null||f.appendPanelIDs(_)}}if(Array.isArray(r)){const v=r.map(_=>{const x=_.panelIDs.map(T=>p.get(T)??T);return{..._,id:Ne.v4(),panelIDs:x}});e.views.appendMultiple(v)}if(Array.isArray(i)){const v=(T,k)=>e.layouts.breakpointNameRecord[T]===k;let _=[];const x=i.filter(T=>v(T.name,T.breakpoint));x.forEach(T=>{T.id==="basis"&&(_=T.list),T.list.forEach(k=>{const z=p.get(k.panelID);k.id=Ne.v4(),k.panelID=z})}),e.layouts.list.forEach(T=>{const k=x.find(z=>z.name===T.name&&z.breakpoint===T.breakpoint);if(!k){_.forEach(z=>{T.addLayout(z)});return}k.list.forEach(z=>{T.addLayout(z)})})}Array.isArray(l)&&e.filters.appendMultiple(l),Array.isArray(c)&&e.queries.appendMultiple(c),Array.isArray(d)&&e.sqlSnippets.appendMultiple(d),u&&Object.keys(u).length>0&&e.mock_context.defaults(u)}})).actions(e=>({reset(){h.applySnapshot(e.filters.current,e.origin.filters.current),h.applySnapshot(e.queries.current,e.origin.queries.current),h.applySnapshot(e.sqlSnippets.current,e.origin.sqlSnippets.current),h.applySnapshot(e.views.current,e.origin.views.current),h.applySnapshot(e.panels.list,e.origin.panels.list),h.applySnapshot(e.layouts.list,e.origin.layouts.list),e.mock_context.current=e.origin.mock_context.current},resetFilters(){h.applySnapshot(e.filters.current,e.origin.filters.current)},updateCurrent(t){const{id:r,name:a,content:l}=t;if(!l)throw new Error("unexpected null content when updating a content model");const{version:o,filters:i,views:c,panels:d,definition:{queries:u,sqlSnippets:p,mock_context:f={}}}=l;e.id=r,e.name=a,e.version=o,h.applySnapshot(e.filters.current,i),h.applySnapshot(e.views.current,fa(c).current),h.applySnapshot(e.panels.list,d),h.applySnapshot(e.queries.current,u),h.applySnapshot(e.sqlSnippets.current,p),e.mock_context.current=f}})),ba=h.types.snapshotProcessor(kT,{preProcessor(e){return{...e,origin:e}},postProcessor(e){delete e.origin;const t=h.castToSnapshot(e.queries.current.map(r=>y.pick(r,["id","key","type","sql"])));return y.defaults({},{queries:{current:t}},e)}});function zT(e,t){t.filters&&h.applySnapshot(e.filters.current,t.filters)}function Ai({id:e,name:t,dashboard_id:r,create_time:a,update_time:l,content:o},i,c){if(!o)throw new Error("unexpected null content when creating a content model");const{version:d,filters:u,views:p,panels:f,layouts:v,definition:{queries:_,sqlSnippets:x,mock_context:T={}}}=o;return ba.create({id:e,name:t,dashboard_id:r,create_time:a,update_time:l,version:d,filters:sa(u,i,T,c),queries:{current:_},sqlSnippets:{current:x},mock_context:Vr(T),views:fa(p),panels:{list:f},layouts:{list:v,currentBreakpoint:v[0].id}})}const Pi=h.types.model({id:h.types.identifier,name:h.types.string,group:h.types.string,content:ba,content_id:h.types.string,datasources:pT,globalSQLSnippets:Hr,context:un,editor:CT}).views(e=>({get json(){return{id:e.id,name:e.name,group:e.group,content_id:e.content_id}},get queryVariables(){return{context:{...e.content.mock_context.current,...e.context.current},filters:e.content.filters.previewValues}},get queryVariablesString(){return JSON.stringify(this.queryVariables,null,2)}})).actions(e=>({updateCurrentContent(t){e.content.updateCurrent(t)},updateCurrent(t,r){const{id:a,name:l,group:o,content_id:i}=t;e.id=a,e.name=l,e.group=o,e.content_id=i,this.updateCurrentContent(r)}}));function $i({id:e,name:t,group:r,content_id:a},l,o,i,c,d){return Pi.create({id:e,name:t,group:r,content_id:a,content:Ai(l,c,d),datasources:{list:o},globalSQLSnippets:{list:i},context:Rr(c),editor:{}})}const DT={translation:{filter:{label:"Filter",labels:"Filters",add:"Add a Filter",manage:"Manage Filters",delete:"Delete this filter",show_filters:"Show Filters",hide_filters:"Hide Filters",field:{widget:"Widget",visible_in:"Visible in...",key_placeholder:"A unique key to refer",label_placeholder:"Label for this field",auto_submit:"Submit automatically",order:"Placement Order",custom_default_value:{trigger:"Custom default value",title:"Custom default value",tips:"Tips",tip_1:"Function has the highest priority of getting filter's default value",tip_2:"Leave this editor empty to disable this feature"}},widget:{names:{select:"Select",multi_select:"Multi Select",tree_select:"Tree Select",tree_single_select:"Tree Single Select",text_input:"Text Input",checkbox:"Checkbox",date_range:"Date Range"},common:{use_query_data_as_options:"Use query data as options",fetch_options_from_datasource:"Fetch options from datasource",or_fetch_options_from_datasource:"Or fetch options from datasource",selector_option_empty:"Not found",see_data_structure:"Click to see expected data structure",using_query:"Using query",default_selection_count:"Select first N options by default",min_width:"Min width",x_selected:"{{count}} selected"},text_input:{default_value:"Default Value",required:"Required"},select:{width:"Width",required:"Required",clearable:"Clearable",configure_options:"Configure options",default_selection:"Default Selection",no_default_selection:"none",select_first_option_by_default:"Select the first option by default",preset_options:{apply:"Apply preset options",date_unit:"Date units"}},multi_select:{width_description:"At least 160px"},tree_select:{strictly:"Parent and children nodes are not associated"},tree_single_select:{select_first_option_by_default:"Select the first option by default"},checkbox:{description:"Description",default_checked:"Default checked"},date_range:{required:"Required",allow_single_date:"Allow choosing 1 day",display_format:"Display format",max_days:"Max days",one_day:"1 day",x_days:"{{count}} days",x_max_days:"{{max_days}} days max",default_value:"Default value",default_by_shortcut:"Default by shortcut",default_by_shortcut_placeholder:"Priors default value",start_date:"Start date",end_date:"End date",shortcut:{last:{label:"last",d:"yesterday",w:"week",m:"month",m2:"2 months",m3:"3 months",y:"year",full:{d:"yesterday",w:"last week",m:"last month",m2:"last 2 months",m3:"last 3 months",y:"last year"}},recent:{label:"recent",d7:"7 days",d30:"30 days",d60:"60 days",d90:"90 days",d180:"180 days",d365:"365 days",full:{d7:"recent 7 days",d30:"recent 30 days",d60:"recent 60 days",d90:"recent 90 days",d180:"recent 180 days",d365:"recent 365 days"}},this:{label:"this",d:"today",w:"week",m:"month",y:"year",full:{d:"today",w:"this week",m:"this month",y:"this year"}},this_so_far:{label:"this...so far",w:"week",m:"month",y:"year",full:{w:"this week so far",m:"this month so far",y:"this year so far"}}}}}},view:{label:"View",labels:"Views",add:"Add a View",delete:"Delete this View",download_schema:"Download this View",component:{div:{label:"Division"},tabs:{label:"Tabs",tabs_settings:"Tabs Settings",tab:{name:"Tab Name",view:"View",order:"Placement Order",color:"Color",delete:"Delete this tab",switch_to_view:"Swith to View: {{name}}"}},modal:{label:"Modal",modal_settings:"Modal settings",title:"Modal Title",custom_title:"Customize modal title",width:"Width",height:"Height"}}},interactions:{label:"Interactions",add:"Add an interaction",interactions_viewer:"Interactions Viewer",unavailable:"Unavailable",unavailable_reason:"This visualization does not have available interactions to choose from",trigger:{setup:"Setup Trigger",label:"Trigger",payload:"Payload"},operation:{setup:"Operation Settings",label:"Operation",settings:"Settings",variables:"Variables",console_log:{label:"console.log | debug",log_content:"log content"},open_link:{label:"Open Link",url:"URL",open_in_new_tab:"Open in new tab"},open_view:{label:"Open View",view:"View"},set_filter_values:{label:"Set Filter Values",set_filter:"Set filter",with:"with"},clear_filter_values:{label:"Clear Filter Values",select_filter:"Select filters to clear"}}},query_variable:{label:"Query Variable",labels:"Query Variables",add:"Add a Variable",guide:{tabs:{guide:"Guide",variables_in_this_dashboard:"Variables in this dashboard",global_sql_snippets:"Global SQL Snippets"}},open:"See Query Variables"},sql_snippet:{label:"SQL Snippet",labels:"SQL Snippets",add:"Add a SQL Snippet",delete:"Delete this SQL Snippet",delete_unused:"Delete unused SQL Snippets",manage:"Manage SQL Snippets",key:"Key",key_occupied:"This key is occupied by another snippet",edit_snippet:"Edit SQL Snippet",preview_snippet:"Preview SQL Snippet",usage:{label:"Usage"}},global_sql_snippet:{label:"Global SQL Snippet",labels:"Global SQL Snippets",description:"SQL snippets worth sharing between dashboards are managed in System Settings by admins."},common:{titles:{settings:"Settings",edit:"Edit",config:"Config"},pagination:{label:"Pagination",page_size:"Page Size",total:"Total",total_rows:"Total {{total}} row(s)"},align:{horizontal:{label:"Horizontal Align",left:"left",center:"center",right:"right"},vertical:{label:"Vertical Align",top:"top",center:"center",bottom:"bottom"}},id:"ID",name:"Name",key:"Key",label:"Label",value:"Value",type:"Type",info:"Info",min:"Min",max:"Max",invalid:"Invalid",data_field:"Data Field",name_data_field:"Name Data Field",value_data_field:"Value Data Field",color_data_field:"Color Data Field",enabled:"Enabled",copied:"Copied to clipboard",action:"Action",actions:{actions:"Actions",open:"Open",close:"Close",save:"Save",save_changes:"Save Changes",revert:"Revert",revert_changes:"Revert Changes",reset_to_default:"Reset to default",init_with_default:"Init with default",select_all:"Select All",clear:"Clear",clear_selection:"Clear Selection",refresh:"Refresh",download_data:"Download Data",download_schema:"Download Schema",download_screenshot:"Screenshot",enter_fullscreen:"Full Screen",duplicate:"Duplicate",delete:"Delete",cancel:"Cancel",confirm:"Confirm",add_an_option:"Add an Option",edit:"Edit",end_editing:"End editing <0>{{name}}</0>"},tabs:{variant:{label:"Variant",default:"Default",outline:"Outline",pills:"Pills"},orientation:{label:"Orientation",horizontal:"Horizontal",vertical:"Vertical"},grow_tabs:"Grow Tabs"},choose_a_tab_first:"Please choose a tab first"},breakpoint:{label_one:"Screen size",label_other:"Screen sizes",add:"Add a screen size",manage:"Manage screen sizes",breakpoint:"Min Width"},context:{label:"Context"},mock_context:{label:"Mock Context",hint:"A valid json string is required"},panel:{label:"Panel",labels:"Panels",add:"Add a Panel",delete:"Delete This Panel",panel_name:"Panel Name",panel_description:"Description",panel_description_click:"Click to see description",show_title:"Show title",use_name_as_title:"Use name as title",settings:{change_view:"Move into Another View",change_view_title:"Move panel into another view",choose_queries:"Choose queries",need_to_choose_queries:"Choose at least 1 query for its data"},style:{label:"Style",width:"Width",width_postfix:"of 36 columns",height:"Height",height_postfix:"px",border:"Border"},variable:{label:"Variable",labels:"Variables",add:"Add a Variable",delete:"Delete this Variable",aggregation:{label:"Aggregation",fallback_value:"Fallback Value",fallback_value_description:"Used when data is empty or the aggregation yields NaN"},guide:{text:`-- You may reference dashboard state & panel variables in rich-text content or custom functions.
|
|
465
465
|
-- use double curly brackets to wrap code in rich-text content.
|
|
466
466
|
Project ID: {{ context.project_id }}
|
|
467
467
|
Keyword: {{ filters.keyword }}
|