Skip to content

Commit 09b291a

Browse files
committed
Bring back onCreateCoverage and reset to default placeholder when dragging over
1 parent 7d5d558 commit 09b291a

File tree

3 files changed

+33
-18
lines changed

3 files changed

+33
-18
lines changed

packages/slate-editor/src/extensions/placeholders/PlaceholdersExtension.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,9 @@ export interface Parameters {
3636
removable?: RemovableFlagConfig;
3737
withAttachmentPlaceholders?: boolean;
3838
withContactPlaceholders?: false | Pick<ContactPlaceholderElement.Props, 'renderPlaceholder'>;
39-
withCoveragePlaceholders?: false | Pick<CoveragePlaceholderElement.Props, 'renderPlaceholder'>;
39+
withCoveragePlaceholders?:
40+
| false
41+
| Pick<CoveragePlaceholderElement.Props, 'onCreateCoverage' | 'renderPlaceholder'>;
4042
withEmbedPlaceholders?: false | { fetchOembed: FetchOEmbedFn };
4143
withGalleryPlaceholders?: boolean | { withMediaGalleryTab: WithMediaGalleryTab };
4244
withGalleryBookmarkPlaceholders?:

packages/slate-editor/src/extensions/placeholders/elements/CoveragePlaceholderElement.tsx

+29-17
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
import type { ProgressPromise } from '@prezly/progress-promise';
22
import type { CoverageNode } from '@prezly/slate-types';
3+
import type { PrezlyFileInfo } from '@prezly/uploadcare';
4+
import { toProgressPromise, UploadcareFile } from '@prezly/uploadcare';
35
import type { UploadInfo } from '@prezly/uploadcare-widget';
6+
import uploadcare from '@prezly/uploadcare-widget';
47
import type { ReactNode } from 'react';
5-
import React, { /*type DragEvent,*/ useEffect, useState } from 'react';
8+
import React, { type DragEvent, useEffect, useState } from 'react';
69
import { Transforms } from 'slate';
710
import { useSelected, useSlateStatic } from 'slate-react';
811

@@ -29,6 +32,7 @@ export function CoveragePlaceholderElement({
2932
children,
3033
element,
3134
format = 'card',
35+
onCreateCoverage,
3236
removable,
3337
renderPlaceholder,
3438
}: CoveragePlaceholderElement.Props) {
@@ -43,23 +47,27 @@ export function CoveragePlaceholderElement({
4347
},
4448
);
4549

46-
// const handleDrop = useFunction((event: DragEvent) => {
47-
// event.preventDefault();
48-
// event.stopPropagation();
49-
50-
// const [file] = Array.from(event.dataTransfer.files)
51-
// .slice(0, 1)
52-
// .map((file) => uploadcare.fileFrom('object', file));
50+
const handleDragOver = useFunction(() => {
51+
setCustomRendered(false);
52+
});
5353

54-
// if (file) {
55-
// const uploading = toProgressPromise(file).then(async (fileInfo: PrezlyFileInfo) => {
56-
// const file = UploadcareFile.createFromUploadcareWidgetPayload(fileInfo);
57-
// const ref = await onCreateCoverage(file);
58-
// return { coverage: { id: ref.coverage.id } };
59-
// });
60-
// PlaceholdersManager.register(element.type, element.uuid, uploading);
61-
// }
62-
// });
54+
const handleDrop = useFunction((event: DragEvent) => {
55+
event.preventDefault();
56+
event.stopPropagation();
57+
58+
const [file] = Array.from(event.dataTransfer.files)
59+
.slice(0, 1)
60+
.map((file) => uploadcare.fileFrom('object', file));
61+
62+
if (file) {
63+
const uploading = toProgressPromise(file).then(async (fileInfo: PrezlyFileInfo) => {
64+
const file = UploadcareFile.createFromUploadcareWidgetPayload(fileInfo);
65+
const ref = await onCreateCoverage(file);
66+
return { coverage: { id: ref.coverage.id } };
67+
});
68+
PlaceholdersManager.register(element.type, element.uuid, uploading);
69+
}
70+
});
6371

6472
const handleSelect = useFunction((data: CoverageRef) => {
6573
EventsEditor.dispatchEvent(editor, 'coverage-placeholder-submitted', {
@@ -94,11 +102,13 @@ export function CoveragePlaceholderElement({
94102
title={Title}
95103
description={Description}
96104
onClick={() => setCustomRendered(true)}
105+
onDrop={handleDrop}
97106
removable={removable}
98107
renderFrame={
99108
isCustomRendered
100109
? () =>
101110
renderPlaceholder({
111+
onDragOver: handleDragOver,
102112
onRemove: removable ? handleRemove : undefined,
103113
onSelect: handleSelect,
104114
onUpload: handleUpload,
@@ -117,7 +127,9 @@ export namespace CoveragePlaceholderElement {
117127
extends Pick<BaseProps<CoverageRef>, 'attributes' | 'children' | 'format'>,
118128
Pick<PlaceholderElementProps, 'removable'> {
119129
element: PlaceholderNode<PlaceholderNode.Type.COVERAGE>;
130+
onCreateCoverage(input: UploadcareFile): Promise<CoverageRef>;
120131
renderPlaceholder: (props: {
132+
onDragOver: () => void;
121133
onRemove: (() => void) | undefined;
122134
onSelect: (data: CoverageRef) => void;
123135
onUpload: (

packages/slate-editor/src/modules/editor/test-utils.ts

+1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ export function getAllExtensions() {
3131
withCoverage: {
3232
dateFormat: 'YYYY/MM/DD',
3333
fetchCoverage: createDelayedResolve(coverage),
34+
onCreateCoverage: createDelayedResolve({ coverage }),
3435
onEdit: () => {},
3536
renderPlaceholder: () => null,
3637
withLayoutOptions: true,

0 commit comments

Comments
 (0)