From bba31ce5648894a7568ccf2a4ff080fe4a591dc2 Mon Sep 17 00:00:00 2001 From: totoro Date: Sun, 21 May 2017 11:14:40 +0200 Subject: [PATCH] manage the hk_filter for rendreing table in list add order_by parameter in get_all_XXX_by_clause --- model/display.anubis | 9 +++++++++ view/types/hk_view.anubis | 2 +- view/view_table_manager_types.anubis | 3 ++- view/view_table_renderer.anubis | 171 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--------------------------- view/web_action.anubis | 2 ++ 5 files changed, 158 insertions(+), 29 deletions(-) diff --git a/model/display.anubis b/model/display.anubis index 9b36ec7..c5cbf68 100644 --- a/model/display.anubis +++ b/model/display.anubis @@ -31,6 +31,15 @@ public define HK_Viewer ( String view_name, List(String) columns, + WEB_Action_Name action_name + )= + list_view(view_name, columns, [], action_name). + +public define HK_Viewer + list_view + ( + String view_name, + List(String) columns, List(HK_Filter) l_filter )= list_view(view_name, columns, l_filter, no_action). diff --git a/view/types/hk_view.anubis b/view/types/hk_view.anubis index d13add3..639ffaf 100644 --- a/view/types/hk_view.anubis +++ b/view/types/hk_view.anubis @@ -94,7 +94,7 @@ public type VT_view_row: public type VT_View_DB_Calls: vt_view_db_calls( (SQLite3DataBase db, String clause) -> Int get_count, - (SQLite3DataBase db, HK_Referer referer, String clause) -> JsonMember get_rows_json + (SQLite3DataBase db, HK_Referer referer, String clause, String order_by) -> JsonMember get_rows_json // (SQLite3DataBase db, String clause) -> List(VT_view_row) get_rows ) . diff --git a/view/view_table_manager_types.anubis b/view/view_table_manager_types.anubis index 1175d63..ce938b0 100644 --- a/view/view_table_manager_types.anubis +++ b/view/view_table_manager_types.anubis @@ -8,6 +8,7 @@ read hayamiki_lib/view/types/hk_form.anubis read hayamiki_lib/view/types/hk_view.anubis +read hayamiki_lib/view/types/hk_filter.anubis read calexium_lib/web/CXM_common.anubis public type VTM_edit: @@ -34,7 +35,7 @@ public type TM_delete_list: tm_delete_list(List(TM_delete) list). public type VTM_view: - vtm_view(String table_name, (String view_name) -> VT_view get_view, (One) -> List(String) get_all_view_name). + vtm_view(String table_name, (String view_name) -> VT_view get_view, (One) -> List((String, List(HK_Filter))) get_all_view_name). public type VTM_view_list: vtm_view_list(List(VTM_view) list). diff --git a/view/view_table_renderer.anubis b/view/view_table_renderer.anubis index 446318b..583a6e2 100644 --- a/view/view_table_renderer.anubis +++ b/view/view_table_renderer.anubis @@ -39,31 +39,140 @@ read calexium_lib/web/widgets/css_helper.anubis read calexium_lib/web/widgets/button.anubis read calexium_lib/web/CXM_urllib.anubis +public define List(HK_Filter) + get_view_filters + ( + String view_name, + List((String, List(HK_Filter))) all_view_name + )= + if all_view_name is + { + [] then [], + [h . t] then + since h is (v_name, filters), + if v_name = view_name then + filters + else + get_view_filters(view_name, t) + } +. + +public define HK_Filter + get_default_filter + ( + VTM_view vtm_v, //virtual table manager view + String view_name // + )= + with all_view_name = vtm_v.get_all_view_name(unique), + with filters = get_view_filters(view_name, all_view_name), + filter_len = length(filters), + + if filter_len = 0 then + hk_filter("", "") + else + if filters is + { [] then hk_filter("", ""), + [h . _] then h + } +. + +public define HK_Filter + get_filter_from_name + ( + List(HK_Filter) filters, + String _filter_name + )= + if filters is + { + [] then hk_filter("", ""), + [h . t] then + if h.filter_name = _filter_name then + h + else + get_filter_from_name(t, _filter_name) + } +. + +public define HK_Filter + get_filter_from_name + ( + VTM_view vtm_v, //virtual table manager view + String view_name, // + String filter_name + )= + with all_view_name = vtm_v.get_all_view_name(unique), + with filters = get_view_filters(view_name, all_view_name), + + get_filter_from_name(filters, filter_name) +. + +define HTML_In_Form +/* create a selector for choosing the view name. + * The selector create an immediate action. This means when the entry is selected, the action is fired. + * If only one view exists, the selector is not created + */ + table_filter_selector + ( + (String) -> String _T, //translator function + List((String, List(HK_Filter))) all_view_name, //virtual table manager view + String current_view, // + String current_filter + )= + with filters = get_view_filters(current_view, all_view_name), + filter_len = length(filters), + println("filter length "+filter_len); + + if filter_len = 0 then + hidden(wan("filter_name"), wav("no_filter")) + else if filter_len = 1 then + with filter_name = if filters is { [] then "", [h . _] then h.filter_name }, + hidden(wan("filter_name"), wav(filter_name)) + else + actioner(same, same, + immediate_selector([id("select_view")], + wan("filter_name"), //web arg name of the selected entry + 1, + map(((HK_Filter) filter) |-> println("selector filter_name "+filter.filter_name); ([], wav(filter.filter_name), _T(filter.filter_name)), filters), + success(init(current_filter)), + "" + ), + hkc_list_view_filter, //web_actioner + [], []) +. + define HTML_Off_Form /* create a selector for choosing the view name. * The selector create an immediate action. This means when the entry is selected, the action is fired. * If only one view exists, the selector is not created */ - table_view_selector + table_view_filter_selector ( (String) -> String _T, //translator function VTM_view vtm_v, //virtual table manager view - String current_view // + String current_view, // + String current_filter )= - if length(vtm_v.get_all_view_name(unique)) = 1 then - empty - else - form( "table_view_selector", [], "", [], - actioner(same, same, - immediate_selector([id("select_view")], - wan("view_name"), //web arg name of the selected entry - 1, - map((String view_name) |-> ([], wav(view_name), _T(view_name)), vtm_v.get_all_view_name(unique)), - success(init(current_view)), - "" - ), - hkc_list_view, - [("table_name", vtm_v.table_name)], [])) + with all_view_name = vtm_v.get_all_view_name(unique), + form( "table_view_filter_selector", [], "", [], + sequence([ + hidden(wan("table_name"), wav(vtm_v.table_name)), + (if length(all_view_name) = 1 then + empty + else + actioner(same, same, + immediate_selector([id("select_view")], + wan("view_name"), //web arg name of the selected entry + 1, + map(((String, List(HK_Filter)) name_and_filters) |-> since name_and_filters is (view_name, filters), ([], wav(view_name), _T(view_name)), all_view_name), + success(init(current_view)), + "" + ), + hkc_list_view_name, //web_actioner + [], [] + )), //!actionner + table_filter_selector(_T, all_view_name, current_view, current_filter) + ]) + )//!form . @@ -246,8 +355,9 @@ public define HTML_Partial_Content SQLite3DataBase db, String uid, VT_view rows, + String filter_name, (String) -> String _T, - String lang, + String lang, String clause, HK_Referer table_referer )= @@ -273,7 +383,7 @@ public define HTML_Partial_Content .autocomplete(\"option\", \"source\", newUniqueValues); }; $(\"#"+uid+"_grid\").jqGrid({ -url:'?aws_controller=hk_c&aws_action=grid_view&table_name="+rows.table_name+"&view_name="+rows.view_name+filter_clause+referer_arg+"',"+ +url:'?aws_controller=hk_c&aws_action=grid_view&table_name="+rows.table_name+"&view_name="+rows.view_name+"&filter_name="+filter_name+filter_clause+referer_arg+"',"+ "datatype: \"json\", "+ to_jqGrid_ColModel(db, table_referer, _T, rows.view_model.list)+","+ @@ -329,15 +439,19 @@ public define HTML_Partial_Content String action_name, VTM_view vtm_v, String view_name, + String filter_name, String f_clause, //filter for current table HK_Referer table_referer, String fk_clause //filter for foreign key of the table (one to many) ) = + with current_view = vtm_v.get_view(view_name), + //with _filter = get_filter_from_name(vtm_v, view_name, filter_name), + //with f_clause = if _filter.filter_string = "" then "" else if _f_clause = "" then _filter.filter_string else "("+_filter.filter_string+") AND "+_f_clause, with filter_clause = if f_clause = "" then "" else "&clause="+url_quote(f_clause), //with foreign_clause = if fk_clause = "" then "" else "&fk_clause="+url_quote(fk_clause), with referer_arg = "&"+to_Web_arg(table_referer, ""), - with current_view = vtm_v.get_view(view_name), + with uid = generate_random_string(20)+"_", partial_content([ js(js_file("js/jscolor.min.js")) ]+jq_dialog_init + jq_datetimepicker_init(lang), @@ -349,10 +463,10 @@ public define HTML_Partial_Content // (+) icon for adding new entry partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id(uid+action_name+"_dlg_ajax")))], "", [])), // view selector if there is more than one view name - table_view_selector(_T, vtm_v, view_name), + table_view_filter_selector(_T, vtm_v, view_name, filter_name), ])), //grid with data - partial(jqGrid_table(db, uid, current_view, _T, lang, f_clause, table_referer)) + partial(jqGrid_table(db, uid, current_view, filter_name, _T, lang, f_clause, table_referer)) //partial(jquery_datatable(uid+"table_view", view_table_form(_T, uid, action_name, rows), true, false, jq_dt_pt_full_numbers, false, scrollY(500), true, true, true, lang, no_extra, web_site_directory)) ]))]). @@ -366,6 +480,7 @@ public define HTML_Partial_Content String action_name, VTM_view vtm_v, String view_name, + String filter_name, String f_clause, //filter for current table HK_Referer table_referer, String fk_clause //filter for foreign key of the table (one to many) @@ -383,7 +498,7 @@ public define HTML_Partial_Content partial(jq_dialog_create(dialog_id(uid+action_name+"_dlg_ajax"), ajax(controller_action("hk_c", "ajax_edit_table&table_name="+current_view.table_name+filter_clause+referer_arg)))), partial(img_button(icn16_add, [event(onclick, jq_dialog_open(dialog_id(uid+action_name+"_dlg_ajax")))], "", [])), //table_view_selector(_T, vtm_v, view_name), - partial(jqGrid_table(db, uid, current_view, _T, lang, fk_clause, table_referer)), + partial(jqGrid_table(db, uid, current_view, filter_name, _T, lang, fk_clause, table_referer)), //partial(jquery_datatable(uid+"table_view", view_table_form(_T, uid, action_name, rows), true, false, jq_dt_pt_full_numbers, false, scrollY(200), true, true, true, lang, no_extra, web_site_directory)) ]). @@ -394,19 +509,20 @@ public define Maybe(HTML_Partial_Content) (String) -> String _T, String lang, String web_site_directory, - String table, + String table_name, String view_name, String action_name, + String filter_name, String f_clause, HK_Referer table_referer, String fk_clause, VTM vtm ) = - if vtm_get_view(table, vtm.view_list) is + if vtm_get_view(table_name, vtm.view_list) is { failure then failure, success(vtm_v) then - success(view_table_page(db, _T, lang, web_site_directory, action_name, vtm_v, view_name, f_clause, table_referer, fk_clause)) + success(view_table_page(db, _T, lang, web_site_directory, action_name, vtm_v, view_name, filter_name, f_clause, table_referer, fk_clause)) }. public define Maybe(HTML_Partial_Content) @@ -418,6 +534,7 @@ public define Maybe(HTML_Partial_Content) String web_site_directory, String table, String view_name, + String filter_name, String action_name, String f_clause, HK_Referer table_referer, @@ -428,7 +545,7 @@ public define Maybe(HTML_Partial_Content) { failure then failure, success(vtm_v) then - success(table_in_list_view(db, _T, lang, web_site_directory, action_name, vtm_v, view_name, f_clause, table_referer, fk_filter)) + success(table_in_list_view(db, _T, lang, web_site_directory, action_name, vtm_v, view_name, filter_name, f_clause, table_referer, fk_filter)) }. define CXM_Form_Field @@ -647,7 +764,7 @@ public define HTML_Partial_Content |-> since tab is hk_form_tab(fk_table_name, fk_col_name, list_view_name), with referer = hk_referer(table_name, id, fk_table_name, fk_col_name), - if table_in_list_view_only(db, _T, lang, web_site_directory, fk_table_name, list_view_name, "edit", "", referer, fk_clause, vtm) is + if table_in_list_view_only(db, _T, lang, web_site_directory, fk_table_name, list_view_name, "", "edit", "", referer, fk_clause, vtm) is { failure then empty, success(p_content) then partial(p_content) diff --git a/view/web_action.anubis b/view/web_action.anubis index 34111fb..9ee8f1a 100644 --- a/view/web_action.anubis +++ b/view/web_action.anubis @@ -15,6 +15,8 @@ public define WEB_Action_Name hkc_view_editor = controller_action("hk_c" public define WEB_Action_Name hkc_grid_view = controller_action("hk_c", "grid_view"). public define WEB_Action_Name hkc_grid_action = controller_action("hk_c", "grid_action"). public define WEB_Action_Name hkc_list_view = controller_action("hk_c", "view_table"). +public define WEB_Action_Name hkc_list_view_name = controller_action("hk_c", "hkc_list_view_name"). +public define WEB_Action_Name hkc_list_view_filter = controller_action("hk_c", "hkc_list_view_filter"). public define WEB_Action_Name hkc_save_row = controller_action("hk_c", "save_row"). public define WEB_Action_Name hkc_save_row_and_new = controller_action("hk_c", "save_row_and_new"). public define WEB_Action_Name hkc_update_row = controller_action("hk_c", "update_row"). -- libgit2 0.21.4