sanity-plugin-media
Version:
This version of `sanity-plugin-media` is for Sanity Studio V3.
33 lines (29 loc) • 920 B
text/typescript
import type {SanityClient} from '@sanity/client'
import type {HttpError} from '../types'
import groq from 'groq'
import {from, Observable, of, throwError} from 'rxjs'
import {mergeMap} from 'rxjs/operators'
import {TAG_DOCUMENT_NAME} from '../constants'
const checkTagName = (client: SanityClient, name: string) => {
return function <T>(source: Observable<T>): Observable<boolean> {
return source.pipe(
mergeMap(() => {
return from(
client.fetch(groq`count(*[_type == "${TAG_DOCUMENT_NAME}" && name.current == $name])`, {
name
})
) as Observable<number>
}),
mergeMap((existingTagCount: number) => {
if (existingTagCount > 0) {
return throwError({
message: 'Tag already exists',
statusCode: 409
} as HttpError)
}
return of(true)
})
)
}
}
export default checkTagName