var bricks = window.bricks || {}; bricks.AccordionItem = class extends bricks.VBox { constructor(opts){ super(opts); this.set_css('accordion-item'); } } bricks.AccordionInfo = class extends bricks.FHBox { constructor(opts){ super(opts); this.set_css('accordion-item-info'); } } bricks.DynamicAccordion = class extends bricks.VScrollPanel { /* { "data_url", "data_method", "cache_limit", "page_rows", "row_cheight":1.5 "record_view" "content_rely_on" "content_rely_value" "editable" "fields": "record_toolbar", "record_toolbar_collapsable" "header" "content_view" } */ constructor(opts){ super(opts); this.row_cheight = opts.row_cheight || 1.5; // this.set_style('overflow', 'auto'); this.loader = new bricks.PageDataLoader({ url:this.opts.data_url, params:this.opts.data_params, pagerows:this.opts.page_rows, method:this.opts.data_method, cache_pages:this.opts.cache_limit }); this.old_params = null; this.active_item = null; this.active_content = null; this.loading = false; schedule_once(this.build_all.bind(this), 0.1); } async build_all(){ if (this.title){ this.build_title(); } if (this.description){ this.build_description(); } await this.build_toolbar(); await this.build_header(); var filler = new bricks.Filler(); this.container = new bricks.VScrollPanel({ }); filler.add_widget(this.container); this.add_widget(filler); this.container.bind('min_threshold', this.load_previous_page.bind(this)); this.container.bind('max_threshold', this.load_next_page.bind(this)); await this.render(); } build_title(){ var w = new bricks.Title3({ otext:this.title, i18n:true, wrap:true, dynsize:true, halign:'left' }); this.add_widget(w); } build_description(){ var w = new bricks.Text({ otext:this.description, i18n:true, wrap:true, dynsize:true, halign:'left' }); this.add_widget(w); } build_toolbar(){ this.toolbar_w = new bricks.IconTextBar(this.toolbar); this.add_widget(this.toolbar_w); } async build_header(){ this.header_w = await this.build_item(); this.add_widget(this.header_w); /* var w = await this.build_item(); w.set_style('position', 'sticky'); w.set_style('top', 0); return w; */ } async build_item(record){ var item = new bricks.AccordionItem({}); var info = await this.build_info(item, record); var content = new bricks.VBox({ height:'auto', display:'none' }); var build_content = true; if (!record){ build_content = false; } else { if (this.content_rely_on){ var v = this.content_rely_value || true; if(record[this.content_rely_on] != v){ build_content = false; } } } content.set_css('accordion-item-content'); content.hide(); if (record){ info.bind('click', this.line_clicked.bind(this, info, content, record)); } item.add_widget(content); return item; } async build_info(item, record){ if (! this.fields && !record){ return; } var w; var tb = null; var info = new bricks.AccordionInfo({cheight:this.cheight}); info.user_data = record; item.add_widget(info); tb = this.build_record_toolbar(info, record); if (! record){ record = {}; for (var i=0;i