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)
}