diff --git a/backend/src/app/nitrate.clj b/backend/src/app/nitrate.clj index 690ba662fb..0c1e0303d8 100644 --- a/backend/src/app/nitrate.clj +++ b/backend/src/app/nitrate.clj @@ -126,7 +126,8 @@ [cfg profile] (try (let [nitrate-licence (call cfg :is-valid-user {:profile-id (:id profile)})] - (assoc profile :nitrate-licence (:valid nitrate-licence))) + (assoc-in profile [:props :nitrate-license] + (select-keys nitrate-licence [:valid :created-at]))) (catch Throwable cause (l/error :hint "failed to get nitrate licence" :profile-id (:id profile) diff --git a/frontend/src/app/main/data/nitrate.cljs b/frontend/src/app/main/data/nitrate.cljs index 1f9a916e56..596ca2463e 100644 --- a/frontend/src/app/main/data/nitrate.cljs +++ b/frontend/src/app/main/data/nitrate.cljs @@ -2,6 +2,9 @@ (:require [app.main.data.modal :as modal] [app.main.repo :as rp] + [app.main.router :as rt] + [app.main.store :as st] + [app.util.dom :as dom] [beicon.v2.core :as rx] [potok.v2.core :as ptk])) @@ -14,4 +17,12 @@ (rx/map (fn [connectivity] (modal/show popup-type (or connectivity {})))))))) +(defn go-to-nitrate-cc + [] + (st/emit! (dom/open-new-window "/control-center/"))) + +(defn go-to-nitrate-billing + [] + (st/emit! (rt/nav-raw :href "/control-center/licenses/billing"))) + diff --git a/frontend/src/app/main/ui/dashboard/sidebar.cljs b/frontend/src/app/main/ui/dashboard/sidebar.cljs index d1bccb550d..dbf5fedcbc 100644 --- a/frontend/src/app/main/ui/dashboard/sidebar.cljs +++ b/frontend/src/app/main/ui/dashboard/sidebar.cljs @@ -302,9 +302,8 @@ on-create-org-click (mf/use-fn (fn [] - (if (:nitrate-licence profile) - ;; TODO update when org creation route is ready - (dom/open-new-window "/control-center/org/create") + (if (dm/get-in profile [:props :nitrate-license :valid]) + (dnt/go-to-nitrate-cc) (st/emit! (dnt/show-nitrate-popup :nitrate-form)))))] [:> dropdown-menu* props @@ -548,9 +547,8 @@ on-create-org-click (mf/use-fn (fn [] - (if (:nitrate-licence profile) - ;; TODO update when org creation route is ready - (dom/open-new-window "/control-center/org/create") + (if (dm/get-in profile [:props :nitrate-license :valid]) + (dnt/go-to-nitrate-cc) (st/emit! (dnt/show-nitrate-popup :nitrate-form)))))] (if empty? [:div {:class (stl/css :nitrate-orgs-empty)} @@ -1088,7 +1086,7 @@ [:* (if (contains? cf/flags :nitrate) - (when-not (:nitrate-licence profile) + (when-not (dm/get-in profile [:props :nitrate-license :valid]) [:> nitrate-sidebar* {:profile profile}]) (when (contains? cf/flags :subscriptions) (if (show-subscription-dashboard-banner? profile) diff --git a/frontend/src/app/main/ui/settings/subscription.cljs b/frontend/src/app/main/ui/settings/subscription.cljs index f3cabc939e..bd222309ac 100644 --- a/frontend/src/app/main/ui/settings/subscription.cljs +++ b/frontend/src/app/main/ui/settings/subscription.cljs @@ -360,6 +360,11 @@ (let [route (mf/deref refs/route) authenticated? (da/is-authenticated? profile) + nitrate-license (dm/get-in profile [:props :nitrate-license]) + + nitrate? (and (contains? cf/flags :nitrate) + (:valid nitrate-license)) + params-subscription (-> route :params :query :subscription) @@ -390,7 +395,9 @@ (ct/format-inst (:created-at profile) "d MMMM, yyyy") subscribed-since - (ct/format-inst (:start-date subscription) "d MMMM, yyyy") + (if nitrate? + (ct/format-inst (:created-at nitrate-license) "d MMMM, yyyy") + (ct/format-inst (:start-date subscription) "d MMMM, yyyy")) go-to-pricing-page (mf/use-fn @@ -468,60 +475,73 @@ [:div {:class (stl/css :your-subscription)} [:h3 {:class (stl/css :plan-section-title)} (tr "subscription.settings.section-plan")] - (case subscription-type - "professional" - [:> plan-card* {:card-title (tr "subscription.settings.professional") - :benefits [(tr "subscription.settings.professional.storage-benefit"), - (tr "subscription.settings.professional.autosave-benefit"), - (tr "subscription.settings.professional.teams-editors-benefit")]}] + (if nitrate? + ;; TODO add translations for this texts when we have the definitive ones + [:> plan-card* {:card-title "Business Nitrate" + :card-title-icon i/character-b + :benefits-title "Loren ipsum", + :benefits ["Loren ipsum", + "Loren ipsum", + "Loren ipsum"] + :cta-text-with-icon "Control Center" + :cta-link-with-icon dnt/go-to-nitrate-cc + :cta-text (tr "subscription.settings.manage-your-subscription") + :cta-link dnt/go-to-nitrate-billing}] + (case subscription-type + "professional" + [:> plan-card* {:card-title (tr "subscription.settings.professional") + :benefits [(tr "subscription.settings.professional.storage-benefit"), + (tr "subscription.settings.professional.autosave-benefit"), + (tr "subscription.settings.professional.teams-editors-benefit")]}] - "unlimited" - (if subscription-is-trial? - [:> plan-card* {:card-title (tr "subscription.settings.unlimited-trial") - :card-title-icon i/character-u - :benefits-title (tr "subscription.settings.benefits.all-professional-benefits"), - :benefits [(tr "subscription.settings.unlimited.storage-benefit") - (tr "subscription.settings.unlimited.autosave-benefit"), - (tr "subscription.settings.unlimited.bill")] - :cta-text (tr "subscription.settings.manage-your-subscription") - :cta-link go-to-payments - :cta-text-trial (tr "subscription.settings.add-payment-to-continue") - :cta-link-trial go-to-payments - :editors (-> profile :props :subscription :quantity)}] + "unlimited" + (if subscription-is-trial? + [:> plan-card* {:card-title (tr "subscription.settings.unlimited-trial") + :card-title-icon i/character-u + :benefits-title (tr "subscription.settings.benefits.all-professional-benefits"), + :benefits [(tr "subscription.settings.unlimited.storage-benefit") + (tr "subscription.settings.unlimited.autosave-benefit"), + (tr "subscription.settings.unlimited.bill")] + :cta-text (tr "subscription.settings.manage-your-subscription") + :cta-link go-to-payments + :cta-text-trial (tr "subscription.settings.add-payment-to-continue") + :cta-link-trial go-to-payments + :editors (-> profile :props :subscription :quantity)}] - [:> plan-card* {:card-title (tr "subscription.settings.unlimited") - :card-title-icon i/character-u - :benefits-title (tr "subscription.settings.benefits.all-unlimited-benefits") - :benefits [(tr "subscription.settings.unlimited.storage-benefit"), - (tr "subscription.settings.unlimited.autosave-benefit"), - (tr "subscription.settings.unlimited.bill")] - :cta-text (tr "subscription.settings.manage-your-subscription") - :cta-link go-to-payments - :editors (-> profile :props :subscription :quantity)}]) + [:> plan-card* {:card-title (tr "subscription.settings.unlimited") + :card-title-icon i/character-u + :benefits-title (tr "subscription.settings.benefits.all-unlimited-benefits") + :benefits [(tr "subscription.settings.unlimited.storage-benefit"), + (tr "subscription.settings.unlimited.autosave-benefit"), + (tr "subscription.settings.unlimited.bill")] + :cta-text (tr "subscription.settings.manage-your-subscription") + :cta-link go-to-payments + :editors (-> profile :props :subscription :quantity)}]) - "enterprise" - (if subscription-is-trial? - [:> plan-card* {:card-title (tr "subscription.settings.enterprise-trial") - :card-title-icon i/character-e - :benefits-title (tr "subscription.settings.benefits.all-unlimited-benefits"), - :benefits [(tr "subscription.settings.enterprise.unlimited-storage-benefit"), - (tr "subscription.settings.enterprise.autosave"), - (tr "subscription.settings.enterprise.capped-bill")] - :cta-text (tr "subscription.settings.manage-your-subscription") - :cta-link go-to-payments - :cta-text-trial (tr "subscription.settings.add-payment-to-continue") - :cta-link-trial go-to-payments}] - [:> plan-card* {:card-title (tr "subscription.settings.enterprise") - :card-title-icon i/character-e - :benefits-title (tr "subscription.settings.benefits.all-unlimited-benefits"), - :benefits [(tr "subscription.settings.enterprise.unlimited-storage-benefit"), - (tr "subscription.settings.enterprise.autosave"), - (tr "subscription.settings.enterprise.capped-bill")] - :cta-text (tr "subscription.settings.manage-your-subscription") - :cta-link go-to-payments}])) + "enterprise" + (if subscription-is-trial? + [:> plan-card* {:card-title (tr "subscription.settings.enterprise-trial") + :card-title-icon i/character-e + :benefits-title (tr "subscription.settings.benefits.all-unlimited-benefits"), + :benefits [(tr "subscription.settings.enterprise.unlimited-storage-benefit"), + (tr "subscription.settings.enterprise.autosave"), + (tr "subscription.settings.enterprise.capped-bill")] + :cta-text (tr "subscription.settings.manage-your-subscription") + :cta-link go-to-payments + :cta-text-trial (tr "subscription.settings.add-payment-to-continue") + :cta-link-trial go-to-payments}] + [:> plan-card* {:card-title (tr "subscription.settings.enterprise") + :card-title-icon i/character-e + :benefits-title (tr "subscription.settings.benefits.all-unlimited-benefits"), + :benefits [(tr "subscription.settings.enterprise.unlimited-storage-benefit"), + (tr "subscription.settings.enterprise.autosave"), + (tr "subscription.settings.enterprise.capped-bill")] + :cta-text (tr "subscription.settings.manage-your-subscription") + :cta-link go-to-payments}]))) [:div {:class (stl/css :membership-container)} - (when (and subscribed-since (not= subscription-type "professional")) + (when (or nitrate? + (and subscribed-since (not= subscription-type "professional"))) [:div {:class (stl/css :membership)} [:> icon* {:class (stl/css :subscription-member) :icon-id "crown" @@ -582,7 +602,7 @@ :show-button-cta (= subscription-type "professional")}]) ;; TODO add translations for this texts when we have the definitive ones - (when (and (contains? cf/flags :nitrate) (not (:nitrate-licence profile))) + (when (and (contains? cf/flags :nitrate) (not nitrate?)) [:> plan-card* {:card-title "Business Nitrate" :card-title-icon i/character-n :price-value "$25"