@@ -9,6 +9,11 @@ function db_ui#drawer#get()
99 return s: drawer_instance
1010endfunction
1111
12+ " Default drawer sections and their order
13+ if ! exists (' g:db_ui_drawer_sections' )
14+ let g: db_ui_drawer_sections = [' new_query' , ' buffers' , ' saved_queries' , ' schemas' ]
15+ endif
16+
1217function ! s: drawer .new (dbui) abort
1318 let instance = copy (self )
1419 let instance.dbui = a: dbui
@@ -407,55 +412,34 @@ endfunction
407412
408413function ! s: drawer .add_db (db) abort
409414 let db_name = a: db .name
415+
410416 if ! empty (a: db .conn_error)
411417 let db_name .= ' ' .g: db_ui_icons .connection_error
412418 elseif ! empty (a: db .conn)
413419 let db_name .= ' ' .g: db_ui_icons .connection_ok
414420 endif
421+
415422 if self .show_details
416423 let db_name .= ' (' .a: db .scheme.' - ' .a: db .source .' )'
417424 endif
425+
418426 call self .add (db_name, ' toggle' , ' db' , self .get_toggle_icon (' db' , a: db ), a: db .key_name, 0 , { ' expanded' : a: db .expanded })
419427 if ! a: db .expanded
420428 return a: db
421429 endif
422430
423- call self .add (' New query' , ' open' , ' query' , g: db_ui_icons .new_query, a: db .key_name, 1 )
424- if ! empty (a: db .buffers .list )
425- call self .add (' Buffers (' .len (a: db .buffers .list ).' )' , ' toggle' , ' buffers' , self .get_toggle_icon (' buffers' , a: db .buffers ), a: db .key_name, 1 , { ' expanded' : a: db .buffers .expanded })
426- if a: db .buffers .expanded
427- for buf in a: db .buffers .list
428- let buflabel = self .get_buffer_name (a: db , buf )
429- if self .dbui.is_tmp_location_buffer (a: db , buf )
430- let buflabel .= ' *'
431- endif
432- call self .add (buflabel, ' open' , ' buffer' , g: db_ui_icons .buffers , a: db .key_name, 2 , { ' file_path' : buf })
433- endfor
431+ " Render sections based on g:db_ui_drawer_sections configuration
432+ for section in g: db_ui_drawer_sections
433+ if section == # ' new_query'
434+ call self ._render_new_query_section (a: db )
435+ elseif section == # ' buffers' && ! empty (a: db .buffers .list )
436+ call self ._render_buffers_section (a: db )
437+ elseif section == # ' saved_queries'
438+ call self ._render_saved_queries_section (a: db )
439+ elseif section == # ' schemas'
440+ call self ._render_schemas_section (a: db )
434441 endif
435- endif
436- call self .add (' Saved queries (' .len (a: db .saved_queries.list ).' )' , ' toggle' , ' saved_queries' , self .get_toggle_icon (' saved_queries' , a: db .saved_queries), a: db .key_name, 1 , { ' expanded' : a: db .saved_queries.expanded })
437- if a: db .saved_queries.expanded
438- for saved_query in a: db .saved_queries.list
439- call self .add (fnamemodify (saved_query, ' :t' ), ' open' , ' buffer' , g: db_ui_icons .saved_query, a: db .key_name, 2 , { ' file_path' : saved_query, ' saved' : 1 })
440- endfor
441- endif
442-
443- if a: db .schema_support
444- call self .add (' Schemas (' .len (a: db .schemas.items ).' )' , ' toggle' , ' schemas' , self .get_toggle_icon (' schemas' , a: db .schemas), a: db .key_name, 1 , { ' expanded' : a: db .schemas.expanded })
445- if a: db .schemas.expanded
446- for schema in a: db .schemas.list
447- let schema_item = a: db .schemas.items [schema]
448- let tables = schema_item.tables
449- call self .add (schema.' (' .len (tables.items ).' )' , ' toggle' , ' schemas->items->' .schema, self .get_toggle_icon (' schema' , schema_item), a: db .key_name, 2 , { ' expanded' : schema_item.expanded })
450- if schema_item.expanded
451- call self .render_tables (tables, a: db ,' schemas->items->' .schema.' ->tables->items' , 3 , schema)
452- endif
453- endfor
454- endif
455- else
456- call self .add (' Tables (' .len (a: db .tables.items ).' )' , ' toggle' , ' tables' , self .get_toggle_icon (' tables' , a: db .tables), a: db .key_name, 1 , { ' expanded' : a: db .tables.expanded })
457- call self .render_tables (a: db .tables, a: db , ' tables->items' , 2 , ' ' )
458- endif
442+ endfor
459443endfunction
460444
461445function ! s: drawer .render_tables (tables, db, path , level , schema) abort
@@ -719,6 +703,51 @@ function! s:drawer.get_buffer_name(db, buffer)
719703 return substitute (name, ' ^' .db_ui#utils#slug (a: db .name).' -' , ' ' , ' ' )
720704endfunction
721705
706+ function ! s: drawer ._render_new_query_section (db) abort
707+ call self .add (' New query' , ' open' , ' query' , g: db_ui_icons .new_query, a: db .key_name, 1 )
708+ endfunction
709+
710+ function ! s: drawer ._render_buffers_section (db) abort
711+ call self .add (' Buffers (' .len (a: db .buffers .list ).' )' , ' toggle' , ' buffers' , self .get_toggle_icon (' buffers' , a: db .buffers ), a: db .key_name, 1 , { ' expanded' : a: db .buffers .expanded })
712+ if a: db .buffers .expanded
713+ for buf in a: db .buffers .list
714+ let buflabel = self .get_buffer_name (a: db , buf )
715+ if self .dbui.is_tmp_location_buffer (a: db , buf )
716+ let buflabel .= ' *'
717+ endif
718+ call self .add (buflabel, ' open' , ' buffer' , g: db_ui_icons .buffers , a: db .key_name, 2 , { ' file_path' : buf })
719+ endfor
720+ endif
721+ endfunction
722+
723+ function ! s: drawer ._render_saved_queries_section (db) abort
724+ call self .add (' Saved queries (' .len (a: db .saved_queries.list ).' )' , ' toggle' , ' saved_queries' , self .get_toggle_icon (' saved_queries' , a: db .saved_queries), a: db .key_name, 1 , { ' expanded' : a: db .saved_queries.expanded })
725+ if a: db .saved_queries.expanded
726+ for saved_query in a: db .saved_queries.list
727+ call self .add (fnamemodify (saved_query, ' :t' ), ' open' , ' buffer' , g: db_ui_icons .saved_query, a: db .key_name, 2 , { ' file_path' : saved_query, ' saved' : 1 })
728+ endfor
729+ endif
730+ endfunction
731+
732+ function ! s: drawer ._render_schemas_section (db) abort
733+ if a: db .schema_support
734+ call self .add (' Schemas (' .len (a: db .schemas.items ).' )' , ' toggle' , ' schemas' , self .get_toggle_icon (' schemas' , a: db .schemas), a: db .key_name, 1 , { ' expanded' : a: db .schemas.expanded })
735+ if a: db .schemas.expanded
736+ for schema in a: db .schemas.list
737+ let schema_item = a: db .schemas.items [schema]
738+ let tables = schema_item.tables
739+ call self .add (schema.' (' .len (tables.items ).' )' , ' toggle' , ' schemas->items->' .schema, self .get_toggle_icon (' schema' , schema_item), a: db .key_name, 2 , { ' expanded' : schema_item.expanded })
740+ if schema_item.expanded
741+ call self .render_tables (tables, a: db ,' schemas->items->' .schema.' ->tables->items' , 3 , schema)
742+ endif
743+ endfor
744+ endif
745+ else
746+ call self .add (' Tables (' .len (a: db .tables.items ).' )' , ' toggle' , ' tables' , self .get_toggle_icon (' tables' , a: db .tables), a: db .key_name, 1 , { ' expanded' : a: db .tables.expanded })
747+ call self .render_tables (a: db .tables, a: db , ' tables->items' , 2 , ' ' )
748+ endif
749+ endfunction
750+
722751function ! s: drawer ._is_schema_ignored (schema_name)
723752 for ignored_schema in g: db_ui_hide_schemas
724753 if match (a: schema_name , ignored_schema) > -1
0 commit comments