Silpa
Silpa

Reputation: 133

how to load another page in cljs after post request using cljs-ajax

I have created a login page login.cljs and handler.clj.here is my code login.cljs:-

 (defn handler [response]
  (let[status (aget (clj->js response) "status")
   msg (str (aget (clj->js response) "greeting"))]
   (if (= status 200)
    (home/home-root)
    (js/alert "Invalid username or password"))
   ))
 (defn handle-submit [e app owner]
  (let [[user user-node] (value-from-node owner "username")
        [pass pass-node] (value-from-node owner "password")]
  (POST "/hello"
     {:params {:username user :password pass}
     :handler handler
     :error-handler error-handler
     :format :json
     :response-format :json})
   ))

(defn login-view [app owner]
  (reify
    om/IRender(render [this]
     (dom/div nil
      (dom/h1 nil "Login")
       (dom/input #js {:type "text" :placeholder "Your Name" :ref "username"})
       (dom/input #js {:type "password" :placeholder "Your Password" :ref "password"})
       (dom/button
             #js { :onClick (fn [event] (handle-submit event app owner))}
             "submit")
    ))))
(defn say-hello []
 (om/root
 {} login-view (.getElementById js/document "content")))

home.cljs:-

(defn home-view [app owner]
    (reify
      om/IRender
      (render [this]
        (dom/div nil "Welcome"
  ))))
(defn home-root []
  (om/root
  {}
  home-view
  (.getElementById js/document "content"))

handler.clj:-

(defn login-check! [request]
  (let [user (get-in request [:params :username])
    pass (get-in request [:params :password])]
   (cond
    (and(= user "admin")(= pass "admin")) (response/response {:greeting user
                     :status 200})
   :else (response/response {:greeting "Invalid username or password"
                          :status 403}))
  ))

 (defroutes app-routes
  (GET "/" [] (response/resource-response "index.html" {:root "public"}))
  (route/resources "/")
  (POST "/hello" request (login-check! request))
  (GET "/home" request (response/response {:body "home"}))
  (route/not-found "Not Found"))

I need to load home page view when its a valid login. here i have called another cljs method 'home/home-root' but its not working.

Upvotes: 2

Views: 473

Answers (1)

Silpa
Silpa

Reputation: 133

Here i got one solution..I don't know how much its correct but its working good I have created a new defn page using reagent as follows:-

 (defn page [page-component]
       (reagent/render-component [page-component] 
                             (.getElementById js/document "content")))

and called this function from login.cljs handler method:

 (defn handler [response]
      (page home-root))

now the page method will be called and home-root cljs will be passed to it.

Upvotes: 1

Related Questions