Don't allow modification of private groups contracts
This commit is contained in:
parent
81941f1f1f
commit
87aeeaf0aa
|
@ -7,13 +7,13 @@ import { Button } from 'web/components/button'
|
|||
import { GroupSelector } from 'web/components/groups/group-selector'
|
||||
import {
|
||||
addContractToGroup,
|
||||
canModifyGroupContracts,
|
||||
removeContractFromGroup,
|
||||
} from 'web/lib/firebase/groups'
|
||||
import { User } from 'common/user'
|
||||
import { Contract } from 'common/contract'
|
||||
import { SiteLink } from 'web/components/site-link'
|
||||
import { useGroupsWithContract } from 'web/hooks/use-group'
|
||||
import { useGroupsWithContract, useMemberGroupIds } from 'web/hooks/use-group'
|
||||
import { Group } from 'common/group'
|
||||
|
||||
export function ContractGroupsList(props: {
|
||||
contract: Contract
|
||||
|
@ -22,6 +22,15 @@ export function ContractGroupsList(props: {
|
|||
const { user, contract } = props
|
||||
const { groupLinks } = contract
|
||||
const groups = useGroupsWithContract(contract)
|
||||
const memberGroupIds = useMemberGroupIds(user)
|
||||
|
||||
const canModifyGroupContracts = (group: Group, userId: string) => {
|
||||
return (
|
||||
group.creatorId === userId ||
|
||||
group.anyoneCanJoin ||
|
||||
memberGroupIds?.includes(group.id)
|
||||
)
|
||||
}
|
||||
return (
|
||||
<Col className={'gap-2'}>
|
||||
<span className={'text-xl text-indigo-700'}>
|
||||
|
@ -61,7 +70,7 @@ export function ContractGroupsList(props: {
|
|||
<Button
|
||||
color={'gray-white'}
|
||||
size={'xs'}
|
||||
onClick={() => removeContractFromGroup(group, contract, user.id)}
|
||||
onClick={() => removeContractFromGroup(group, contract)}
|
||||
>
|
||||
<XIcon className="h-4 w-4 text-gray-500" />
|
||||
</Button>
|
||||
|
|
|
@ -166,7 +166,6 @@ export async function addContractToGroup(
|
|||
contract: Contract,
|
||||
userId: string
|
||||
) {
|
||||
if (!canModifyGroupContracts(group, userId)) return
|
||||
const newGroupLinks = [
|
||||
...(contract.groupLinks ?? []),
|
||||
{
|
||||
|
@ -193,11 +192,8 @@ export async function addContractToGroup(
|
|||
|
||||
export async function removeContractFromGroup(
|
||||
group: Group,
|
||||
contract: Contract,
|
||||
userId: string
|
||||
contract: Contract
|
||||
) {
|
||||
if (!canModifyGroupContracts(group, userId)) return
|
||||
|
||||
if (contract.groupLinks?.map((l) => l.groupId).includes(group.id)) {
|
||||
const newGroupLinks = contract.groupLinks?.filter(
|
||||
(link) => link.slug !== group.slug
|
||||
|
@ -214,15 +210,6 @@ export async function removeContractFromGroup(
|
|||
await deleteDoc(contractDoc)
|
||||
}
|
||||
|
||||
export function canModifyGroupContracts(group: Group, userId: string) {
|
||||
return (
|
||||
group.creatorId === userId ||
|
||||
// TODO: check if member document exists
|
||||
// group.memberIds.includes(userId) ||
|
||||
group.anyoneCanJoin
|
||||
)
|
||||
}
|
||||
|
||||
export function getGroupLinkToDisplay(contract: Contract) {
|
||||
const { groupLinks } = contract
|
||||
const sortedGroupLinks = groupLinks?.sort(
|
||||
|
|
|
@ -20,7 +20,7 @@ import {
|
|||
import { formatMoney } from 'common/util/format'
|
||||
import { removeUndefinedProps } from 'common/util/object'
|
||||
import { ChoicesToggleGroup } from 'web/components/choices-toggle-group'
|
||||
import { canModifyGroupContracts, getGroup } from 'web/lib/firebase/groups'
|
||||
import { getGroup } from 'web/lib/firebase/groups'
|
||||
import { Group } from 'common/group'
|
||||
import { useTracking } from 'web/hooks/use-tracking'
|
||||
import { useWarnUnsavedChanges } from 'web/hooks/use-warn-unsaved-changes'
|
||||
|
@ -139,7 +139,7 @@ export function NewContract(props: {
|
|||
useEffect(() => {
|
||||
if (groupId)
|
||||
getGroup(groupId).then((group) => {
|
||||
if (group && canModifyGroupContracts(group, creator.id)) {
|
||||
if (group) {
|
||||
setSelectedGroup(group)
|
||||
setShowGroupSelector(false)
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user