210 lines
6.2 KiB
Clojure
210 lines
6.2 KiB
Clojure
(ns commiteth.cards
|
|
(:require [reagent.core :as r]
|
|
[devcards.core]
|
|
[commiteth.core-test]
|
|
[commiteth.svg :as svg]
|
|
[cljs.test :refer-macros [is testing]]
|
|
[devcards.core :refer-macros [defcard-rg
|
|
deftest
|
|
start-devcard-ui!]]))
|
|
|
|
|
|
(enable-console-print!)
|
|
|
|
|
|
(def app-state (r/atom {:repo-state :disabled
|
|
:active-tab :activity
|
|
:user {:login "foobar"
|
|
:profile-image "https://randomuser.me/api/portraits/men/4.jpg"}}))
|
|
|
|
(defn fake-toggle-action [app-state]
|
|
(let [repo-state (:repo-state @app-state)]
|
|
(when-not (= repo-state :busy)
|
|
(swap! app-state assoc :repo-state :busy)
|
|
(let [to-state (if (= repo-state :enabled)
|
|
:disabled
|
|
:enabled)]
|
|
(.setTimeout js/window
|
|
#(swap! app-state assoc :repo-state to-state)
|
|
1000)))))
|
|
|
|
|
|
(defn repo-toggle-button [button-state on-click]
|
|
(case button-state
|
|
:enabled [:div.ui.two.column.container
|
|
[:div.ui.button.small.repo-added-button
|
|
[:i.icon.check]
|
|
"Added"]
|
|
[:a.ui.item.remove-link {:on-click on-click} "Remove"]]
|
|
:disabled [:div.ui.button.small {:on-click on-click} "Add"]
|
|
:busy [:div.ui.button.small.disabled.loading "Busy..."]))
|
|
|
|
(defn repo-dynamic [state-ratom]
|
|
[:div.ui.card
|
|
[:div.content
|
|
[:div.repo-label "here-be-dragons"]
|
|
[:div.repo-description "Here is a description for the repository."]
|
|
[:div.ui.floated.center
|
|
[repo-toggle-button
|
|
(:repo-state @app-state)
|
|
#(fake-toggle-action app-state)]]]])
|
|
|
|
(defcard-rg repo-card-dynamic
|
|
[repo-dynamic app-state]
|
|
app-state)
|
|
|
|
|
|
(defn dropdown-component [state-ratom]
|
|
(let [menu (if (:dropdown-open? @state-ratom)
|
|
[:div.ui.menu.transition.visible]
|
|
[:div.ui.menu])]
|
|
[:div.ui.right.dropdown.item
|
|
{:on-click #(swap! state-ratom update-in [:dropdown-open?] not)}
|
|
(:name @state-ratom)
|
|
[:i.dropdown.icon]
|
|
(into menu
|
|
(for [item (:items @state-ratom)]
|
|
^{:key item} [:div.item item]))]))
|
|
|
|
|
|
(defn dropdown-component2 [dropdown-open? caption items]
|
|
(let [menu (if @dropdown-open?
|
|
[:div.ui.menu.transition.visible]
|
|
[:div.ui.menu])]
|
|
[:div.ui.browse.item.dropdown
|
|
{:on-click #(swap! dropdown-open? not)}
|
|
caption
|
|
[:i.dropdown.icon]
|
|
(into menu
|
|
(for [item items]
|
|
^{:key item} [:div.item item]))]))
|
|
|
|
|
|
(defn user-component [state-ratom]
|
|
(if-let [user (get-in @state-ratom [:user])]
|
|
(let [login (:login user)]
|
|
[:div.ui.text.menu
|
|
[:div.item
|
|
[:img.ui.mini.circular.image {:src (:profile-image user)}]]
|
|
[dropdown-component2 (r/atom false) login ["Update address" "Sign out"]]
|
|
|
|
#_[:a.browse.item.username-label
|
|
;; {:href (str "https://github.com/" login)}
|
|
|
|
;; login
|
|
;; [:i.dropdown.icon]
|
|
|
|
;; [:a.ui.button.tiny {:href "/logout"} "Sign out"]
|
|
]])
|
|
[:a.ui.button.tiny {:href "#";;js/authorizeUrl
|
|
} "Sign in"]))
|
|
|
|
(defn activate-tab! [tab]
|
|
(swap! app-state assoc :active-tab tab))
|
|
|
|
(defn tabs [app-state]
|
|
(let [active-tab (:active-tab app-state)]
|
|
[:div.ui.attached.tabular.menu.tiny
|
|
(for [[tab caption] [[:activity "Activity"]
|
|
;; NOTE(oskarth) Disabling this as repo management happens through GH app
|
|
#_[:manage "Repositories"]
|
|
[:bounties "Bounties"]]]
|
|
(let [props {:class (str "ui item"
|
|
(when (= active-tab tab) " active"))
|
|
:on-click #(activate-tab! tab)}]
|
|
^{:key tab} [:div props caption]))]))
|
|
|
|
(defn page-header-dynamic [state-ratom]
|
|
[:div.ui.grid.commiteth-header
|
|
[:div.ui.grid.four.column.container
|
|
[:div.column
|
|
[:img {:src "/img/logo.svg"}]]
|
|
^{:key 1} [:div.column]
|
|
^{:key 2} [:div.column]
|
|
[:div.column
|
|
[user-component state-ratom]]]
|
|
(when-not (:user @state-ratom)
|
|
[:div.ui.text.content.justified
|
|
[:div.ui.divider.hidden]
|
|
[:h2.ui.header "Commit ETH"]
|
|
[:h3.ui.subheader "Earn ETH by committing to open source projects"]
|
|
[:div.ui.divider.hidden]])
|
|
[tabs @state-ratom]])
|
|
|
|
(defcard-rg page-header
|
|
[page-header-dynamic app-state]
|
|
app-state
|
|
{})
|
|
|
|
#_(defcard-rg login-button
|
|
[login-button {:login "foobar"}])
|
|
|
|
|
|
(defn top-hunters-dynamic [state-ratom]
|
|
[:div "TODO"])
|
|
|
|
|
|
|
|
|
|
#_{:activity-item {:type :bounty-created
|
|
:issue-id 1
|
|
:foo 42}}
|
|
|
|
(defcard-rg feeditem-bounty-created
|
|
"An activity feed item with a bounty-created event"
|
|
[:div.ui.segment
|
|
[:div.ui.grid
|
|
[:div.six.column.row
|
|
[:div.column
|
|
[:img.ui.tiny.circular.image {:src "https://randomuser.me/api/portraits/men/4.jpg"}]]
|
|
[:div.five.wide.column
|
|
[:div.ui.grid
|
|
[:div.row
|
|
[:h3 "Random User"]]
|
|
[:div.row
|
|
[:div.content
|
|
"ETH 15 bounty for " [:a {:href "#"} "Fix crash"]]]
|
|
[:div.row
|
|
[:div.ui.label.tiny "ETH 15"]
|
|
[:div.time "2h ago"]]]]]]])
|
|
|
|
|
|
(defcard-rg feeditem-claim-submitted
|
|
"An activity feed item with a claim event"
|
|
[:div.ui.segment
|
|
[:div.ui.grid
|
|
[:div.six.column.row
|
|
[:div.column
|
|
[:img.ui.tiny.circular.image {:src "https://randomuser.me/api/portraits/men/5.jpg"}]]
|
|
[:div.five.wide.column
|
|
[:div.ui.grid
|
|
[:div.row
|
|
[:h3 "Pseudo-random User"]]
|
|
[:div.row
|
|
[:div.content
|
|
"Submitted a claim for " [:a {:href "#"} "Fix crash"]]]
|
|
[:div.row
|
|
[:div.time "2h ago"]]]]]]])
|
|
|
|
|
|
(defcard-rg user-menu
|
|
"Top right user menu component"
|
|
(fn [state _]
|
|
[:div.ui.text.menu
|
|
[:div.ui.item
|
|
[:img.ui.mini.circular.image {:src "https://randomuser.me/api/portraits/men/4.jpg"}]]
|
|
[dropdown-component state]])
|
|
(r/atom {:dropdown-open? false
|
|
:name "Random User"
|
|
:items ["foo" "bar"]})
|
|
{:inspect-data true})
|
|
|
|
|
|
(defcard-rg svg-test
|
|
(fn []
|
|
[svg/app-logo]))
|
|
|
|
|
|
#_(deftest tests-can-also-be-done-here
|
|
(is (= 0 0)))
|