# code-snippets/3.10.2/js/components/common/cloud/WithCloudSnippetDownloadsContext.tsx

Code Snippets, version 3.10.2. 45 lines.

- Page: https://pluginprobe.com/plugins/code-snippets/3.10.2/code/js/components/common/cloud/WithCloudSnippetDownloadsContext.tsx
- Raw: https://pluginprobe.com/plugins/code-snippets/3.10.2/raw/js/components/common/cloud/WithCloudSnippetDownloadsContext.tsx
- Modified: 2026-08-04T13:35:40+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/code-snippets/3.10.2/code/js/components/common/cloud/WithCloudSnippetDownloadsContext.tsx#L10-L20`.

```tsx
import React, { useCallback, useState } from 'react'
import { createContextHook } from '../../../utils/bootstrap'
import type { PropsWithChildren } from 'react'
import type { CloudSnippetSchema } from '../../../types/schema/CloudSnippetSchema'

export interface CloudSnippetDownloadRecord {
	isDownloading: boolean
	localId?: number
}

interface CloudSnippetDownloadsContext {
	downloadRecords: Partial<Record<CloudSnippetSchema['id'], CloudSnippetDownloadRecord>>
	updateDownloadRecord: (
		snippetId: CloudSnippetSchema['id'],
		update: Partial<CloudSnippetDownloadRecord>
	) => void
}

const [Context, useCloudSnippetDownloads] =
	createContextHook<CloudSnippetDownloadsContext>('useCloudSnippetDownloads')

export const WithCloudSnippetDownloadsContext: React.FC<PropsWithChildren> = ({ children }) => {
	const [downloadRecords, setDownloadRecords] =
		useState<CloudSnippetDownloadsContext['downloadRecords']>({})
	const updateDownloadRecord = useCallback<CloudSnippetDownloadsContext['updateDownloadRecord']>(
		(snippetId, update) => setDownloadRecords(previous => ({
			...previous,
			[snippetId]: {
				isDownloading: false,
				...previous[snippetId],
				...update
			}
		})),
		[]
	)

	return (
		<Context.Provider value={{ downloadRecords, updateDownloadRecord }}>
			{children}
		</Context.Provider>
	)
}

export { useCloudSnippetDownloads }

```
