0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-01-22 14:39:45 -05:00

Kick out of a team - Visibility of System Status

This commit is contained in:
Pablo Alba 2024-10-14 15:19:40 +02:00
parent 226ab7233b
commit 823792339f
11 changed files with 88 additions and 42 deletions

View file

@ -693,9 +693,10 @@
(sv/defmethod ::delete-team-member
{::doc/added "1.17"
::sm/params schema:delete-team-member}
[{:keys [::db/pool] :as cfg} {:keys [::rpc/profile-id team-id member-id] :as params}]
[{:keys [::db/pool ::mbus/msgbus] :as cfg} {:keys [::rpc/profile-id team-id member-id] :as params}]
(db/with-atomic [conn pool]
(let [perms (get-permissions conn profile-id team-id)]
(let [team (get-team pool :profile-id profile-id :team-id team-id)
perms (get-permissions conn profile-id team-id)]
(when-not (or (:is-owner perms)
(:is-admin perms))
(ex/raise :type :validation
@ -708,6 +709,13 @@
(db/delete! conn :team-profile-rel {:profile-id member-id
:team-id team-id})
(mbus/pub! msgbus
:topic member-id
:message {:type :removed-from-team
:subs-id member-id
:team-id team-id
:team-name (:name team)})
nil)))
;; --- Mutation: Update Team Photo

View file

@ -17,6 +17,7 @@
[app.main.repo :as rp]
[app.main.store :as st]
[app.util.i18n :refer [tr]]
[app.util.router :as rt]
[beicon.v2.core :as rx]
[potok.v2.core :as ptk]))
@ -216,4 +217,23 @@
(assoc permissions :can-edit true :is-admin true :is-owner true)
:else
permissions)))))))
permissions)))))))
(defn removed-from-team
[{:keys [team-id team-name]}]
(dm/assert! (uuid? team-id))
(ptk/reify ::removed-from-team
ptk/WatchEvent
(watch [_ state _]
(let [msg (tr "dashboard.removed-from-team" team-name)]
(rx/concat
(rx/of (rt/nav :dashboard-projects {:team-id (get-in state [:profile :default-team-id])}))
(->> (rx/of (ntf/info msg))
;; Delay so the navigation can finish
(rx/delay 250)))))))

View file

@ -1215,4 +1215,5 @@
(case type
:notification (dc/handle-notification msg)
:team-permissions-change (dc/change-team-permissions (assoc msg :workspace? false))
:removed-from-team (dc/removed-from-team msg)
nil))

View file

@ -2106,24 +2106,7 @@
(pcb/mod-page {:background (:color color)}))]
(rx/of (dch/commit-changes changes)))))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Read only
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn set-workspace-read-only
[read-only?]
(ptk/reify ::set-workspace-read-only
ptk/UpdateEvent
(update [_ state]
(assoc-in state [:workspace-global :read-only?] read-only?))
ptk/WatchEvent
(watch [_ _ _]
(if read-only?
(rx/of :interrupt
(remove-layout-flag :colorpalette)
(remove-layout-flag :textpalette))
(rx/empty)))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Measurements

View file

@ -7,6 +7,8 @@
(ns app.main.data.workspace.common
(:require
[app.common.logging :as log]
[app.main.data.workspace.layout :as dwl]
[beicon.v2.core :as rx]
[potok.v2.core :as ptk]))
;; Change this to :info :debug or :trace to debug this module
@ -56,3 +58,22 @@
ptk/UpdateEvent
(update [_ state]
(update-in state [:workspace-local :hide-toolbar] not))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Read only
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn set-workspace-read-only
[read-only?]
(ptk/reify ::set-workspace-read-only
ptk/UpdateEvent
(update [_ state]
(assoc-in state [:workspace-global :read-only?] read-only?))
ptk/WatchEvent
(watch [_ _ _]
(if read-only?
(rx/of :interrupt
(dwl/remove-layout-flag :colorpalette)
(dwl/remove-layout-flag :textpalette))
(rx/empty)))))

View file

