Browse Source

default value for comboLookupModify

bohdan.kotenko 3 years ago
parent
commit
ec20601641

+ 1 - 1
include/comboLookup.hrl

@@ -9,7 +9,7 @@
 -record(comboNext,   { pos=[],  count=[], feed=[]}).
 -record(comboScroll, { uid=[], dom=[], delegate=[] }).
 -record(comboInsert, { uid=[], dom=[], rows=[], chunks=[], status=[], delegate=[], feed=[] }).
--record(comboAdd,    { list_id=[], value=[], bind=[], delegate=[], pos=[], feed=[] }).
+-record(comboAdd,    { list_id=[], value=[], bind=[], delegate=[], pos=[], feed=[], default=[]}).
 -record(comboModify, { list_id=[], item_id=[], value=[], bind=[], modify_bind=[], delegate=[], pos=[], feed=[] }).
 -record(comboLookup, { ?ELEMENT_BASE(element_comboLookup),
     value=[],

+ 1 - 1
include/comboLookupModify.hrl

@@ -4,6 +4,6 @@
 -include_lib("nitro/include/nitro.hrl").
 
 -record(comboLookupModify, {?ELEMENT_BASE(element_comboLookupModify), input = [], disabled = false,
-                            values = [], modify_pos = [], modify_feed = [], modify_module = []}).
+                            values = [], modify_pos = [], modify_feed = [], modify_module = [], modify_default = []}).
 
 -endif.

+ 1 - 1
include/comboLookupModify_item.hrl

@@ -4,6 +4,6 @@
 -include_lib("nitro/include/nitro.hrl").
 
 -record(comboLookupModify_item, {?ELEMENT_BASE(element_comboLookupModify_item), list_id = [], value = [],
-                                 pos = [], feed = [], disabled = false}).
+                                 pos = [], feed = [], default = [], disabled = false}).
 
 -endif.

+ 2 - 2
lib/combo.ex

@@ -78,10 +78,10 @@ defmodule NITRO.Combo do
     end, rows)
   end
 
-  def comboAdd(NITRO.comboAdd(list_id: list, value: value, bind: bind, delegate: module, pos: pos, feed: feed)) do
+  def comboAdd(NITRO.comboAdd(list_id: list, value: value, bind: bind, delegate: module, pos: pos, feed: feed, default: default)) do
     :nitro.insert_bottom(
       list,
-      NITRO.comboLookupModify_item(list_id: list, value: value, bind: bind, pos: pos, feed: feed, delegate: module)
+      NITRO.comboLookupModify_item(list_id: list, value: value, bind: bind, pos: pos, feed: feed, delegate: module, default: default)
     )
   end
 

+ 1 - 1
mix.exs

@@ -4,7 +4,7 @@ defmodule NITRO.Mixfile do
   def project do
     [
       app: :nitro,
-      version: "7.4.0",
+      version: "7.4.1",
       description: "NITRO Nitrogen Web Framework",
       package: package(),
       deps: deps()

+ 3 - 2
priv/js/comboLookup.js

@@ -83,7 +83,7 @@ function comboLookupChange(dom) {
 function comboLookupClick(uid, dom, feed, mod) {
   var dropdown = qi(dom).closest('.dropdown');
   var char = event.which || event.keyCode;
-  if (char ==  1 && !activeCombo && qi(dom).value == '') {
+  if (char ==  1 && !activeCombo && (qi(dom).value == '' || qi(dom).getAttribute('nested'))) {
     activeCombo = dom;
     currentItem = undefined;
     dropdown.classList.add('dropdown-open');
@@ -192,7 +192,8 @@ function comboLookupModifyAdd(listId, inputId) {
                      dec(unbase64(bind)),
                      dec(unbase64(list.getAttribute('data-delegate'))),
                      dec(unbase64(list.getAttribute('data-pos'))),
-                     dec(unbase64(list.getAttribute('data-feed')))));
+                     dec(unbase64(list.getAttribute('data-feed'))),
+                     dec(unbase64(list.getAttribute('data-default')))));
       }
     }
   }

+ 3 - 5
src/elements/combo/element_comboLookup.erl

@@ -14,15 +14,13 @@ proto(#comboModify{delegate=Module}=Msg) -> Module:proto(Msg).
 render_element(#comboLookup{id=Id, style=Style, value = Val, bind = Object,
   feed = Feed, disabled = Disabled, delegate = Module, class = Class, nested = Nested} = Data) ->
   Uid = nitro_pi:uid([], []),
