Fold delete
This commit is contained in:
parent
b1abfcda8b
commit
348c8d565a
|
@ -45,7 +45,7 @@ service cloud.firestore {
|
||||||
|
|
||||||
match /folds/{foldId} {
|
match /folds/{foldId} {
|
||||||
allow read;
|
allow read;
|
||||||
allow update: if request.auth.uid == resource.data.curatorId;
|
allow update, delete: if request.auth.uid == resource.data.curatorId;
|
||||||
}
|
}
|
||||||
|
|
||||||
match /folds/{foldId}/followers/{userId} {
|
match /folds/{foldId}/followers/{userId} {
|
||||||
|
|
|
@ -12,6 +12,7 @@ export * from './create-contract'
|
||||||
export * from './create-user'
|
export * from './create-user'
|
||||||
export * from './create-fold'
|
export * from './create-fold'
|
||||||
export * from './on-fold-follow'
|
export * from './on-fold-follow'
|
||||||
|
export * from './on-fold-delete'
|
||||||
export * from './unsubscribe'
|
export * from './unsubscribe'
|
||||||
export * from './update-contract-metrics'
|
export * from './update-contract-metrics'
|
||||||
export * from './update-user-metrics'
|
export * from './update-user-metrics'
|
||||||
|
|
10
functions/src/on-fold-delete.ts
Normal file
10
functions/src/on-fold-delete.ts
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
import * as functions from 'firebase-functions'
|
||||||
|
|
||||||
|
export const onFoldDelete = functions.firestore
|
||||||
|
.document('folds/{foldId}')
|
||||||
|
.onDelete(async (change, context) => {
|
||||||
|
const snapshot = await change.ref.collection('followers').get()
|
||||||
|
|
||||||
|
// Delete followers sub-collection.
|
||||||
|
await Promise.all(snapshot.docs.map((doc) => doc.ref.delete()))
|
||||||
|
})
|
|
@ -5,13 +5,16 @@ import { PencilIcon } from '@heroicons/react/outline'
|
||||||
|
|
||||||
import { Fold } from '../../common/fold'
|
import { Fold } from '../../common/fold'
|
||||||
import { parseWordsAsTags } from '../../common/util/parse'
|
import { parseWordsAsTags } from '../../common/util/parse'
|
||||||
import { updateFold } from '../lib/firebase/folds'
|
import { deleteFold, updateFold } from '../lib/firebase/folds'
|
||||||
import { toCamelCase } from '../lib/util/format'
|
import { toCamelCase } from '../lib/util/format'
|
||||||
import { Spacer } from './layout/spacer'
|
import { Spacer } from './layout/spacer'
|
||||||
import { TagsList } from './tags-list'
|
import { TagsList } from './tags-list'
|
||||||
|
import { useRouter } from 'next/router'
|
||||||
|
|
||||||
export function EditFoldButton(props: { fold: Fold; className?: string }) {
|
export function EditFoldButton(props: { fold: Fold; className?: string }) {
|
||||||
const { fold, className } = props
|
const { fold, className } = props
|
||||||
|
const router = useRouter()
|
||||||
|
|
||||||
const [name, setName] = useState(fold.name)
|
const [name, setName] = useState(fold.name)
|
||||||
const [about, setAbout] = useState(fold.about ?? '')
|
const [about, setAbout] = useState(fold.about ?? '')
|
||||||
|
|
||||||
|
@ -106,6 +109,20 @@ export function EditFoldButton(props: { fold: Fold; className?: string }) {
|
||||||
<Spacer h={4} />
|
<Spacer h={4} />
|
||||||
|
|
||||||
<div className="modal-action">
|
<div className="modal-action">
|
||||||
|
<label
|
||||||
|
htmlFor="edit"
|
||||||
|
onClick={() => {
|
||||||
|
if (confirm('Are you sure you want to delete this fold?')) {
|
||||||
|
deleteFold(fold)
|
||||||
|
router.replace('/folds')
|
||||||
|
}
|
||||||
|
}}
|
||||||
|
className={clsx(
|
||||||
|
'btn btn-sm btn-outline hover:bg-red-500 hover:border-red-500 mr-auto self-center'
|
||||||
|
)}
|
||||||
|
>
|
||||||
|
Delete
|
||||||
|
</label>
|
||||||
<label htmlFor="edit" className={clsx('btn')}>
|
<label htmlFor="edit" className={clsx('btn')}>
|
||||||
Cancel
|
Cancel
|
||||||
</label>
|
</label>
|
||||||
|
|
|
@ -26,6 +26,10 @@ export function updateFold(fold: Fold, updates: Partial<Fold>) {
|
||||||
return updateDoc(doc(foldCollection, fold.id), updates)
|
return updateDoc(doc(foldCollection, fold.id), updates)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function deleteFold(fold: Fold) {
|
||||||
|
return deleteDoc(doc(foldCollection, fold.id))
|
||||||
|
}
|
||||||
|
|
||||||
export async function listAllFolds() {
|
export async function listAllFolds() {
|
||||||
return getValues<Fold>(foldCollection)
|
return getValues<Fold>(foldCollection)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user