diff --git a/web/components/groups/contract-groups-list.tsx b/web/components/groups/contract-groups-list.tsx index 7bbcfa7c..d39a35d3 100644 --- a/web/components/groups/contract-groups-list.tsx +++ b/web/components/groups/contract-groups-list.tsx @@ -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 ( @@ -61,7 +70,7 @@ export function ContractGroupsList(props: { diff --git a/web/lib/firebase/groups.ts b/web/lib/firebase/groups.ts index 6da780e1..f125c5ed 100644 --- a/web/lib/firebase/groups.ts +++ b/web/lib/firebase/groups.ts @@ -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( diff --git a/web/pages/create.tsx b/web/pages/create.tsx index 8ea76cef..e133ae19 100644 --- a/web/pages/create.tsx +++ b/web/pages/create.tsx @@ -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) }