+  DataNested = case Nested of [] -> []; _ -> [{<<"nested">>, Nested}] end,
+  DataBind = case Object of [] -> []; _ -> [{<<"data-bind">>, base64:encode(term_to_binary(Object))}] end,
   nitro:render(
     #panel{id=form:atom([lookup, Id]), class=lists:flatten([dropdown, Class]),
            body=[#input{id=Id, disabled = Disabled, type="comboLookup",
                         autocomplete = "off",
-                        data_fields =
-                          case Nested of
-                            [] -> [];
-                            X -> [{<<"nested">>, X}]
-                          end,
+                        data_fields = DataNested ++ DataBind,
                         onkeyup = nitro:jse("comboLookupKeyup('"
                                ++ nitro:to_list(Uid) ++ "','"
                                ++ nitro:to_list(Id) ++ "','"

+ 5 - 3
src/elements/combo/element_comboLookupModify.erl

@@ -5,7 +5,8 @@
 -include_lib("nitro/include/event.hrl").
 -export([render_element/1]).
 
-render_element(#comboLookupModify{id = Id, input = Input, disabled = Disabled, validation = Validation, values = Values, modify_pos = Pos, modify_feed = Feed, modify_module = Module}) ->
+render_element(#comboLookupModify{id = Id, input = Input, disabled = Disabled, validation = Validation, values = Values,
+  modify_pos = Pos, modify_feed = Feed, modify_module = Module, modify_default = Default}) ->
   ListId = form:atom([Id, "list"]),
   InputId = element(#element.id, Input),
   InputBody =
@@ -19,7 +20,7 @@ render_element(#comboLookupModify{id = Id, input = Input, disabled = Disabled, v
           ]
         }
     end,
-  ProtoItem = #comboLookupModify_item{list_id = ListId, pos = Pos, feed = Feed, delegate = Module, disabled = Disabled},
+  ProtoItem = #comboLookupModify_item{list_id = ListId, pos = Pos, feed = Feed, delegate = Module, default = Default, disabled = Disabled},
   ListBody =
     case Values of
       {view_value_pairs, X} -> [ProtoItem#comboLookupModify_item{value = Value, bind = Bind} || {Value, Bind} <- X];
@@ -38,7 +39,8 @@ render_element(#comboLookupModify{id = Id, input = Input, disabled = Disabled, v
             {<<"data-modify-list">>, <<"data-modify-list">>},
             {<<"data-pos">>, base64:encode(term_to_binary(Pos))},
             {<<"data-feed">>, base64:encode(term_to_binary(Feed))},
-            {<<"data-delegate">>, base64:encode(term_to_binary(Module))}
+            {<<"data-delegate">>, base64:encode(term_to_binary(Module))},
+            {<<"data-default">>, base64:encode(term_to_binary(Default))}
           ],
           body = ListBody
         }

+ 9 - 4
src/elements/combo/element_comboLookupModify_item.erl

@@ -5,16 +5,21 @@
 -include_lib("nitro/include/event.hrl").
 -export([render_element/1]).
 
-render_element(#comboLookupModify_item{list_id = ListId, value = Value, bind = Bind, pos = Pos, feed = Feed, delegate = Module, disabled = Disabled}) ->
+render_element(#comboLookupModify_item{list_id = ListId, value = Value, bind = OldBind, pos = Pos, feed = Feed, delegate = Module, default = Default, disabled = Disabled}) ->
   Id = form:atom([ListId, erp:guid()]),
   Close =
     case Disabled of
       true -> [];
       _ -> #panel{class = <<"modify_item-close">>, onclick = nitro:jse("this.parentNode.remove();")}
     end,
-  Selected =
+  {Bind, SelectedBind} =
+    case element(Pos, OldBind) of
+      [] -> {setelement(Pos, OldBind, Default), Default};
+      X -> {OldBind, X}
+    end,
+  SelectedValue =
     case erlang:function_exported(Module, view_value, 1) of
-      true -> apply(Module, view_value, [element(Pos, Bind)]);
+      true -> apply(Module, view_value, [SelectedBind]);
       false -> []
     end,
   nitro:render(
@@ -25,7 +30,7 @@ render_element(#comboLookupModify_item{list_id = ListId, value = Value, bind = B
       body = [
         #panel{class = <<"modify_item-title">>, body = Value},
         Close,
-        #comboLookup{id = form:atom([Id, "input"]), feed = Feed, delegate = Module, value = Selected, nested = Id, disabled = Disabled}
+        #comboLookup{id = form:atom([Id, "input"]), feed = Feed, delegate = Module, value = SelectedValue, bind = SelectedBind, nested = Id, disabled = Disabled}
       ]
     }
   ).