e72b193f06
* Add settings tab. Update style of component * Structuring of files/components * Updates to TexInput * Add RadioGroup * Last FE work * FE Updates * Webhooks Settings Tab * Styling updates to webhooks * Title/Description Update * General Page done * Collaborators WIP * Styling updates * Add custom message to updateProject * Radio Group Same Height * Styling updates to radio group. Disabled state * Updates pre demo * Updates to icons & post demo changes * Major Updates * Unsaved Changes Dialog * Routing WIP * Remove StatsBlock * Auto update discussions on Private * Routing/Redirects * New input style * Invite Dialog * Fix mobile radiogroup * Mobile Improvements * Fix console warning * Fix build * Disabled States * Fix console * Unhide webhooks * Updates from testing * Responsive fixes * Alignment fixes * Fix textarea mobile height * Updates to GraphQL Fragments * Fix disabled state * WIP Arrows for scroll * Update PageTabs - broken * Fix to PageTabs * PageTab fix initial scroll * Hide Scrollbar * Better underline method * Fix mobile initial underline * Webhooks Empty State * Fix input border * Fix empty state * Input Styling updates * Remove mobile smaller text * Update disabled state for disabled items * Updates disabled sates on Settings Block * Fix build. Disable Invite * Fixes to invite permissions * Disable role select when invite is disabled * Small alignment fix * Fix webhooks empty state * cleaning up unnecessary vue files * story improvement * Remove DisabledMessage prop * Fix disabled prop on Button * Move team to Leave Fragment * Remove unused Disabled Message props * Add limit to graphql query * Updates to BlockDiscussions * add formatTriggers function to webhooks * Remove md from button. Improved switch * Update RadioGroup.stories.ts * Update RadioGroup to use defineModel * Various styling and copy updates - More concise and accurate copy - More readable - Works better on mobile * Updates to Invite Dialog * Custom success Message * Update slot names * Remove md in TextInput. Set h-8 to default * Changes from call with fabs * Replace isOwner with composable * Set SettingsBlock icon as optional * Comments from PR * Updates from PR * Final Tidy Ups * Fix Title/Description * Fix spacing issue on Webhooks page * Update borders and colors to align with Automate Makes the same changes that I recently made to the unreleased Automate tab * WEB-869 * Improve styling of radiogroup component Better borders, hover effect, bigger checkmark icon, more subtle active background color, same across breakpoints. * Adjust border styling of RadioGroup component * Improve circle around checkmark in RadioGroup * Split Tabs into 2 components * Restyle overflow arrows * Adjust gap and remove icons from vertical nav Too many icons on the screen got distracting. * Ensure active item visible * Increase gap on vertical nav * Update copy for Access and Discussions settings * Input Tidyup * WEB-877 update-collaborators-block * Update inputs to new style * Fix webhooks button hover state * Fix comment copy Appears in the access settings before embedding a model * Remove hover shadow from search input on Dashboard * Small change from Benjamin * Change collaborators permissions copy * Comments from PR #1 * Comments from PR #2 * Fix condition for EditableHeader * Updates from CR --------- Co-authored-by: Kristaps Fabians Geikins <fabis94@live.com> Co-authored-by: Benjamin Ottensten <benjamin.ottensten@gmail.com>
104 lines
2.6 KiB
TypeScript
104 lines
2.6 KiB
TypeScript
import { Roles } from '@speckle/shared'
|
|
import type { Nullable, ServerRoles } from '@speckle/shared'
|
|
import { graphql } from '~/lib/common/generated/gql/gql'
|
|
import { useActiveUser } from '~~/lib/auth/composables/activeUser'
|
|
import type {
|
|
ProjectPageTeamInternals_ProjectFragment,
|
|
ProjectsPageTeamDialogManagePermissions_ProjectFragment
|
|
} from '~~/lib/common/generated/gql/graphql'
|
|
import type { ProjectCollaboratorListItem } from '~~/lib/projects/helpers/components'
|
|
|
|
graphql(`
|
|
fragment ProjectPageTeamInternals_Project on Project {
|
|
id
|
|
role
|
|
invitedTeam {
|
|
id
|
|
title
|
|
role
|
|
inviteId
|
|
user {
|
|
role
|
|
...LimitedUserAvatar
|
|
}
|
|
}
|
|
team {
|
|
role
|
|
user {
|
|
role
|
|
...LimitedUserAvatar
|
|
}
|
|
}
|
|
}
|
|
`)
|
|
|
|
export function useTeamManagePermissionsInternals(
|
|
project: Ref<
|
|
| ProjectsPageTeamDialogManagePermissions_ProjectFragment
|
|
| ProjectPageTeamInternals_ProjectFragment
|
|
| undefined
|
|
>
|
|
) {
|
|
const { isGuest: isServerGuest, activeUser } = useActiveUser()
|
|
|
|
const isOwner = computed(() => project.value?.role === Roles.Stream.Owner)
|
|
|
|
return {
|
|
activeUser,
|
|
isOwner,
|
|
isServerGuest
|
|
}
|
|
}
|
|
|
|
export function useTeamInternals(
|
|
projectData: ComputedRef<ProjectPageTeamInternals_ProjectFragment | undefined>
|
|
) {
|
|
const { isOwner, activeUser, isServerGuest } =
|
|
useTeamManagePermissionsInternals(projectData)
|
|
|
|
const collaboratorListItems = computed((): ProjectCollaboratorListItem[] => {
|
|
const results: ProjectCollaboratorListItem[] = []
|
|
|
|
for (const invitedUser of projectData.value?.invitedTeam || []) {
|
|
results.push({
|
|
id: invitedUser.id,
|
|
title: invitedUser.title,
|
|
user: invitedUser.user || null,
|
|
role: invitedUser.role,
|
|
inviteId: invitedUser.inviteId,
|
|
serverRole: (invitedUser.user?.role || null) as Nullable<ServerRoles>
|
|
})
|
|
}
|
|
|
|
for (const collaborator of projectData.value?.team ?? []) {
|
|
results.push({
|
|
id: collaborator.user.id,
|
|
title: collaborator.user.name,
|
|
user: collaborator.user,
|
|
role: collaborator.role,
|
|
inviteId: null,
|
|
serverRole: collaborator.user.role as ServerRoles
|
|
})
|
|
}
|
|
|
|
return results
|
|
})
|
|
|
|
const canLeaveProject = computed(() => {
|
|
if (!activeUser.value || !projectData.value?.role) {
|
|
return false
|
|
}
|
|
|
|
const userId = activeUser.value.id
|
|
const owners = projectData.value.team.filter((t) => t.role === Roles.Stream.Owner)
|
|
return owners.length !== 1 || owners[0].user.id !== userId
|
|
})
|
|
|
|
return {
|
|
collaboratorListItems,
|
|
isOwner,
|
|
canLeaveProject,
|
|
isServerGuest
|
|
}
|
|
}
|