49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
| /*
 | |
|  * SPDX-FileCopyrightText: syuilo and misskey-project
 | |
|  * SPDX-License-Identifier: AGPL-3.0-only
 | |
|  */
 | |
| 
 | |
| import * as Misskey from 'misskey-js';
 | |
| 
 | |
| type DragDataMap = {
 | |
| 	driveFiles: Misskey.entities.DriveFile[];
 | |
| 	driveFolders: Misskey.entities.DriveFolder[];
 | |
| 	deckColumn: string;
 | |
| };
 | |
| 
 | |
| // NOTE: dataTransfer の format は大文字小文字区別されないっぽいので toLowerCase が必要
 | |
| 
 | |
| export function setDragData<T extends keyof DragDataMap>(
 | |
| 	event: DragEvent,
 | |
| 	type: T,
 | |
| 	data: DragDataMap[T],
 | |
| ) {
 | |
| 	if (event.dataTransfer == null) return;
 | |
| 
 | |
| 	event.dataTransfer.setData(`misskey/${type}`.toLowerCase(), JSON.stringify(data));
 | |
| }
 | |
| 
 | |
| export function getDragData<T extends keyof DragDataMap>(
 | |
| 	event: DragEvent,
 | |
| 	type: T,
 | |
| ): DragDataMap[T] | null {
 | |
| 	if (event.dataTransfer == null) return null;
 | |
| 
 | |
| 	const data = event.dataTransfer.getData(`misskey/${type}`.toLowerCase());
 | |
| 	if (data == null || data === '') return null;
 | |
| 
 | |
| 	return JSON.parse(data);
 | |
| }
 | |
| 
 | |
| export function checkDragDataType(
 | |
| 	event: DragEvent,
 | |
| 	types: (keyof DragDataMap)[],
 | |
| ): boolean {
 | |
| 	if (event.dataTransfer == null) return false;
 | |
| 
 | |
| 	const dataType = event.dataTransfer.types[0];
 | |
| 	if (dataType == null || dataType === '') return false;
 | |
| 
 | |
| 	return types.some((type) => `misskey/${type}`.toLowerCase() === dataType.toLowerCase());
 | |
| }
 |