diff --git a/backend/src/app/http/errors.clj b/backend/src/app/http/errors.clj index 35e58bbca..cd3292801 100644 --- a/backend/src/app/http/errors.clj +++ b/backend/src/app/http/errors.clj @@ -25,7 +25,6 @@ (let [claims (-> {} (into (::session/token-claims request)) (into (::actoken/token-claims request)))] - {:request/path (:path request) :request/method (:method request) :request/params (:params request) diff --git a/frontend/src/app/main.cljs b/frontend/src/app/main.cljs index e36985b17..b13c47dd8 100644 --- a/frontend/src/app/main.cljs +++ b/frontend/src/app/main.cljs @@ -15,7 +15,6 @@ [app.main.data.profile :as dp] [app.main.data.websocket :as ws] [app.main.errors] - [app.main.features :as feat] [app.main.rasterizer :as thr] [app.main.store :as st] [app.main.ui :as ui] @@ -67,7 +66,6 @@ (watch [_ _ stream] (rx/merge (rx/of (ev/initialize) - (feat/initialize) (dp/refresh-profile)) ;; Watch for profile deletion events diff --git a/frontend/src/app/main/data/changes.cljs b/frontend/src/app/main/data/changes.cljs index 72de74ea9..c63832693 100644 --- a/frontend/src/app/main/data/changes.cljs +++ b/frontend/src/app/main/data/changes.cljs @@ -13,7 +13,6 @@ [app.common.types.shape-tree :as ctst] [app.common.uuid :as uuid] [app.main.data.helpers :as dsh] - [app.main.features :as features] [app.main.worker :as uw] [app.util.time :as dt] [beicon.v2.core :as rx] @@ -182,8 +181,8 @@ (let [file-id (or file-id (:current-file-id state)) uchg (vec undo-changes) rchg (vec redo-changes) - features (features/get-team-enabled-features state) - permissions (:permissions state)] + features (get state :features) + permissions (get state :permissions)] ;; Prevent commit changes by a viewer team member (it really should never happen) (when (:can-edit permissions) diff --git a/frontend/src/app/main/data/common.cljs b/frontend/src/app/main/data/common.cljs index 064d1901d..b7ebf2716 100644 --- a/frontend/src/app/main/data/common.cljs +++ b/frontend/src/app/main/data/common.cljs @@ -16,7 +16,6 @@ [app.main.data.modal :as modal] [app.main.data.notifications :as ntf] [app.main.data.persistence :as-alias dps] - [app.main.features :as features] [app.main.repo :as rp] [app.main.router :as rt] [app.main.store :as st] @@ -112,7 +111,7 @@ (ptk/reify ::show-shared-dialog ptk/WatchEvent (watch [_ state _] - (let [features (features/get-team-enabled-features state) + (let [features (get state :features) file (dsh/lookup-file state) data (get file :data)] @@ -169,8 +168,8 @@ (ptk/reify ::export-files ptk/WatchEvent (watch [_ state _] - (let [features (features/get-team-enabled-features state) - team-id (:current-team-id state)] + (let [features (get state :features) + team-id (get state :current-team-id)] (->> (rx/from files) (rx/mapcat (fn [file] diff --git a/frontend/src/app/main/data/dashboard.cljs b/frontend/src/app/main/data/dashboard.cljs index 57a886340..f43278450 100644 --- a/frontend/src/app/main/data/dashboard.cljs +++ b/frontend/src/app/main/data/dashboard.cljs @@ -19,7 +19,6 @@ [app.main.data.helpers :as dsh] [app.main.data.modal :as modal] [app.main.data.websocket :as dws] - [app.main.features :as features] [app.main.repo :as rp] [app.util.i18n :as i18n :refer [tr]] [app.util.sse :as sse] @@ -497,7 +496,7 @@ base-name (tr "dashboard.new-file-prefix") name (or name (cfh/generate-unique-name base-name unames :immediate-suffix? true)) - features (-> (features/get-team-enabled-features state) + features (-> (get state :features) (set/difference cfeat/frontend-only-features)) params (-> params (assoc :name name) diff --git a/frontend/src/app/main/data/exports/files.cljs b/frontend/src/app/main/data/exports/files.cljs index 56ab281a7..b89c027fe 100644 --- a/frontend/src/app/main/data/exports/files.cljs +++ b/frontend/src/app/main/data/exports/files.cljs @@ -12,7 +12,6 @@ [app.common.schema :as sm] [app.main.data.event :as ev] [app.main.data.modal :as modal] - [app.main.features :as features] [app.main.repo :as rp] [beicon.v2.core :as rx] [potok.v2.core :as ptk])) @@ -47,7 +46,7 @@ (ptk/reify ::export-files ptk/WatchEvent (watch [_ state _] - (let [features (features/get-team-enabled-features state) + (let [features (get state :features) team-id (:current-team-id state) evname (if (= format :legacy-zip) "export-standard-files" diff --git a/frontend/src/app/main/data/team.cljs b/frontend/src/app/main/data/team.cljs index 2ee1e5828..ce96d45b2 100644 --- a/frontend/src/app/main/data/team.cljs +++ b/frontend/src/app/main/data/team.cljs @@ -101,7 +101,7 @@ (let [permissions (get team :permissions) features (get team :features)] (rx/of #(assoc % :permissions permissions) - (features/initialize (or features #{})) + (features/initialize features) (fetch-members team-id)))))) ptk/EffectEvent @@ -255,12 +255,12 @@ (dm/assert! (string? name)) (ptk/reify ::create-team ptk/WatchEvent - (watch [it state _] + (watch [it _ _] (let [{:keys [on-success on-error] :or {on-success identity on-error rx/throw}} (meta params) - features (features/get-enabled-features state) - params {:name name :features features}] + features features/global-enabled-features + params {:name name :features features}] (->> (rp/cmd! :create-team (with-meta params (meta it))) (rx/tap on-success) (rx/map team-created) @@ -272,11 +272,11 @@ [{:keys [name emails role] :as params}] (ptk/reify ::create-team-with-invitations ptk/WatchEvent - (watch [it state _] + (watch [it _ _] (let [{:keys [on-success on-error] :or {on-success identity on-error rx/throw}} (meta params) - features (features/get-enabled-features state) + features features/global-enabled-features params {:name name :emails emails :role role diff --git a/frontend/src/app/main/data/viewer.cljs b/frontend/src/app/main/data/viewer.cljs index d3baca131..dbd96a290 100644 --- a/frontend/src/app/main/data/viewer.cljs +++ b/frontend/src/app/main/data/viewer.cljs @@ -184,7 +184,7 @@ ptk/UpdateEvent (update [_ state] (let [team-id (:id team) - team {:members users}] + team (assoc team :members users)] (-> state (assoc :share-links share-links) (assoc :current-team-id team-id) diff --git a/frontend/src/app/main/data/workspace.cljs b/frontend/src/app/main/data/workspace.cljs index 43937ac45..5f1f2822b 100644 --- a/frontend/src/app/main/data/workspace.cljs +++ b/frontend/src/app/main/data/workspace.cljs @@ -80,7 +80,6 @@ [app.main.data.workspace.viewport :as dwv] [app.main.data.workspace.zoom :as dwz] [app.main.errors] - [app.main.features :as features] [app.main.features.pointer-map :as fpmap] [app.main.repo :as rp] [app.main.router :as rt] @@ -208,30 +207,29 @@ (d/index-by :id)))))) (defn- fetch-libraries - [file-id] + [file-id features] (ptk/reify ::fetch-libries ptk/WatchEvent - (watch [_ state _] - (let [features (features/get-team-enabled-features state)] - (->> (rp/cmd! :get-file-libraries {:file-id file-id}) - (rx/mapcat - (fn [libraries] - (rx/concat - (rx/of (libraries-fetched file-id libraries)) - (rx/merge - (->> (rx/from libraries) - (rx/merge-map - (fn [{:keys [id synced-at]}] - (->> (rp/cmd! :get-file {:id id :features features}) - (rx/map #(assoc % :synced-at synced-at :library-of file-id))))) - (rx/mapcat resolve-file) - (rx/map library-resolved)) - (->> (rx/from libraries) - (rx/map :id) - (rx/mapcat (fn [file-id] - (rp/cmd! :get-file-object-thumbnails {:file-id file-id :tag "component"}))) - (rx/map dwl/library-thumbnails-fetched))) - (rx/of (check-libraries-synchronozation file-id libraries)))))))))) + (watch [_ _ _] + (->> (rp/cmd! :get-file-libraries {:file-id file-id}) + (rx/mapcat + (fn [libraries] + (rx/concat + (rx/of (libraries-fetched file-id libraries)) + (rx/merge + (->> (rx/from libraries) + (rx/merge-map + (fn [{:keys [id synced-at]}] + (->> (rp/cmd! :get-file {:id id :features features}) + (rx/map #(assoc % :synced-at synced-at :library-of file-id))))) + (rx/mapcat resolve-file) + (rx/map library-resolved)) + (->> (rx/from libraries) + (rx/map :id) + (rx/mapcat (fn [file-id] + (rp/cmd! :get-file-object-thumbnails {:file-id file-id :tag "component"}))) + (rx/map dwl/library-thumbnails-fetched))) + (rx/of (check-libraries-synchronozation file-id libraries))))))))) (defn- workspace-initialized [file-id] @@ -249,28 +247,16 @@ (fbs/fix-broken-shapes))))) (defn- bundle-fetched - [{:keys [features file thumbnails]}] + [{:keys [file file-id thumbnails] :as bundle}] (ptk/reify ::bundle-fetched IDeref - (-deref [_] - {:features features - :file file - :thumbnails thumbnails}) + (-deref [_] bundle) ptk/UpdateEvent (update [_ state] - (let [file-id (:id file)] - (-> state - (assoc :thumbnails thumbnails) - (update :files assoc file-id file)))) - - ptk/WatchEvent - (watch [_ state _] - (let [team-id (:current-team-id state) - file-id (:id file)] - (rx/of (dwn/initialize team-id file-id) - (dwsl/initialize-shape-layout) - (fetch-libraries file-id)))))) + (-> state + (assoc :thumbnails thumbnails) + (update :files assoc file-id file))))) (defn zoom-to-frame [] @@ -299,46 +285,29 @@ (defn- fetch-bundle "Multi-stage file bundle fetch coordinator" - [file-id] + [file-id features] (ptk/reify ::fetch-bundle ptk/WatchEvent - (watch [_ state stream] - (let [features (features/get-team-enabled-features state) - render-wasm? (contains? features "render-wasm/v1") - stopper-s (rx/filter (ptk/type? ::finalize-workspace) stream) - team-id (:current-team-id state)] - - (->> (rx/concat - ;; Firstly load wasm module if it is enabled and fonts - (rx/merge - (if ^boolean render-wasm? - (->> (rx/from @wasm/module) - (rx/ignore)) - (rx/empty)) - - (->> stream - (rx/filter (ptk/type? ::df/fonts-loaded)) - (rx/take 1) - (rx/ignore)) - (rx/of (df/fetch-fonts team-id))) - - ;; Then fetch file and thumbnails - (->> (rx/zip (rp/cmd! :get-file {:id file-id :features features}) - (get-file-object-thumbnails file-id)) - (rx/take 1) - (rx/mapcat - (fn [[file thumbnails]] - (->> (resolve-file file) - (rx/map (fn [file] - {:file file - :features features - :thumbnails thumbnails}))))) - (rx/map bundle-fetched))) + (watch [_ _ stream] + (let [stopper-s (rx/filter (ptk/type? ::finalize-workspace) stream)] + (->> (rx/zip (rp/cmd! :get-file {:id file-id :features features}) + (get-file-object-thumbnails file-id)) + (rx/take 1) + (rx/mapcat + (fn [[file thumbnails]] + (->> (resolve-file file) + (rx/map (fn [file] + {:file file + :file-id file-id + :features features + :thumbnails thumbnails}))))) + (rx/map bundle-fetched) (rx/take-until stopper-s)))))) (defn initialize-workspace [file-id] (assert (uuid? file-id) "expected valud uuid for `file-id`") + (ptk/reify ::initialize-workspace ptk/UpdateEvent (update [_ state] @@ -350,26 +319,52 @@ ptk/WatchEvent (watch [_ state stream] - (log/debug :hint "initialize-workspace" :file-id (dm/str file-id)) (let [stoper-s (rx/filter (ptk/type? ::finalize-workspace) stream) rparams (rt/get-params state) - features (features/get-team-enabled-features state) + team-id (get state :current-team-id) + features (get state :features) render-wasm? (contains? features "render-wasm/v1")] + (log/debug :hint "initialize-workspace" + :team-id (dm/str team-id) + :file-id (dm/str file-id)) + (->> (rx/merge - (rx/of (ntf/hide) - (dcmt/retrieve-comment-threads file-id) - (dcmt/fetch-profiles) - (fetch-bundle file-id)) + (rx/concat + ;; Fetch all essential data that should be loaded before the file + (rx/merge + (if ^boolean render-wasm? + (->> (rx/from @wasm/module) + (rx/ignore)) + (rx/empty)) + + (->> stream + (rx/filter (ptk/type? ::df/fonts-loaded)) + (rx/take 1) + (rx/ignore)) + + (rx/of (ntf/hide) + (dcmt/retrieve-comment-threads file-id) + (dcmt/fetch-profiles) + (df/fetch-fonts team-id))) + + ;; Once the essential data is fetched, lets proceed to + ;; fetch teh file bunldle + (rx/of (fetch-bundle file-id features))) (->> stream (rx/filter (ptk/type? ::bundle-fetched)) (rx/take 1) (rx/map deref) - (rx/mapcat (fn [{:keys [file]}] - (rx/of (dpj/initialize-project (:project-id file)) - (-> (workspace-initialized file-id) - (with-meta {:file-id file-id})))))) + (rx/mapcat + (fn [{:keys [file]}] + (rx/of (dpj/initialize-project (:project-id file)) + (dwn/initialize team-id file-id) + (dwsl/initialize-shape-layout) + (fetch-libraries file-id features) + (-> (workspace-initialized file-id) + (with-meta {:team-id team-id + :file-id file-id})))))) (->> stream (rx/filter (ptk/type? ::dps/persistence-notification)) @@ -442,7 +437,6 @@ ptk/WatchEvent (watch [_ state _] (let [project-id (:current-project-id state)] - (rx/of (dwn/finalize file-id) (dpj/finalize-project project-id) (dwsl/finalize-shape-layout) @@ -462,8 +456,6 @@ ;; Make this event callable through dynamic resolution (defmethod ptk/resolve ::reload-current-file [_ _] (reload-current-file)) - - (def ^:private xf:collect-file-media "Resolve and collect all file media on page objects" (comp (map second) @@ -1435,7 +1427,7 @@ (let [objects (dsh/lookup-page-objects state) selected (->> (dsh/lookup-selected state) (cfh/clean-loops objects)) - features (-> (features/get-team-enabled-features state) + features (-> (get state :features) (set/difference cfeat/frontend-only-features)) file-id (:current-file-id state) @@ -1673,9 +1665,10 @@ objects (dsh/lookup-page-objects state)] (when-let [shape (get objects selected)] (let [props (cts/extract-props shape) - features (-> (features/get-team-enabled-features state) + features (-> (get state :features) (set/difference cfeat/frontend-only-features)) - version (-> (dsh/lookup-file state) :version) + version (-> (dsh/lookup-file state) + (get :version)) copy-data {:type :copied-props :features features @@ -1809,8 +1802,8 @@ (ptk/reify ::paste-transit-shapes ptk/WatchEvent (watch [_ state _] - (let [file-id (:current-file-id state) - features (features/get-team-enabled-features state)] + (let [file-id (:current-file-id state) + features (get state :features)] (when-not (paste-data-valid? pdata) (ex/raise :type :validation @@ -1881,7 +1874,7 @@ (ptk/reify ::paste-transit-props ptk/WatchEvent (watch [_ state _] - (let [features (features/get-team-enabled-features state) + (let [features (get state :features) selected (dsh/lookup-selected state)] (when (paste-data-valid? pdata) diff --git a/frontend/src/app/main/data/workspace/libraries.cljs b/frontend/src/app/main/data/workspace/libraries.cljs index dadb2af94..2f73ce76c 100644 --- a/frontend/src/app/main/data/workspace/libraries.cljs +++ b/frontend/src/app/main/data/workspace/libraries.cljs @@ -1398,7 +1398,7 @@ ptk/WatchEvent (watch [_ state _] - (let [features (features/get-team-enabled-features state)] + (let [features (get state :features)] (rx/concat (rx/merge (->> (rp/cmd! :link-file-to-library {:file-id file-id :library-id library-id}) diff --git a/frontend/src/app/main/features.cljs b/frontend/src/app/main/features.cljs index 16fc4222b..49612ff48 100644 --- a/frontend/src/app/main/features.cljs +++ b/frontend/src/app/main/features.cljs @@ -13,7 +13,6 @@ [app.config :as cf] [app.main.store :as st] [app.render-wasm :as wasm] - [beicon.v2.core :as rx] [clojure.set :as set] [cuerdas.core :as str] [okulary.core :as l] @@ -25,39 +24,24 @@ (def global-enabled-features (cfeat/get-enabled-features cf/flags)) -(defn get-enabled-features - [state] - (-> (get state :features-runtime #{}) - (set/intersection cfeat/no-migration-features) - (set/union global-enabled-features))) - -(defn get-team-enabled-features - [state] - (let [runtime-features (:features-runtime state #{}) - team-features (->> (:features-team state #{}) - (into #{} cfeat/xf-remove-ephimeral))] - (-> global-enabled-features - (set/union runtime-features) - (set/intersection cfeat/no-migration-features) - (set/union team-features)))) - -(def features-ref - (l/derived get-team-enabled-features st/state =)) - (defn active-feature? - "Given a state and feature, check if feature is enabled" + "Given a state and feature, check if feature is enabled." [state feature] - (assert (contains? cfeat/supported-features feature) "not supported feature") - (or (contains? (get state :features-runtime) feature) - (if (contains? cfeat/no-migration-features feature) - (or (contains? global-enabled-features feature) - (contains? (get state :features-team) feature)) - (contains? (get state :features-team state) feature)))) + (assert (contains? cfeat/supported-features feature) "feature not supported") + (let [runtime-features (get state :features-runtime) + enabled-features (get state :features)] + (or (contains? runtime-features feature) + (if (contains? cfeat/no-migration-features feature) + (or (contains? global-enabled-features feature) + (contains? enabled-features feature)) + (contains? enabled-features feature))))) + +(def ^:private features-ref + (l/derived (l/key :features) st/state)) (defn use-feature "A react hook that checks if feature is currently enabled" [feature] - (assert (contains? cfeat/supported-features feature) "Not supported feature") (let [enabled-features (mf/deref features-ref)] (contains? enabled-features feature))) @@ -71,14 +55,16 @@ ptk/UpdateEvent (update [_ state] (assert (contains? cfeat/supported-features feature) "not supported feature") - (update state :features-runtime (fn [features] - (if (contains? features feature) - (do - (log/trc :hint "feature disabled" :feature feature) - (disj features feature)) - (do - (log/trc :hint "feature enabled" :feature feature) - (conj features feature)))))))) + (-> state + (update :features-runtime (fn [features] + (if (contains? features feature) + (do + (log/trc :hint "feature disabled" :feature feature) + (disj features feature)) + (do + (log/trc :hint "feature enabled" :feature feature) + (conj features feature))))) + (update :features-runtime set/intersection cfeat/no-migration-features))))) (defn enable-feature [feature] @@ -90,46 +76,28 @@ state (do (log/trc :hint "feature enabled" :feature feature) - (update state :features-runtime (fnil conj #{}) feature)))))) + (-> state + (update :features-runtime (fnil conj #{}) feature) + (update :features-runtime set/intersection cfeat/no-migration-features))))))) (defn initialize - ([] (initialize #{})) - ([team-features] - (assert (set? team-features) "expected a set of features") - (assert (every? string? team-features) "expected a set of strings") + [features] + (ptk/reify ::initialize + ptk/UpdateEvent + (update [_ state] + (let [features (-> global-enabled-features + (set/union (get state :features-runtime #{})) + (set/union features))] + (assoc state :features features))) - (ptk/reify ::initialize - ptk/UpdateEvent - (update [_ state] - (let [runtime-features (get state :features/runtime #{}) - team-features (into #{} - cfeat/xf-supported-features - team-features)] - (-> state - (assoc :features-runtime runtime-features) - (assoc :features-team team-features)))) + ptk/EffectEvent + (effect [_ state _] + (let [features (get state :features)] + (if (contains? features "render-wasm/v1") + (wasm/initialize true) + (wasm/initialize false)) - ptk/WatchEvent - (watch [_ _ _] - (when *assert* - (->> (rx/from cfeat/no-migration-features) - ;; text editor v2 isn't enabled by default even in devenv - ;; wasm render v1 isn't enabled by default even in devenv - (rx/filter #(not (or (contains? cfeat/backend-only-features %) - (= "text-editor/v2" %) - (= "render-wasm/v1" %) - (= "design-tokens/v1" %)))) - (rx/observe-on :async) - (rx/map enable-feature)))) - - ptk/EffectEvent - (effect [_ state _] - (let [features (get-team-enabled-features state)] - (if (contains? features "render-wasm/v1") - (wasm/initialize true) - (wasm/initialize false)) - - (log/inf :hint "initialized" - :enabled (str/join "," features) - :runtime (str/join "," (:features-runtime state)))))))) + (log/inf :hint "initialized" + :enabled (str/join "," features) + :runtime (str/join "," (:features-runtime state))))))) diff --git a/frontend/src/app/main/ui/dashboard/grid.cljs b/frontend/src/app/main/ui/dashboard/grid.cljs index 2a2bf20f7..fd5804760 100644 --- a/frontend/src/app/main/ui/dashboard/grid.cljs +++ b/frontend/src/app/main/ui/dashboard/grid.cljs @@ -17,7 +17,6 @@ [app.main.data.notifications :as ntf] [app.main.data.project :as dpj] [app.main.data.team :as dtm] - [app.main.features :as features] [app.main.fonts :as fonts] [app.main.rasterizer :as thr] [app.main.refs :as refs] @@ -60,7 +59,7 @@ (->> (wrk/ask! {:cmd :thumbnails/generate-for-file :revn revn :file-id file-id - :features (features/get-team-enabled-features @st/state)}) + :features (get @st/state :features)}) (rx/mapcat (fn [{:keys [fonts] :as result}] (->> (fonts/render-font-styles fonts) (rx/map (fn [styles] diff --git a/frontend/src/app/main/ui/dashboard/import.cljs b/frontend/src/app/main/ui/dashboard/import.cljs index ce6b83afb..dc0afa8ca 100644 --- a/frontend/src/app/main/ui/dashboard/import.cljs +++ b/frontend/src/app/main/ui/dashboard/import.cljs @@ -15,7 +15,6 @@ [app.main.data.modal :as modal] [app.main.data.notifications :as ntf] [app.main.errors :as errors] - [app.main.features :as features] [app.main.store :as st] [app.main.ui.components.file-uploader :refer [file-uploader]] [app.main.ui.ds.product.loader :refer [loader*]] @@ -162,29 +161,32 @@ (defn- analyze-entries [state entries] - (->> (uw/ask-many! - {:cmd :analyze-import - :files entries - :features @features/features-ref}) - (rx/mapcat #(rx/delay emit-delay (rx/of %))) - (rx/filter some?) - (rx/subs! - (fn [message] - (swap! state update-with-analyze-result message))))) + (let [features (get @st/state :features)] + (->> (uw/ask-many! + {:cmd :analyze-import + :files entries + :features features}) + (rx/mapcat #(rx/delay emit-delay (rx/of %))) + (rx/filter some?) + (rx/subs! + (fn [message] + (swap! state update-with-analyze-result message)))))) (defn- import-files [state project-id entries] (st/emit! (ptk/data-event ::ev/event {::ev/name "import-files" :num-files (count entries)})) - (->> (uw/ask-many! - {:cmd :import-files - :project-id project-id - :files entries - :features @features/features-ref}) - (rx/filter (comp uuid? :file-id)) - (rx/subs! - (fn [message] - (swap! state update-entry-status message))))) + + (let [features (get @st/state :features)] + (->> (uw/ask-many! + {:cmd :import-files + :project-id project-id + :files entries + :features features}) + (rx/filter (comp uuid? :file-id)) + (rx/subs! + (fn [message] + (swap! state update-entry-status message)))))) (mf/defc import-entry* {::mf/props :obj diff --git a/frontend/src/app/plugins/file.cljs b/frontend/src/app/plugins/file.cljs index decedbf43..22e545dcc 100644 --- a/frontend/src/app/plugins/file.cljs +++ b/frontend/src/app/plugins/file.cljs @@ -13,7 +13,6 @@ [app.main.data.exports.files :as exports.files] [app.main.data.workspace :as dw] [app.main.data.workspace.versions :as dwv] - [app.main.features :as features] [app.main.repo :as rp] [app.main.store :as st] [app.main.worker :as uw] @@ -237,7 +236,7 @@ :else (let [file (u/locate-file id) - features (features/get-team-enabled-features @st/state) + features (:features @st/state) team-id (:current-team-id @st/state) format (case format "zip" :legacy-zip diff --git a/frontend/src/app/render.cljs b/frontend/src/app/render.cljs index 258c98812..bc1fc3f96 100644 --- a/frontend/src/app/render.cljs +++ b/frontend/src/app/render.cljs @@ -41,7 +41,7 @@ ptk/WatchEvent (watch [_ _ _] - (rx/of (features/initialize (or features #{})))))) + (rx/of (features/initialize features))))) (defn- fetch-team [& {:keys [file-id]}] @@ -98,7 +98,7 @@ (ptk/reify ::fetch-objects-bundle ptk/WatchEvent (watch [_ state _] - (let [features (features/get-team-enabled-features state)] + (let [features (get state :features)] (->> (rx/zip (repo/cmd! :get-font-variants {:file-id file-id :share-id share-id}) (repo/cmd! :get-page {:file-id file-id @@ -237,7 +237,7 @@ (ptk/reify ::fetch-components-bundle ptk/WatchEvent (watch [_ state _] - (let [features (features/get-team-enabled-features state)] + (let [features (get state :features)] (->> (repo/cmd! :get-file {:id file-id :features features}) (rx/map (fn [file] #(assoc % :file file)))))))) @@ -309,7 +309,6 @@ (defn ^:export init [] - (st/emit! (features/initialize)) (init-ui)) (defn reinit diff --git a/frontend/src/debug.cljs b/frontend/src/debug.cljs index ad0491fda..4d635b99b 100644 --- a/frontend/src/debug.cljs +++ b/frontend/src/debug.cljs @@ -27,7 +27,6 @@ [app.main.data.workspace.selection :as dws] [app.main.data.workspace.shortcuts] [app.main.errors :as errors] - [app.main.features :as features] [app.main.repo :as rp] [app.main.store :as st] [app.util.debug :as dbg] @@ -393,7 +392,7 @@ (ptk/reify ::repair-current-file ptk/EffectEvent (effect [_ state _] - (let [features (features/get-team-enabled-features state) + (let [features (:features state) sid (:session-id state) file (dsh/lookup-file state) @@ -430,7 +429,3 @@ (defn ^:export set-shape-ref [id shape-ref] (st/emit! (dw/set-shape-ref id shape-ref))) - -(defn ^:export enable-text-v2 - [] - (st/emit! (features/enable-feature "text-editor/v2"))) diff --git a/frontend/src/features.cljs b/frontend/src/features.cljs index 0fa5ec46b..9c30a8624 100644 --- a/frontend/src/features.cljs +++ b/frontend/src/features.cljs @@ -20,13 +20,12 @@ nil) (defn ^:export get-enabled [] - (clj->js (features/get-enabled-features @st/state))) + (clj->js features/global-enabled-features)) (defn ^:export get-team-enabled [] - (clj->js (features/get-team-enabled-features @st/state))) + (clj->js (get @st/state :features))) (defn ^:export plugins [] (st/emit! (features/enable-feature "plugins/runtime")) (plugins/init-plugins-runtime!) nil) -