UNPKG

@sanity/scheduled-publishing

Version:

> [!IMPORTANT] > As of [v3.39.0](https://www.sanity.io/changelog/e6013ee5-8214-4e03-9593-f7b19124b8a3) of Sanity Studio, this plugin has been deprecated and the Scheduled Publishing functionality has been moved into the core studio package. > Read more an

81 lines (69 loc) 2.25 kB
import {Schedule} from '../types' import {debugWithName} from '../utils/debug' import {useMemo} from 'react' import {SanityClient} from '@sanity/client' import {useClient} from 'sanity' const debug = debugWithName('useScheduleOperation') export function useScheduleApi(): ReturnType<typeof createScheduleApi> { const client = useClient({apiVersion: '2022-09-01'}) return useMemo(() => createScheduleApi(client), [client]) } function createScheduleApi(client: SanityClient) { const {dataset, projectId} = client.config() function _create({date, documentId}: {date: string; documentId: string}) { debug('_create:', documentId) // Round date to nearest second (mutate) const roundedDate = new Date(date) roundedDate.setSeconds(0) roundedDate.setMilliseconds(0) return client.request<Schedule>({ body: { documents: [{documentId}], executeAt: roundedDate, name: roundedDate, }, method: 'POST', uri: `/schedules/${projectId}/${dataset}`, }) } function _delete({scheduleId}: {scheduleId: string}) { debug('_delete:', scheduleId) return client.request<void>({ method: 'DELETE', uri: `/schedules/${projectId}/${dataset}/${scheduleId}`, }) } function _deleteMultiple({scheduleIds}: {scheduleIds: string[]}) { debug('_deleteMultiple:', scheduleIds) const requests = scheduleIds.map((scheduleId) => _delete({scheduleId})) return Promise.allSettled(requests) } function _publish({scheduleId}: {scheduleId: string}) { debug('_publish:', scheduleId) return client.request<{transactionId: string}>({ method: 'POST', uri: `/schedules/${projectId}/${dataset}/${scheduleId}/publish`, }) } function _update({ documentSchedule, scheduleId, }: { documentSchedule: Partial<Schedule> scheduleId: string }) { debug('_update:', scheduleId, documentSchedule) return client.request<{transactionId: string}>({ body: documentSchedule, method: 'PATCH', uri: `/schedules/${projectId}/${dataset}/${scheduleId}`, }) } return { create: _create, delete: _delete, deleteMultiple: _deleteMultiple, publish: _publish, update: _update, } }