diff --git a/src/main/frontend/components/repo.cljs b/src/main/frontend/components/repo.cljs index 7ac4d75bf6..a6d7444ae6 100644 --- a/src/main/frontend/components/repo.cljs +++ b/src/main/frontend/components/repo.cljs @@ -16,11 +16,17 @@ [frontend.components.commit :as commit] [frontend.components.svg :as svg] [frontend.context.i18n :as i18n] - [clojure.string :as string])) + [clojure.string :as string] + [clojure.string :as str])) (rum/defc add-repo - [] - (widgets/add-graph)) + [args] + (if-let [graph-types (get-in args [:query-params :graph-types])] + (let [graph-types-s (->> (str/split graph-types #",") + (mapv keyword))] + (when (seq graph-types-s) + (widgets/add-graph :graph-types graph-types-s))) + (widgets/add-graph))) (rum/defc repos < rum/reactive [] @@ -42,7 +48,7 @@ (when (state/logged?) (ui/button "Add another git repo" - :href (rfe/href :repo-add)))] + :href (rfe/href :repo-add nil {:graph-types "github"})))] (for [{:keys [id url] :as repo} repos] (let [local? (config/local-db? url)] [:div.flex.justify-between.mb-1 {:key id} diff --git a/src/main/frontend/components/widgets.cljs b/src/main/frontend/components/widgets.cljs index 31dc7b6a89..64de798a5f 100644 --- a/src/main/frontend/components/widgets.cljs +++ b/src/main/frontend/components/widgets.cljs @@ -3,24 +3,15 @@ [frontend.util :as util] [frontend.handler.user :as user-handler] [frontend.handler.repo :as repo-handler] - [frontend.handler.route :as route-handler] - [frontend.handler.export :as export-handler] [frontend.handler.notification :as notification] [frontend.handler.web.nfs :as nfs] [frontend.state :as state] - [frontend.config :as config] [clojure.string :as string] [frontend.ui :as ui] - [frontend.db :as db] - [frontend.version :as version] - [frontend.components.commit :as commit] [frontend.context.i18n :as i18n] - [reitit.frontend.easy :as rfe] - [frontend.components.svg :as svg] - [frontend.handler.web.nfs :as nfs] - [frontend.handler.web.nfs :as nfs-handler])) + [frontend.handler.web.nfs :as nfs])) -(rum/defcs choose-preferred-format +(rum/defc choose-preferred-format [] (rum/with-context [[t] i18n/*tongue-context*] [:div @@ -29,67 +20,91 @@ [:div.mt-4.ml-1 (ui/button - "Markdown" - :on-click - #(user-handler/set-preferred-format! :markdown)) + "Markdown" + :on-click + #(user-handler/set-preferred-format! :markdown)) [:span.ml-2.mr-2 "-OR-"] (ui/button - "Org Mode" - :on-click - #(user-handler/set-preferred-format! :org))]])) + "Org Mode" + :on-click + #(user-handler/set-preferred-format! :org))]])) -(rum/defcs add-graph < +(rum/defcs add-github-repo < (rum/local "" ::repo) [state] - (let [repo (get state ::repo) - github-authed? (:github-authed? (state/get-me))] + (let [repo (get state ::repo)] (rum/with-context [[t] i18n/*tongue-context*] [:div.p-8.flex.flex-col - [:h1.title "Add a graph"] - (let [nfs-supported? (nfs/supported?)] - [:div.cp__widgets-open-local-directory - [:div.select-file-wrap.cursor - (when nfs-supported? - {:on-click nfs/ls-dir-files}) + [:div.w-full.mx-auto + [:div + [:div + [:h1.title + (t :git/add-repo-prompt)] + [:div.mt-4.mb-4.relative.rounded-md.shadow-sm.max-w-xs + [:input#repo.form-input.block.w-full.sm:text-sm.sm:leading-5 + {:autoFocus true + :placeholder "https://github.com/username/repo" + :on-change (fn [e] + (reset! repo (util/evalue e)))}]]]] - [:div - [:h1.title "Open a local directory"] - [:p.text-sm - "Your data will be stored only in your device."] - (when-not nfs-supported? - (ui/admonition :warning - [:p "It seems that your browser doesn't support the " + (ui/button + (t :git/add-repo-prompt-confirm) + :on-click + (fn [] + (let [repo (util/lowercase-first @repo)] + (if (util/starts-with? repo "https://github.com/") + (let [repo (string/replace repo ".git" "")] + (repo-handler/create-repo! repo)) - [:a {:href "https://web.dev/file-system-access/" - :target "_blank"} - "new native filesystem API"] - [:span ", please use any chromium 86+ browser like Chrome, Vivaldi, Edge, Brave, etc."]]))]]]) - (when github-authed? - [:div.w-full.mx-auto.mt-10 - [:h1.title "Or"] - [:div - [:div - [:h1.title.mb-1 - (t :git/add-repo-prompt)] - [:div.mt-4.mb-4.relative.rounded-md.shadow-sm.max-w-xs - [:input#repo.form-input.block.w-full.sm:text-sm.sm:leading-5 - {:autoFocus true - :placeholder "https://github.com/username/repo" - :on-change (fn [e] - (reset! repo (util/evalue e)))}]]]] - - (ui/button - (t :git/add-repo-prompt-confirm) - :on-click - (fn [] - (let [repo (util/lowercase-first @repo)] - (if (util/starts-with? repo "https://github.com/") - (let [repo (string/replace repo ".git" "")] - (repo-handler/create-repo! repo)) - - (notification/show! + (notification/show! [:p "Please input a valid repo url, e.g. https://github.com/username/repo"] :error - false)))))])]))) + false)))))]]))) + +(rum/defcs add-local-directory + [] + (rum/with-context [[t] i18n/*tongue-context*] + [:div.p-8.flex.flex-col + [:h1.title "Add Local directory"] + (let [nfs-supported? (nfs/supported?)] + [:div.cp__widgets-open-local-directory + [:div.select-file-wrap.cursor + (when nfs-supported? + {:on-click nfs/ls-dir-files}) + [:div + [:h1.title "Open a local directory"] + [:p.text-sm + "Your data will be stored only in your device."] + (when-not nfs-supported? + (ui/admonition :warning + [:p "It seems that your browser doesn't support the " + + [:a {:href "https://web.dev/file-system-access/" + :target "_blank"} + "new native filesystem API"] + [:span ", please use any chromium 86+ browser like Chrome, Vivaldi, Edge, Brave, etc."]]))]]])])) + +(rum/defcs add-graph < + [state & {:keys [graph-types] + :or {graph-types [:local :github]} + :as opts}] + (let [github-authed? (:github-authed? (state/get-me)) + generate-f (fn [x] + (case x + :github + (when github-authed? + (rum/with-key (add-github-repo) + "add-github-repo")) + + :local + (rum/with-key (add-local-directory) + "add-local-directory") + + nil)) + available-graph (->> (set graph-types) + (keep generate-f) + (vec))] + (rum/with-context [[t] i18n/*tongue-context*] + [:div.p-8.flex.flex-col available-graph])))