mirror of
https://github.com/status-im/open-bounty.git
synced 2025-01-27 01:41:07 +00:00
Merge remote-tracking branch 'status/develop' into sort-and-filter
This commit is contained in:
commit
1ac3b41488
42
README.md
42
README.md
@ -9,7 +9,6 @@ Live production version:
|
||||
https://openbounty.status.im
|
||||
The `master` branch is automatically deployed here.
|
||||
|
||||
|
||||
Live testnet (Ropsten) version:
|
||||
https://openbounty.status.im:444
|
||||
The `develop` branch is automatically deployed here.
|
||||
@ -20,7 +19,6 @@ The `develop` branch is automatically deployed here.
|
||||
You will need [Leiningen](https://github.com/technomancy/leiningen) 2.0 or above installed.
|
||||
|
||||
### PostgreSQL
|
||||
<<<<<<< HEAD
|
||||
|
||||
Make sure you install [PostgreSQL](https://www.postgresql.org/) and properly set it up:
|
||||
|
||||
@ -39,7 +37,6 @@ lein figwheel
|
||||
lein less auto
|
||||
```
|
||||
|
||||
=======
|
||||
|
||||
Make sure you install [PostgreSQL](https://www.postgresql.org/) and properly set it up:
|
||||
|
||||
@ -56,9 +53,40 @@ Solidity compiler [0.4.15](https://github.com/ethereum/solidity/releases/tag/v0.
|
||||
|
||||
Web3j [2.3.0](https://github.com/web3j/web3j/releases/tag/v2.3.0) is required and the command line tools need to be in $PATH.
|
||||
|
||||
## Running
|
||||
## Application config
|
||||
|
||||
Make sure `env/dev/resources/config.edn` is correctly populated.
|
||||
Make sure that `env/dev/resources/config.edn` is correctly populated. Description of config fields is given below:
|
||||
|
||||
Key | Description
|
||||
--- | ---
|
||||
dev | Currently specifies whether Swagger UI endpoints should be added to routes
|
||||
port | HTTP port for the Ring web app
|
||||
nrepl-port | nREPL port for development
|
||||
jdbc-database-url | PostgreSQL database URL. For instance, URL to local db would be `jdbc:postgresql://localhost/commiteth?user=commiteth&password=commiteth`
|
||||
server-address | URL and port of local server that can be resolved from public internet. It will be used as a redirect URI during GitHub OAuth authorization process
|
||||
eth-account | Ethereum account ID for the bot
|
||||
eth-password | Ethereum account password for the bot
|
||||
eth-rpc-url | RPC URL to Ethereum node, e.g. Geth. Either local or remote
|
||||
eth-wallet-file | Location of wallet file. If Geth is run with the parameters as given below, it will reside under `$HOME/.ropsten/keystore`
|
||||
tokenreg-base-format | Should be set to `:status`
|
||||
github-client-id | Related to OAuth. Copied from GitHub account Settings->Developer settings->OAuth Apps
|
||||
github-client-secret | Related to OAuth. Copied from GitHub account Settings->Developer settings->OAuth Apps
|
||||
github-user | GitHub username for bot account. It is used for posting bounty comments
|
||||
github-password | GitHub password for bot account
|
||||
webhook-secret | Secret string to be used when creating a GitHub App
|
||||
user-whitelist | Set of GitHub user/org IDs to be whitelisted. E.g. `#{"status-im" "your_org"}`
|
||||
testnet-token-data | Token data map, useful if there are Geth connectivity problems
|
||||
|
||||
## GitHub integration
|
||||
Open Bounty uses both OAuth App and GitHub App integration.
|
||||
|
||||
### OAuth App
|
||||
Follow the steps [here](https://developer.github.com/apps/building-oauth-apps/creating-an-oauth-app/). Specify the value of `:server-address` as "Homepage URL", and `:server-address` + `/callback` as "Authorization callback URL". Be sure to copy Client ID and Client Secret values to `config.edn`.
|
||||
|
||||
### GitHub App
|
||||
Follow the steps [here](https://developer.github.com/apps/building-github-apps/creating-a-github-app/). Be sure to specify `:server-address` + `/webhook-app` as "Webhook URL", and `:webhook-secret` as "Webhook Secret".
|
||||
|
||||
## Running
|
||||
|
||||
Lauch a local geth node with the bot account unlocked:
|
||||
|
||||
@ -141,6 +169,10 @@ Landing page is static and different CSS and JS due to time constraints.
|
||||
|
||||
This copies over necessary artifacts to `resources` dir.
|
||||
|
||||
|
||||
### Troubleshooting
|
||||
See the [Cookbook](doc/cookbook.md).
|
||||
|
||||
## License
|
||||
|
||||
Licensed under the [Affero General Public License v3.0](https://github.com/status-im/commiteth/blob/master/LICENSE.md)
|
||||
|
18
doc/cookbook.md
Normal file
18
doc/cookbook.md
Normal file
@ -0,0 +1,18 @@
|
||||
# Cookbook
|
||||
|
||||
Here some common tasks/issues are listed along with their solutions.
|
||||
|
||||
## Change config and restart the service
|
||||
- ssh to the host running commiteth
|
||||
- go to `/opt/commiteth` for prod or `/opt/commiteth-test` for test environment.
|
||||
- there edit `config.edn`
|
||||
- restart the service with `sudo service commiteth-test restart`
|
||||
|
||||
## Manually add a GitHub repo to SOB app
|
||||
Sometimes SOB will not
|
||||
- connect to Postgres instance. Get DB name and username/password from respective `config.edn` (see previous answer). These are set in `:jdbc-database-url` field.
|
||||
- execute the query, e.g.
|
||||
```
|
||||
insert into repositories(repo_id,user_id,owner,repo,hook_id,state,hook_secret,owner_avatar_url) values(116971984,447328, 'aragon', 'aragon-monthly', 0, 2, '', 'https://avatars1.githubusercontent.com/u/24612534?v=4');
|
||||
```
|
||||
Note that the value for repo_id field is GitHub's internal repo ID. One way of obtaining it is navigating to `api.github.com/repos/:owner/:repo_name`, e.g. `https://api.github.com/repos/aragon/aragon-monthly`.
|
@ -29,13 +29,9 @@ You should now see `Bounties`, `Activity`, `Repositories` and `Manage Payouts` t
|
||||
|
||||
### Creating bounty issues
|
||||
|
||||
Before you can create bounties, you need to have administrative access to one or more GitHub repositories. These can be either in the scope of your personal user account or in the scope of a Github orgnazation.
|
||||
Before you can create bounties, you need to add Open Bounty GitHub App to your account or repos. Go to https://github.com/apps/status-open-bounty-app-test (or link to another GitHub App you've created for testing, as described in the [README](README.md) and click Install. Specify whether access to all org repos or specific repos is granted. This will install webhooks for SOB in your repos.
|
||||
|
||||
* click the `Repositories` tab
|
||||
* click on the button `Enable Github Account`
|
||||
* If you have 1 or more Organisation repositories then grant Organisation access to each of them by clicking on the button `Grant`
|
||||
* grant Status Open Bounty the needed addtional permissions for managing repository webhooks, adding and modifying comments by clicking on the button `Authorize status-open-bounty`
|
||||
* now you should see your repositories on the `Repositories` tab, click `Add` on one. If your account isn't whitelisted you will see instructions how to request an access. If your account is whitelisted then new `bounty` label will become available in the GitHub repository's labels and a new webhook should now exist for the repository.
|
||||
* Request for your account to be whitelisted. Contact [Riot](https://chat.status.im) for more information
|
||||
* now, add the `bounty` label to a new or an existing issue. This should cause Status Open Bounty to post a new comment for the issue containing an image with text `Deploying contract, please wait`
|
||||
* once the contract has been mined, the comment will be updated to contain the bounty contract's address and a QR code
|
||||
|
||||
@ -63,3 +59,11 @@ To remove issue from the Bounties list you can close it in GitHub.
|
||||
All bugs should be reported as issues in the [OpenBounty Github repository](https://github.com/status-im/open-bounty/issues).
|
||||
|
||||
Please first check that there is not already a duplicate issue. Issues should contain exact and minimal step-by-step instructions for reproducing the problem.
|
||||
|
||||
### Status Open Bounty end-to-end tests
|
||||
|
||||
Framework for testing located in: `open-bounty/test/end-to-end`
|
||||
|
||||
Full installation and configuring manual: [Status Open Bounty end-to-end tests](https://wiki.status.im/Status_Open_Bounty_end-to-end_tests)
|
||||
|
||||
Currently supports local and Jenkins environment running (you can find example of JenkinsFile in `open-bounty/test` )
|
||||
|
@ -69,6 +69,7 @@
|
||||
[lein-auto "0.1.2"]
|
||||
[lein-less "1.7.5"]
|
||||
[lein-shell "0.5.0"]
|
||||
[cider/cider-nrepl "0.15.0-SNAPSHOT"]
|
||||
[lein-sha-version "0.1.1"]]
|
||||
|
||||
|
||||
@ -143,7 +144,7 @@
|
||||
|
||||
:prep-tasks ["build-contracts" "javac"]
|
||||
:doo {:build "test"}
|
||||
:source-paths ["env/dev/clj" "test/clj" "src/cljs" "env/dev/cljs"]
|
||||
:source-paths ["env/dev/clj" "test/clj"]
|
||||
:resource-paths ["env/dev/resources"]
|
||||
:repl-options {:init-ns user
|
||||
:nrepl-middleware [cemerick.piggieback/wrap-cljs-repl]}
|
||||
|
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><title>icon_sl</title><g fill="#000"><path d="M12.632 3.316H7.893a2.365 2.365 0 0 0-2.368 2.369v11.821a2.365 2.365 0 0 0 2.368 2.369 2.366 2.366 0 0 0 2.369-2.369v-2.369h2.37c3.254 0 5.91-2.656 5.91-5.911 0-3.254-2.656-5.91-5.91-5.91z"/><path d="M7.905 19.277a1.771 1.771 0 0 1-1.771-1.771V5.673a1.77 1.77 0 0 1 1.759-1.772h4.739a5.336 5.336 0 0 1 5.325 5.325 5.334 5.334 0 0 1-5.325 5.324H9.676v2.956c0 .967-.794 1.771-1.771 1.771z"/><path d="M7.905 18.68a1.185 1.185 0 0 1-1.185-1.186V5.673c0-.645.517-1.173 1.161-1.185h4.751a4.734 4.734 0 0 1 4.726 4.727 4.74 4.74 0 0 1-4.726 4.726H9.09v3.541c0 .666-.529 1.198-1.185 1.198z"/><path d="M7.905 18.094a.596.596 0 0 1-.598-.6V5.673c0-.322.252-.587.574-.598h4.751a4.144 4.144 0 0 1 4.14 4.14 4.145 4.145 0 0 1-4.14 4.14h-4.13v4.139c0 .334-.264.6-.597.6z"/><path d="M7.905 12.768h4.727a3.556 3.556 0 0 0 3.554-3.552 3.55 3.55 0 0 0-3.554-3.554H7.905v7.106z"/><path d="M8.502 12.182V6.26h4.14a2.953 2.953 0 0 1 2.955 2.956 2.954 2.954 0 0 1-2.955 2.956h-4.14v.01z"/><path d="M9.09 11.595V6.857h3.542a2.366 2.366 0 0 1 2.369 2.369 2.366 2.366 0 0 1-2.369 2.369H9.09z"/><path d="M9.676 11.01V7.444h2.956a1.783 1.783 0 0 1 0 3.566H9.676z"/><path d="M10.262 10.411v-2.38h2.37c.654 0 1.195.53 1.195 1.195 0 .668-.528 1.196-1.195 1.196h-2.37v-.011z"/><path d="M10.861 9.825V8.617h1.771c.333 0 .599.265.599.599a.595.595 0 0 1-.599.598h-1.771v.011z"/><ellipse cx="7.827" cy="5.678" rx="2.369" ry="2.369"/><path d="M18.036 16.137a2.361 2.361 0 1 1-3.863 2.716l-3.542-5.062a2.362 2.362 0 0 1 3.865-2.713l3.54 5.059z"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><title>icon_sl</title><g fill="#FFF"><path d="M12.632 3.316H7.893a2.365 2.365 0 0 0-2.368 2.369v11.821a2.365 2.365 0 0 0 2.368 2.369 2.366 2.366 0 0 0 2.369-2.369v-2.369h2.37c3.254 0 5.91-2.656 5.91-5.911 0-3.254-2.656-5.91-5.91-5.91z"/><path d="M7.905 19.277a1.771 1.771 0 0 1-1.771-1.771V5.673a1.77 1.77 0 0 1 1.759-1.772h4.739a5.336 5.336 0 0 1 5.325 5.325 5.334 5.334 0 0 1-5.325 5.324H9.676v2.956c0 .967-.794 1.771-1.771 1.771z"/><path d="M7.905 18.68a1.185 1.185 0 0 1-1.185-1.186V5.673c0-.645.517-1.173 1.161-1.185h4.751a4.734 4.734 0 0 1 4.726 4.727 4.74 4.74 0 0 1-4.726 4.726H9.09v3.541c0 .666-.529 1.198-1.185 1.198z"/><path d="M7.905 18.094a.596.596 0 0 1-.598-.6V5.673c0-.322.252-.587.574-.598h4.751a4.144 4.144 0 0 1 4.14 4.14 4.145 4.145 0 0 1-4.14 4.14h-4.13v4.139c0 .334-.264.6-.597.6z"/><path d="M7.905 12.768h4.727a3.556 3.556 0 0 0 3.554-3.552 3.55 3.55 0 0 0-3.554-3.554H7.905v7.106z"/><path d="M8.502 12.182V6.26h4.14a2.953 2.953 0 0 1 2.955 2.956 2.954 2.954 0 0 1-2.955 2.956h-4.14v.01z"/><path d="M9.09 11.595V6.857h3.542a2.366 2.366 0 0 1 2.369 2.369 2.366 2.366 0 0 1-2.369 2.369H9.09z"/><path d="M9.676 11.01V7.444h2.956a1.783 1.783 0 0 1 0 3.566H9.676z"/><path d="M10.262 10.411v-2.38h2.37c.654 0 1.195.53 1.195 1.195 0 .668-.528 1.196-1.195 1.196h-2.37v-.011z"/><path d="M10.861 9.825V8.617h1.771c.333 0 .599.265.599.599a.595.595 0 0 1-.599.598h-1.771v.011z"/><ellipse cx="7.827" cy="5.678" rx="2.369" ry="2.369"/><path d="M18.036 16.137a2.361 2.361 0 1 1-3.863 2.716l-3.542-5.062a2.362 2.362 0 0 1 3.865-2.713l3.54 5.059z"/></g></svg>
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
@ -72,7 +72,7 @@ height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
|
||||
ga('create', 'UA-79146816-2', 'auto');
|
||||
ga('create', 'UA-79146816-1', 'auto');
|
||||
ga('send', 'pageview');
|
||||
</script>
|
||||
<script type="text/javascript" id="hs-script-loader" async defer src="//js.hs-scripts.com/3954379.js"></script>
|
||||
|
@ -2,6 +2,7 @@
|
||||
(:require [re-frame.core :as rf]
|
||||
[reagent.core :as r]
|
||||
[commiteth.common :refer [moment-timestamp
|
||||
items-per-page
|
||||
display-data-page
|
||||
issue-url]]))
|
||||
|
||||
@ -55,21 +56,29 @@
|
||||
(str (subs (str tla) 1) " " balance)])])
|
||||
[:div.time (moment-timestamp updated)]]]])
|
||||
|
||||
|
||||
|
||||
(defn activity-list [activity-page-data]
|
||||
[:div.ui.container.activity-container
|
||||
(if (empty? (:items activity-page-data))
|
||||
[:div.view-no-data-container
|
||||
[:p "No recent activity yet"]]
|
||||
(display-data-page activity-page-data activity-item :set-activity-page-number))])
|
||||
(defn activity-list [{:keys [items item-count page-number total-count]
|
||||
:as activity-page-data}
|
||||
container-element]
|
||||
(if (empty? (:items activity-page-data))
|
||||
[:div.view-no-data-container
|
||||
[:p "No recent activity yet"]]
|
||||
[:div
|
||||
(let [left (inc (* (dec page-number) items-per-page))
|
||||
right (dec (+ left item-count))]
|
||||
[:div.item-counts-label
|
||||
[:span (str "Showing " left "-" right " of " total-count)]])
|
||||
(display-data-page activity-page-data activity-item container-element)]))
|
||||
|
||||
(defn activity-page []
|
||||
(let [activity-page-data (rf/subscribe [:activities-page])
|
||||
activity-feed-loading? (rf/subscribe [:get-in [:activity-feed-loading?]])]
|
||||
activity-feed-loading? (rf/subscribe [:get-in [:activity-feed-loading?]])
|
||||
container-element (atom nil)]
|
||||
(fn []
|
||||
(if @activity-feed-loading?
|
||||
[:div.view-loading-container
|
||||
[:div.ui.active.inverted.dimmer
|
||||
[:div.ui.text.loader.view-loading-label "Loading"]]]
|
||||
[activity-list @activity-page-data]))))
|
||||
[:div.ui.container.activity-container
|
||||
{:ref #(reset! container-element %1)}
|
||||
[:div.activity-header "Activities"]
|
||||
[activity-list @activity-page-data container-element]]))))
|
||||
|
@ -197,28 +197,32 @@
|
||||
(ui-model/bounty-sorting-type->name sorting-type)])])]))))
|
||||
|
||||
(defn bounties-list [{:keys [items item-count page-number total-count]
|
||||
:as bounty-page-data}]
|
||||
[:div.ui.container.open-bounties-container
|
||||
[:div.open-bounties-header "Bounties"]
|
||||
[:div.open-bounties-filter-and-sort
|
||||
[bounty-filters-view]
|
||||
[bounties-sort-view]]
|
||||
(if (empty? items)
|
||||
[:div.view-no-data-container
|
||||
[:p "No matching bounties found."]]
|
||||
[:div
|
||||
(let [left (inc (* (dec page-number) items-per-page))
|
||||
right (dec (+ left item-count))]
|
||||
[:div.item-counts-label
|
||||
[:span (str "Showing " left "-" right " of " total-count)]])
|
||||
(display-data-page bounty-page-data bounty-item :set-bounty-page-number)])])
|
||||
:as bounty-page-data}
|
||||
container-element]
|
||||
(if (empty? items)
|
||||
[:div.view-no-data-container
|
||||
[:p "No matching bounties found."]]
|
||||
[:div
|
||||
(let [left (inc (* (dec page-number) items-per-page))
|
||||
right (dec (+ left item-count))]
|
||||
[:div.item-counts-label
|
||||
[:span (str "Showing " left "-" right " of " total-count)]])
|
||||
(display-data-page bounty-page-data bounty-item container-element)]))
|
||||
|
||||
(defn bounties-page []
|
||||
(let [bounty-page-data (rf/subscribe [:open-bounties-page])
|
||||
open-bounties-loading? (rf/subscribe [:get-in [:open-bounties-loading?]])]
|
||||
open-bounties-loading? (rf/subscribe [:get-in [:open-bounties-loading?]])
|
||||
container-element (atom nil)]
|
||||
(fn []
|
||||
(if @open-bounties-loading?
|
||||
[:div.view-loading-container
|
||||
[:div.ui.active.inverted.dimmer
|
||||
[:div.ui.text.loader.view-loading-label "Loading"]]]
|
||||
[bounties-list @bounty-page-data]))))
|
||||
[:div.ui.container.open-bounties-container
|
||||
{:ref #(reset! container-element %1)}
|
||||
[:div.open-bounties-header "Bounties"]
|
||||
[:div.open-bounties-filter-and-sort
|
||||
[bounty-filters-view]
|
||||
[bounties-sort-view]]
|
||||
[bounties-list @bounty-page-data container-element]]))
|
||||
))
|
||||
|
@ -1,6 +1,7 @@
|
||||
(ns commiteth.common
|
||||
(:require [reagent.core :as r]
|
||||
[re-frame.core :as rf]
|
||||
[clojure.string :as str]
|
||||
[cljsjs.moment]))
|
||||
|
||||
(defn input [val-ratom props]
|
||||
@ -32,17 +33,20 @@
|
||||
|
||||
(def items-per-page 15)
|
||||
|
||||
(defn draw-page-numbers [page-number page-count set-page-kw]
|
||||
(defn draw-page-numbers [page-number page-count container-element]
|
||||
"Draw page numbers for the pagination component.
|
||||
Inserts ellipsis when list is too long, by default
|
||||
max 6 items are allowed"
|
||||
Inserts ellipsis when list is too long, by default
|
||||
max 6 items are allowed"
|
||||
(let [draw-page-num-fn (fn [current? i]
|
||||
^{:key i}
|
||||
[:div.rectangle-rounded
|
||||
(cond-> {}
|
||||
(not current?)
|
||||
(assoc :class "grayed-out"
|
||||
:on-click #(rf/dispatch [set-page-kw i])))
|
||||
(if current?
|
||||
{:class "page-num-active"}
|
||||
{:class "grayed-out-page-num"
|
||||
:on-click #(do
|
||||
(rf/dispatch [:set-page-number i])
|
||||
(when @container-element
|
||||
(.scrollIntoView @container-element)))})
|
||||
i])
|
||||
max-page-nums 6]
|
||||
[:div.page-nums-container
|
||||
@ -79,7 +83,7 @@
|
||||
page-number
|
||||
page-count]}
|
||||
draw-item-fn
|
||||
set-page-kw]
|
||||
container-element]
|
||||
"Draw data items along with pagination controls"
|
||||
(let [draw-items (fn []
|
||||
(into [:div.ui.items]
|
||||
@ -90,14 +94,19 @@
|
||||
forward?)
|
||||
(and (< 1 page-number)
|
||||
(not forward?)))
|
||||
(rf/dispatch [set-page-kw
|
||||
(rf/dispatch [:set-page-number
|
||||
(if forward?
|
||||
(inc page-number)
|
||||
(dec page-number))])))
|
||||
(dec page-number))])
|
||||
(when @container-element
|
||||
(.scrollIntoView @container-element))))
|
||||
draw-rect (fn [direction]
|
||||
(let [forward? (= direction :forward)]
|
||||
(let [forward? (= direction :forward)
|
||||
gray-out? (or (and forward? (= page-number page-count))
|
||||
(and (not forward?) (= page-number 1)))]
|
||||
[:div.rectangle-rounded
|
||||
{:on-click (on-direction-click forward?)}
|
||||
(cond-> {:on-click (on-direction-click forward?)}
|
||||
gray-out? (assoc :class "grayed-out-direction"))
|
||||
[:img.icon-forward-gray
|
||||
(cond-> {:src "icon-forward-gray.svg"}
|
||||
forward? (assoc :class "flip-horizontal"))]]))]
|
||||
@ -107,9 +116,10 @@
|
||||
[:div
|
||||
[draw-items]
|
||||
[:div.page-nav-container
|
||||
[draw-rect :backward]
|
||||
[draw-rect :forward]
|
||||
[:div.page-direction-container
|
||||
[draw-rect :backward]
|
||||
[draw-rect :forward]]
|
||||
[:div.page-nav-text [:span (str "Page " page-number " of " page-count)]]
|
||||
[draw-page-numbers page-number page-count set-page-kw]]])))
|
||||
[draw-page-numbers page-number page-count container-element]]])))
|
||||
|
||||
|
||||
|
@ -9,8 +9,9 @@
|
||||
:activity-feed-loading? false
|
||||
:open-bounties-loading? false
|
||||
:open-bounties []
|
||||
:bounty-page-number 1
|
||||
:activity-page-number 1
|
||||
:page-number 1
|
||||
:bounty-page-number 1
|
||||
:activity-page-number 1
|
||||
::open-bounties-sorting-type ::ui-model/bounty-sorting-type|most-recent
|
||||
::open-bounties-filters {::ui-model/bounty-filter-type|value nil
|
||||
::ui-model/bounty-filter-type|currency nil
|
||||
|
@ -39,7 +39,6 @@
|
||||
(println "redirecting to" path)
|
||||
(set! (.-pathname js/location) path)))
|
||||
|
||||
|
||||
(reg-event-fx
|
||||
:initialize-db
|
||||
[(inject-cofx :store)]
|
||||
@ -68,18 +67,14 @@
|
||||
:set-active-page
|
||||
(fn [db [_ page]]
|
||||
(assoc db :page page
|
||||
:page-number 1
|
||||
::db/open-bounties-filters {}
|
||||
::db/open-bounties-sorting-type ::ui-model/bounty-sorting-type|most-recent)))
|
||||
|
||||
(reg-event-db
|
||||
:set-bounty-page-number
|
||||
:set-page-number
|
||||
(fn [db [_ page]]
|
||||
(assoc db :bounty-page-number page)))
|
||||
|
||||
(reg-event-db
|
||||
:set-activity-page-number
|
||||
(fn [db [_ page]]
|
||||
(assoc db :activity-page-number page)))
|
||||
(assoc db :page-number page)))
|
||||
|
||||
(reg-event-fx
|
||||
:set-flash-message
|
||||
@ -94,7 +89,6 @@
|
||||
(fn [db _]
|
||||
(dissoc db :flash-message)))
|
||||
|
||||
|
||||
(defn assoc-in-if-not-empty [m path val]
|
||||
(if (seq val)
|
||||
(assoc-in m path val)
|
||||
|
@ -39,14 +39,14 @@
|
||||
(vec (:open-bounties db))))
|
||||
|
||||
(reg-sub
|
||||
:bounty-page-number
|
||||
:page-number
|
||||
(fn [db _]
|
||||
(:bounty-page-number db)))
|
||||
(:page-number db)))
|
||||
|
||||
(reg-sub
|
||||
:open-bounties-page
|
||||
:<- [::filtered-and-sorted-open-bounties]
|
||||
:<- [:bounty-page-number]
|
||||
:<- [:page-number]
|
||||
(fn [[open-bounties page-number] _]
|
||||
(let [total-count (count open-bounties)
|
||||
start (* (dec page-number) items-per-page)
|
||||
@ -79,15 +79,10 @@
|
||||
(fn [db _]
|
||||
(vec (:activity-feed db))))
|
||||
|
||||
(reg-sub
|
||||
:activity-page-number
|
||||
(fn [db _]
|
||||
(:activity-page-number db)))
|
||||
|
||||
(reg-sub
|
||||
:activities-page
|
||||
:<- [:activity-feed]
|
||||
:<- [:activity-page-number]
|
||||
:<- [:page-number]
|
||||
(fn [[activities page-number] _]
|
||||
(let [total-count (count activities)
|
||||
start (* (dec page-number) items-per-page)
|
||||
|
@ -819,7 +819,7 @@
|
||||
}
|
||||
}
|
||||
|
||||
border: #e7e7e7 solid 0.1em!important;
|
||||
border-bottom: #eaecee 1px solid !important;
|
||||
box-shadow: none!important;
|
||||
border-radius: 0.3em!important;
|
||||
padding: 0.8em 1em 1.1em!important;
|
||||
@ -884,9 +884,16 @@
|
||||
}
|
||||
|
||||
.activity-container {
|
||||
background-color: #fff;
|
||||
transform: translate(0, -45px);
|
||||
border-radius: 10px;
|
||||
|
||||
padding: 24px;
|
||||
.activity-header {
|
||||
font-family: "PostGrotesk-Medium";
|
||||
font-size: 21px;
|
||||
font-weight: 500;
|
||||
color: #42505c;
|
||||
}
|
||||
}
|
||||
|
||||
.footer-row {
|
||||
@ -1183,14 +1190,26 @@ body {
|
||||
flex: none;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.grayed-out {
|
||||
.page-num-active {
|
||||
cursor: auto;
|
||||
}
|
||||
|
||||
.grayed-out-page-num {
|
||||
color: #8d99a4;
|
||||
background-color: #f2f5f8;
|
||||
opacity: 1.0;
|
||||
}
|
||||
|
||||
.grayed-out-direction {
|
||||
color: #8d99a4;
|
||||
background-color: #f2f5f8;
|
||||
opacity: 0.4;
|
||||
cursor: auto
|
||||
}
|
||||
|
||||
.flip-horizontal {
|
||||
-moz-transform: scaleX(-1);
|
||||
-webkit-transform: scaleX(-1);
|
||||
@ -1200,15 +1219,6 @@ body {
|
||||
filter: fliph;
|
||||
}
|
||||
|
||||
.pagination-text {
|
||||
width: 83px;
|
||||
height: 15px;
|
||||
font-family: PostGrotesk;
|
||||
font-size: 15px;
|
||||
text-align: center;
|
||||
color: #8d99a4;
|
||||
}
|
||||
|
||||
.icon-forward-gray {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
@ -1218,10 +1228,24 @@ body {
|
||||
.page-nav-container {
|
||||
display: flex;
|
||||
margin: 0 -6px;
|
||||
@media (max-width: 767px) {
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
}
|
||||
|
||||
.page-direction-container {
|
||||
display: flex;
|
||||
@media (max-width: 767px) {
|
||||
flex-direction: row;
|
||||
}
|
||||
}
|
||||
|
||||
.page-nums-container {
|
||||
display: flex;
|
||||
@media (max-width: 767px) {
|
||||
display: none;
|
||||
}
|
||||
margin-left: auto;
|
||||
justify-content: space-between;
|
||||
}
|
||||
@ -1236,6 +1260,10 @@ body {
|
||||
flex: none;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
@media (max-width: 767px) {
|
||||
margin-top: 12px;
|
||||
}
|
||||
}
|
||||
|
||||
.item-counts-label {
|
||||
|
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><title>icon_sl</title><g fill="#000"><path d="M12.632 3.316H7.893a2.365 2.365 0 0 0-2.368 2.369v11.821a2.365 2.365 0 0 0 2.368 2.369 2.366 2.366 0 0 0 2.369-2.369v-2.369h2.37c3.254 0 5.91-2.656 5.91-5.911 0-3.254-2.656-5.91-5.91-5.91z"/><path d="M7.905 19.277a1.771 1.771 0 0 1-1.771-1.771V5.673a1.77 1.77 0 0 1 1.759-1.772h4.739a5.336 5.336 0 0 1 5.325 5.325 5.334 5.334 0 0 1-5.325 5.324H9.676v2.956c0 .967-.794 1.771-1.771 1.771z"/><path d="M7.905 18.68a1.185 1.185 0 0 1-1.185-1.186V5.673c0-.645.517-1.173 1.161-1.185h4.751a4.734 4.734 0 0 1 4.726 4.727 4.74 4.74 0 0 1-4.726 4.726H9.09v3.541c0 .666-.529 1.198-1.185 1.198z"/><path d="M7.905 18.094a.596.596 0 0 1-.598-.6V5.673c0-.322.252-.587.574-.598h4.751a4.144 4.144 0 0 1 4.14 4.14 4.145 4.145 0 0 1-4.14 4.14h-4.13v4.139c0 .334-.264.6-.597.6z"/><path d="M7.905 12.768h4.727a3.556 3.556 0 0 0 3.554-3.552 3.55 3.55 0 0 0-3.554-3.554H7.905v7.106z"/><path d="M8.502 12.182V6.26h4.14a2.953 2.953 0 0 1 2.955 2.956 2.954 2.954 0 0 1-2.955 2.956h-4.14v.01z"/><path d="M9.09 11.595V6.857h3.542a2.366 2.366 0 0 1 2.369 2.369 2.366 2.366 0 0 1-2.369 2.369H9.09z"/><path d="M9.676 11.01V7.444h2.956a1.783 1.783 0 0 1 0 3.566H9.676z"/><path d="M10.262 10.411v-2.38h2.37c.654 0 1.195.53 1.195 1.195 0 .668-.528 1.196-1.195 1.196h-2.37v-.011z"/><path d="M10.861 9.825V8.617h1.771c.333 0 .599.265.599.599a.595.595 0 0 1-.599.598h-1.771v.011z"/><ellipse cx="7.827" cy="5.678" rx="2.369" ry="2.369"/><path d="M18.036 16.137a2.361 2.361 0 1 1-3.863 2.716l-3.542-5.062a2.362 2.362 0 0 1 3.865-2.713l3.54 5.059z"/></g></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><title>icon_sl</title><g fill="#FFF"><path d="M12.632 3.316H7.893a2.365 2.365 0 0 0-2.368 2.369v11.821a2.365 2.365 0 0 0 2.368 2.369 2.366 2.366 0 0 0 2.369-2.369v-2.369h2.37c3.254 0 5.91-2.656 5.91-5.911 0-3.254-2.656-5.91-5.91-5.91z"/><path d="M7.905 19.277a1.771 1.771 0 0 1-1.771-1.771V5.673a1.77 1.77 0 0 1 1.759-1.772h4.739a5.336 5.336 0 0 1 5.325 5.325 5.334 5.334 0 0 1-5.325 5.324H9.676v2.956c0 .967-.794 1.771-1.771 1.771z"/><path d="M7.905 18.68a1.185 1.185 0 0 1-1.185-1.186V5.673c0-.645.517-1.173 1.161-1.185h4.751a4.734 4.734 0 0 1 4.726 4.727 4.74 4.74 0 0 1-4.726 4.726H9.09v3.541c0 .666-.529 1.198-1.185 1.198z"/><path d="M7.905 18.094a.596.596 0 0 1-.598-.6V5.673c0-.322.252-.587.574-.598h4.751a4.144 4.144 0 0 1 4.14 4.14 4.145 4.145 0 0 1-4.14 4.14h-4.13v4.139c0 .334-.264.6-.597.6z"/><path d="M7.905 12.768h4.727a3.556 3.556 0 0 0 3.554-3.552 3.55 3.55 0 0 0-3.554-3.554H7.905v7.106z"/><path d="M8.502 12.182V6.26h4.14a2.953 2.953 0 0 1 2.955 2.956 2.954 2.954 0 0 1-2.955 2.956h-4.14v.01z"/><path d="M9.09 11.595V6.857h3.542a2.366 2.366 0 0 1 2.369 2.369 2.366 2.366 0 0 1-2.369 2.369H9.09z"/><path d="M9.676 11.01V7.444h2.956a1.783 1.783 0 0 1 0 3.566H9.676z"/><path d="M10.262 10.411v-2.38h2.37c.654 0 1.195.53 1.195 1.195 0 .668-.528 1.196-1.195 1.196h-2.37v-.011z"/><path d="M10.861 9.825V8.617h1.771c.333 0 .599.265.599.599a.595.595 0 0 1-.599.598h-1.771v.011z"/><ellipse cx="7.827" cy="5.678" rx="2.369" ry="2.369"/><path d="M18.036 16.137a2.361 2.361 0 1 1-3.863 2.716l-3.542-5.062a2.362 2.362 0 0 1 3.865-2.713l3.54 5.059z"/></g></svg>
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 1.6 KiB |
11
test/Jenkinsfile
vendored
Normal file
11
test/Jenkinsfile
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
node ('linux1') {sauce('1be1b688-e0e7-4314-92a0-db11f52d3c00') {
|
||||
checkout([$class: 'GitSCM', branches: [[name: '*/develop']], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'CleanBeforeCheckout']], submoduleCfg: [], userRemoteConfigs: [[url: 'https://github.com/status-im/open-bounty.git']]])
|
||||
configFileProvider([configFile(fileId: 'sob_automation_test_config', targetLocation: 'test/end-to-end/tests')]) {
|
||||
try {sh 'cd test/end-to-end/tests && python3 -m pytest -m sanity --build=$BUILD_NAME -v -n 1'
|
||||
}
|
||||
finally {
|
||||
saucePublisher()
|
||||
junit testDataPublishers: [[$class: 'SauceOnDemandReportPublisher', jobVisibility: 'public']], testResults: 'test/end-to-end/tests/*.xml' }
|
||||
}
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user