18
18
19
19
def livewire_message (request , component_name ):
20
20
inst = instance_class (component_name )
21
+ context = {}
21
22
if request .method == "POST" :
22
- inst .parser_payload (request )
23
- resp = inst .render ()
23
+ context = inst .parser_payload (request )
24
+ resp = inst .render (** context )
24
25
return JsonResponse (resp , safe = False )
25
26
26
27
27
-
28
28
class LivewireTemplateTag :
29
- def render_to_templatetag (self ):
29
+ def render_to_templatetag (self , ** kwargs ):
30
30
self .id = get_id ()
31
31
component = self .get_component_name ()
32
- context = self .get_context_data ()
32
+ data = self .get_context_data (** kwargs )
33
33
initial_data = {
34
34
"id" : self .id ,
35
35
"name" : component ,
36
36
"redirectTo" : False ,
37
37
"events" : [],
38
38
"eventQueue" : [],
39
39
"dispatchQueue" : [],
40
- "data" : context ,
40
+ "data" : data ,
41
41
"children" : {},
42
- "effects" :[],
42
+ "effects" : [],
43
43
"checksum" : "9e4c194bb6aabf5f1" , # TODO: checksum
44
44
}
45
+ context = {}
45
46
context ["initial_data" ] = initial_data
46
47
component_template = self .get_template_name ()
47
- self .render (context )
48
+ self .render (** context )
48
49
return self .render_component (component_template , context )
49
50
50
51
class LivewireProcessData :
@@ -64,6 +65,7 @@ def parser_payload(self, request):
64
65
self .request = request
65
66
payload = json .loads (request .body )
66
67
self .id = payload .get ("id" )
68
+ data = payload .get ("data" , {})
67
69
action_queue = payload .get ("actionQueue" , [])
68
70
for action in action_queue :
69
71
action_type = action .get ("type" )
@@ -79,20 +81,16 @@ def parser_payload(self, request):
79
81
patterns
80
82
"""
81
83
local_method = getattr (self , method )
82
- local_method (* params )
84
+ return local_method (* params )
83
85
elif action_type == "syncInput" :
84
- data = {}
85
86
data [action_payload ["name" ]] = action_payload ["value" ]
86
- self .update_context (data )
87
+ return self .update_context (data )
88
+
87
89
88
90
89
91
class LivewireComponent (LivewireTemplateTag , LivewireProcessData ):
90
92
id = None
91
93
92
- def __init__ (self , ** kwargs ):
93
- for key , value in kwargs .items ():
94
- setattr (self , key , value )
95
-
96
94
def get_component_name (self ):
97
95
name = self .__class__ .__name__ .replace ("Livewire" , "" )
98
96
name = snakecase (name )
@@ -101,22 +99,23 @@ def get_component_name(self):
101
99
def get_template_name (self ):
102
100
return self .template_name
103
101
104
- def get_context_data (self ):
102
+ def get_context_data (self , ** kwargs ):
105
103
mount_result = {}
106
104
# call mount if exists
107
105
if hasattr (self , "mount" ) and callable (self .mount ): # Livewire Compatility
108
106
mount_result = self .mount ()
109
-
110
107
params = get_vars (self )
111
108
for property in params :
112
109
mount_result [property ] = getattr (self , property )
110
+ if kwargs :
111
+ mount_result .update (kwargs )
113
112
return mount_result
114
113
115
- def get_dom (self , template_name ):
116
- context = self .get_context_data ()
114
+ def get_dom (self , template_name , context ):
115
+ context = self .get_context_data (** context )
117
116
return self .render_component (template_name , context )
118
117
119
- def render (self , context = {} ):
118
+ def render (self , ** context ):
120
119
"""
121
120
A Livewire component's render method gets called on the initial page load AND every subsequent component update.
122
121
TODO: to Implement
@@ -125,7 +124,7 @@ def render(self, context={}):
125
124
return self .view (template_name , context )
126
125
127
126
def view (self , template_name , context ):
128
- dom = self .get_dom (template_name )
127
+ dom = self .get_dom (template_name , context )
129
128
return self .render_to_response (template_name , dom )
130
129
131
130
def render_component (self , component_template , context = {}):
0 commit comments