feat: modularize block system (#718)

This commit is contained in:
Jeremy 2025-01-27 14:19:47 +05:30 committed by GitHub
parent 5e8cddc886
commit 38527ff92e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 684 additions and 604 deletions

View file

@ -1,8 +1,8 @@
'use client';
import useSWR from 'swr';
import { UIBlock } from '@/components/block';
import { useCallback, useMemo } from 'react';
import useSWR from 'swr';
export const initialBlockData: UIBlock = {
documentId: 'init',
@ -19,7 +19,6 @@ export const initialBlockData: UIBlock = {
},
};
// Add type for selector function
type Selector<T> = (state: UIBlock) => T;
export function useBlockSelector<Selected>(selector: Selector<Selected>) {
@ -64,5 +63,22 @@ export function useBlock() {
[setLocalBlock],
);
return useMemo(() => ({ block, setBlock }), [block, setBlock]);
const { data: localBlockMetadata, mutate: setLocalBlockMetadata } =
useSWR<any>(
() => (block.documentId ? `block-metadata-${block.documentId}` : null),
null,
{
fallbackData: null,
},
);
return useMemo(
() => ({
block,
setBlock,
metadata: localBlockMetadata,
setMetadata: setLocalBlockMetadata,
}),
[block, setBlock, localBlockMetadata, setLocalBlockMetadata],
);
}

View file

@ -1,22 +0,0 @@
import { useCopyToClipboard } from 'usehooks-ts';
async function copyImageToClipboard(base64String: string) {
try {
const blob = await fetch(`data:image/png;base64,${base64String}`).then(
(res) => res.blob(),
);
const item = new ClipboardItem({
'image/png': blob,
});
await navigator.clipboard.write([item]);
} catch (error) {
console.error('Failed to copy image to clipboard:', error);
}
}
export function useMultimodalCopyToClipboard() {
const [_, copyTextToClipboard] = useCopyToClipboard();
return { copyTextToClipboard, copyImageToClipboard };
}