bug fix & layout adjustements

main
Steve Nyemba 2 weeks ago
parent 4114b25b42
commit 73a2fb4934

@ -34,7 +34,7 @@
"index": "index.html",
"on": {
"load": {
"pane": [
"studio-menu": [
"www/html/menu.html"
],
"studio-intro":["www/html/about.html"]

@ -7,13 +7,43 @@
.studio {
display:grid;
grid-template-rows: 50px 200px auto 48px; gap:8px;
grid-template-rows: 50px 200px auto 48px;
gap:8px;
}
.studio-index {
display:grid;
grid-template-columns: auto 25%;
gap:4px;
}
.menu-2 {
display:grid; width:48px;
grid-template-rows: repeat(6,50px);
gap:8px;
}
.menu-2 .item {
display:grid; align-items: center;
}
.studio-index .menu-2 {
display:none ;
}
.studio-index .menu-1 {
display:block;
}
.studio-index-collapsed {
display:grid;
grid-template-columns: auto 50px;
gap:8px;
}
.studio-index-collapsed .menu-1{ display:none}
.studio-index-collapsed .menu-2 {display:grid;}
.studio-dialog {
width:650px;
}
@ -56,6 +86,7 @@
background-color: #F3F3F3;
padding:4px;
display:grid; grid-template-columns: 50px auto 40%; gap:8px; align-items: center;
}
.studio .control .border-left {border-left:1px solid #FFFFFF;}

@ -199,7 +199,7 @@ studio.frame = function (_args){
var _label = _args.label
var uri = [studio._context,'api/transport/apply']
uri = uri.join('/')
if (_args.AI && sessionStorage.AI){
if (_args.AI && sessionStorage.AI !="0"){
uri = uri.replace(/transport/g,'agent')
}
@ -220,7 +220,7 @@ studio.frame = function (_args){
}else{
_compute(_label,_r.data)
var _id = '.code.'+_args.label.trim()
$(_id).val($(_id).val() + '\n'+_r['query'])
$(_id).val('-- '+$(_id).val().replace(/\n/g,'-- ') + '\n'+_r['query'])
}
sessionStorage[_label] = _query
@ -301,6 +301,9 @@ studio.frame = function (_args){
}
})
})
if (spreadsheet.chartColl.length > 0){
_rows ['charts'] = spreadsheet.chartColl
}
if (_rows ){
http.setHeader('Content-Type','application/json')
http.setData (JSON.stringify({rows:_rows,'label':_label}))
@ -433,7 +436,8 @@ studio.frame = function (_args){
_query = studio.defaults[_args.provider]
if (sessionStorage[_args.label]) {
_query = ('-- '+_query.replace(/\n/g,' ')+'\n') + sessionStorage[_args.label]
// _query = ('-- '+_query.replace(/\n/g,' ')+'\n') + sessionStorage[_args.label]
_query = sessionStorage[_args.label]
}
$(_textarea).val(_query)
}
@ -457,6 +461,8 @@ studio.frame = function (_args){
_id = `.${_id} code`
this.compute()
$('.jxmodal').remove()
}
@ -477,3 +483,13 @@ studio.frame = function (_args){
}
}
studio.menu = {}
studio.menu.collapse = function (){
$('.studio-index').removeClass('studio-index').addClass('studio-index-collapsed')
}
studio.menu.expand = function (){
$('.studio-index-collapsed').removeClass('studio-index-collapsed').addClass('studio-index')
}

@ -13,7 +13,7 @@
display:grid;
grid-column: 1 / span 2;
/* display:grid;
grid-template-columns: 100%;

@ -3,7 +3,7 @@ height:auto;
gap:8px;
grid-row:2 / span 3 ;
grid-column:2 ;
display:none;
}
.main .pane iframe{ width:100%; border:0px; height:80%;}

@ -66,6 +66,7 @@ Guidelines:
- If the question can not be answered with the provided schema return empty string in the sql attribute
- Parse the question word by word so as to be able to identify tables, fields and operations associated (Joins, filters ...)
- Under no circumstances will you provide an explanation of tables or reasoning detail.
- Avoid using subqueries, and use field names as represented in the provided schema and their data types
question:
{question}
@ -115,6 +116,7 @@ def AIProxy (_label,_query,_path,_CATALOG) :
#
# we should run the command here, assuming a valid query
#
_data = _qreader.apply(_query)
except Exception as e:
#
@ -139,11 +141,15 @@ def AIProxy (_label,_query,_path,_CATALOG) :
_about = f"The queries will run on {_provider} database.\n{_about}"
r = _agent.toSQL(_query,_catalog, _about)
_data = _qreader.apply(r['sql'])
try:
_data = _qreader.apply(r['sql'])
except Exception as e1:
_data = pd.DataFrame()
pass
#
# returning the data and the information needed
#
_data = _data.to_dict(orient='split')
_data = _data.astype(str).to_dict(orient='split')
del _data['index']
if r :
return {'data':_data,'query':r['sql']}

@ -77,15 +77,19 @@ def write(**_args) :
#
# convert this to a spreadsheet
_excelFile = BytesIO()
with pd.ExcelWriter(_excelFile, engine='openpyxl') as writer:
with pd.ExcelWriter(_excelFile, engine='xlsxwriter') as writer:
_index = 1
for _name in _rows :
_sheet = _rows[_name]
_df = pd.DataFrame(_sheet['values'],columns=_sheet['columns'])
_df.to_excel(writer,sheet_name=_name,index=False)
try:
_df = pd.DataFrame(_sheet['values'],columns=_sheet['columns'])
_df.to_excel(writer,sheet_name=_name,index=False)
except Exception as e:
print (_name)
print (_sheet)
_index += 1
if 'chart' in _rows :
print (_rows['chart'])
# Write each DataFrame to a different sheet
_excelFile.seek(0)
_stream= _excelFile.read() #send_file(_excelFile,as_attachment=True,download_name=f'{_label}-export.xlsx', mimetype='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')

@ -66,7 +66,11 @@
})
</script>
<div >
<div id="studio-intro" class="studio-intro"></div>
<div class="studio-pane"></div>
<div class="studio-index">
<div>
<div id="studio-intro" class="studio-intro"></div>
<div class="studio-pane"></div>
</div>
<div id="studio-menu" class="studio-menu"></div>
</div>

@ -3,7 +3,7 @@
.search-box {
background-color: #f3f3f3;
display:grid;
grid-template-columns: auto 50px ;
grid-template-columns: auto 50px 50px;
gap:4px;
align-content:center;
align-items: center;
@ -11,13 +11,13 @@
}
.search-box input[type=text]{
height:26px;
padding:6px;
padding:8px;
outline:0;
border: 0px solid transparent;
border-left:4px solid transparent;
background-color: #D3D3D3;
margin:4px;
}
.search-box input[type=text]:focus {
border-left-color: #4682b4;;
@ -35,6 +35,7 @@
</style>
<script>
var _aiInit = function (){
var http = HttpClient.instance()
uri = '{{system.context}}/api/agent/enabled'
@ -54,9 +55,10 @@
})
}
var _init = function (_term){
_prefix = ( $('.jxmodal .search-box .search-label').length == 0)?'':' .jxmodal '
var http = HttpClient.instance()
var uri = (['{{system.context}}','api/register/get']).join('/')
$('.search-results .labels').empty()
$(_prefix+'.search-results .labels').empty()
http.get(uri,function (x){
var labels = JSON.parse(x.responseText)
if (labels.length == 0){
@ -95,11 +97,12 @@
}
$('.search-results .labels').append(_div)
$(_prefix+'.search-results .labels').append(_div)
});
if(_term){
$('.search-box .search-label').val(_term)
$(_prefix+'.search-box .search-label').val(_term)
_find()
}
@ -107,10 +110,12 @@
})
}
var _find = function (){
var _val = $('.search-box .search-label').val().trim()
_prefix = ( $('.jxmodal .search-box .search-label').length == 0)?'':' .jxmodal '
var _val = $(_prefix+'.search-box .search-label').val().trim()
if (_val.length > 2){
// $('.search-results .labels .button').slideUp()
var _nodes = $('.search-results .labels .button')
var _nodes = $(_prefix+'.search-results .labels .button')
_nodes.each(_index => {
_item = _nodes[_index]
p = $(_item).attr('provider')
@ -123,7 +128,7 @@
}
})
}else{
$('.search-results .labels .button').slideDown()
$(_prefix+'.search-results .labels .button').slideDown()
}
}
_reset = function (){
@ -137,42 +142,22 @@
}
$(document).ready(function (){
_init()
_aiInit()
var _layout = {on:{load:{}}}
// _init()
// _aiInit()
var _layout = {on:{load:{'search-settings':['www/html/search.html']}}}
// $('.pane .tabs label')[0].click()
// var tabs = new QCMSTabs(_layout,'{{system.context}}','.pane .tabs')
// tabs.init()
// _layout.on.load = {'form':['www/html/_assets/wizard/technologies.html']}
// bootup.init('{{system.context}}',_layout)
bootup.init('{{system.context}}',_layout)
})
</script>
<div style="">
<div class="menu-1">
<div class="settings">
<div class="setting-frame lookup">
<div class="search-box border" style="margin-bottom:4px; padding:1px;">
<input type="text" class="search-label" placeholder="[Search transport registry]" onkeyup="_find()"/>
<div class="border-left" align="center">
<div class="active" onclick="_reset()"><i class="fa-solid fa-trash"></i> </div>
</div>
</div>
<div class=" border" style="padding:8px; margin-top:10px;">
<div class="search-results" style="margin:4px; ">
<div class="labels"></div>
</div>
</div>
</div>
</div>
<div id="search-settings"></div>
<p>
<div class="border" style="padding:16px;">
<div class="_border-round border" style="padding:4px; background-color: #f3f3f3;">
@ -181,7 +166,7 @@
</div>
</div>
<div class="border" style="margin-top:4px;padding:4px; background-color: #f3f3f3;">
<div class=" border" style="margin-top:4px;padding:4px; background-color: #f3f3f3;">
<div class="active" style="margin-top:4px" onclick="dialog.show({uri:'www/html/setup-ai.html',title:'Setup AI',context:'{{system.context}}'})">
<i class="fa-solid fa-microchip"></i> <span>Setup AI</span>
<span class="ai-status " style="margin-left:8px">Enabled</span>
@ -208,3 +193,37 @@
</div>
<div class="menu-2">
<div class="border item" align="center" >
<div class="active" onclick="studio.menu.expand()">
<i class="fa-solid fa-maximize"></i>
</div>
</div>
<div class="border item" align="center" onclick="qcms.dialog.show({uri:'www/html/search.html',title:'Search Database Connections',context:'{{system.context}}'} )">
<div class="active">
<i class="fa-solid fa-search"></i>
</div>
</div>
<div class="border item" align="center" onclick="dialog.show({uri:'www/html/wizard.html',title:'Create New Connection',context:'{{system.context}}' })">
<div class="active">
<i class="fa-solid fa-plug-circle-plus"></i>
</div>
</div>
<div class="border item" title="Setup AI" align="center" onclick="dialog.show({uri:'www/html/setup-ai.html',title:'Setup AI',context:'{{system.context}}'})">
<div class="active"><i class="fa-solid fa-microchip"></i></div>
</div>
<div class="border item" align="center" onclick='window.open("https://dev.the-phi.com/git/data-transport")'>
<div class="active"><i class="fa-brands fa-git-alt"></i></div>
</div>
<div class="border item" align="center">
<div class="active"><i class="fa-brands fa-docker"></i></div>
</div>
</div>

@ -0,0 +1,36 @@
<script>
$(document).ready(()=>{
// _prefix = ( $('.jxmodal .search-box .search-label').length == 0)?'':' .jxmodal '
_init()
_aiInit()
if ($('.jxmodal').length > 0) {
$('.jxmodal .dialog-title').css({'width':'650px'})
}
})
</script>
<div class="settings">
<div class="setting-frame lookup">
<div class="search-box border" >
<input type="text" class="search-label" placeholder="[Search transport registry]" onkeyup="_find()"/>
<div class="border-left" align="center">
<div class="active" onclick="_reset()"><i class="fa-solid fa-trash"></i> </div>
</div>
<div class="border-left" align="center">
<div class="active" onclick="studio.menu.collapse ()"><i class="fa-solid fa-minimize"></i> </div>
</div>
</div>
<div class=" border" style="padding:8px; margin-top:10px;">
<div class="search-results" style="margin:4px; ">
<div class="labels"></div>
</div>
</div>
</div>
</div>
Loading…
Cancel
Save