@ -12,10 +12,12 @@
[app.common.schema :as sm]
[app.common.uuid :as uuid]
[app.main.data.changes :as dch]
[app.main.data.common :refer [handle-notification change-team-permissions]]
[app.main.data.common :as dc]
[app.main.data.websocket :as dws]
[app.main.data.workspace.common :as dwc]
[app.main.data.workspace.edition :as dwe]
[app.main.data.workspace.layout :as dwly]
[app.main.data.workspace.libraries :as dwl]
[app.util.globals :refer [global]]
[app.util.mouse :as mse]
@ -103,16 +105,15 @@
(let [viewer? (= :viewer role)]
(rx/concat
(->> (rx/of :interrupt
(dwe/clear-edition-mode))
(rx/of :interrupt
(dwe/clear-edition-mode)
(dwc/set-workspace-read-only false))
(->> (rx/of (dc/change-team-permissions msg))
;; Delay so anything that launched :interrupt can finish
(rx/delay 500))
(rx/delay 100))
(if viewer?
(rx/of (dwly/set-options-mode :design))
(rx/empty))
(rx/of (change-team-permissions msg)))))))
(rx/of (dwly/set-options-mode :inspect))
(rx/of (dwly/set-options-mode :design))))))))
(defn- process-message
@ -125,8 +126,9 @@
:pointer-update (handle-pointer-update msg)
:file-change (handle-file-change msg)
:library-change (handle-library-change msg)
:notification (handle-notification msg)
:notification (dc/handle-notification msg)
:team-permissions-change (handle-change-team-permissions (assoc msg :workspace? true))
:removed-from-team (dc/removed-from-team msg)
nil))
(defn- handle-pointer-send

View file

@ -13,6 +13,7 @@
[app.common.geom.shapes :as gsh]
[app.common.types.shape.layout :as ctl]
[app.main.data.workspace :as udw]
[app.main.data.workspace.common :as dwc]
[app.main.refs :as refs]
[app.main.store :as st]
[app.main.ui.context :as ctx]
@ -147,8 +148,8 @@
(let [options-mode (keyword options-mode)]
(st/emit! (udw/set-options-mode options-mode))
(if (= options-mode :inspect)
(st/emit! :interrupt (udw/set-workspace-read-only true))
(st/emit! :interrupt (udw/set-workspace-read-only false)))))
(st/emit! :interrupt (dwc/set-workspace-read-only true))
(st/emit! :interrupt (dwc/set-workspace-read-only false)))))
design-content
(mf/html [:& design-menu {:selected selected

View file

@ -10,6 +10,7 @@
[app.common.files.helpers :as cfh]
[app.common.types.shape.layout :as ctl]
[app.main.data.workspace :as dw]
[app.main.data.workspace.common :as dwc]
[app.main.refs :as refs]
[app.main.store :as st]
[app.main.ui.context :as ctx]
@ -26,7 +27,7 @@
(fn []
(st/emit! :interrupt
(dw/set-options-mode :design)
(dw/set-workspace-read-only false))))]
(dwc/set-workspace-read-only false))))]
[:div {:class (stl/css :viewport-actions)}
[:div {:class (stl/css :viewport-actions-container)}
[:div {:class (stl/css :viewport-actions-title)}

View file

@ -23,6 +23,7 @@
[app.main.data.preview :as dp]
[app.main.data.viewer.shortcuts]
[app.main.data.workspace :as dw]
[app.main.data.workspace.common :as dwcm]
[app.main.data.workspace.path.shortcuts]
[app.main.data.workspace.selection :as dws]
[app.main.data.workspace.shortcuts]
@ -370,7 +371,7 @@
(defn ^:export set-workspace-read-only
[read-only?]
(st/emit! (dw/set-workspace-read-only read-only?)))
(st/emit! (dwcm/set-workspace-read-only read-only?)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; REPAIR & VALIDATION

View file

@ -752,22 +752,26 @@ msgstr "+ New project"
msgid "dashboard.new-project-prefix"
msgstr "New Project"
#: src/app/main/data/dashboard.cljs:72
#: src/app/main/data/common.cljs:72
msgid "dashboard.permissions-change.viewer"
msgstr "You are now a viewer on this team."
#: src/app/main/data/dashboard.cljs:75
#: src/app/main/data/common.cljs:75
msgid "dashboard.permissions-change.editor"
msgstr "You are now an editor on this team."
#: src/app/main/data/dashboard.cljs:78
#: src/app/main/data/common.cljs:78
msgid "dashboard.permissions-change.admin"
msgstr "You are now an admin on this team."
#: src/app/main/data/dashboard.cljs:81
#: src/app/main/data/common.cljs:195
msgid "dashboard.permissions-change.owner"
msgstr "You are now owner on this team."
#: src/app/main/data/common.cljs:229
msgid "dashboard.removed-from-team"
msgstr "You are not part of the team “%s“ anymore."
#: src/app/main/ui/dashboard/search.cljs:60
msgid "dashboard.no-matches-for"
msgstr "No matches found for “%s“"

View file

@ -762,22 +762,26 @@ msgstr "+ Nuevo proyecto"
msgid "dashboard.new-project-prefix"
msgstr "Nuevo Proyecto"
#: src/app/main/data/dashboard.cljs:72
#: src/app/main/data/common.cljs:72
msgid "dashboard.permissions-change.viewer"
msgstr "Ahora eres lector del equipo."
#: src/app/main/data/dashboard.cljs:75
#: src/app/main/data/common.cljs:75
msgid "dashboard.permissions-change.editor"
msgstr "Ahora eres editor del equipo."
#: src/app/main/data/dashboard.cljs:78
#: src/app/main/data/common.cljs:78
msgid "dashboard.permissions-change.admin"
msgstr "Ahora eres administrador del equipo."
#: src/app/main/data/dashboard.cljs:81
#: src/app/main/data/common.cljs:81
msgid "dashboard.permissions-change.owner"
msgstr "Ahora eres el dueño del equipo."
#: src/app/main/data/common.cljs:229
msgid "dashboard.removed-from-team"
msgstr "Ya no eres parte del equipo “%s“."
#: src/app/main/ui/dashboard/search.cljs:60
msgid "dashboard.no-matches-for"
msgstr "No se encuentra “%s“"