69 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
		
		
			
		
	
	
			69 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
|  | /** | ||
|  |  * Copyright (c) Meta Platforms, Inc. and affiliates. | ||
|  |  * | ||
|  |  * This source code is licensed under the MIT license found in the | ||
|  |  * LICENSE file in the root directory of this source tree. | ||
|  |  * | ||
|  |  */ | ||
|  | 
 | ||
|  | import type {Binding} from '.'; | ||
|  | import type {CollabElementNode} from './CollabElementNode'; | ||
|  | import type {LineBreakNode, NodeKey} from 'lexical'; | ||
|  | import type {Map as YMap} from 'yjs'; | ||
|  | 
 | ||
|  | import {$getNodeByKey, $isLineBreakNode} from 'lexical'; | ||
|  | 
 | ||
|  | export class CollabLineBreakNode { | ||
|  |   _map: YMap<unknown>; | ||
|  |   _key: NodeKey; | ||
|  |   _parent: CollabElementNode; | ||
|  |   _type: 'linebreak'; | ||
|  | 
 | ||
|  |   constructor(map: YMap<unknown>, parent: CollabElementNode) { | ||
|  |     this._key = ''; | ||
|  |     this._map = map; | ||
|  |     this._parent = parent; | ||
|  |     this._type = 'linebreak'; | ||
|  |   } | ||
|  | 
 | ||
|  |   getNode(): null | LineBreakNode { | ||
|  |     const node = $getNodeByKey(this._key); | ||
|  |     return $isLineBreakNode(node) ? node : null; | ||
|  |   } | ||
|  | 
 | ||
|  |   getKey(): NodeKey { | ||
|  |     return this._key; | ||
|  |   } | ||
|  | 
 | ||
|  |   getSharedType(): YMap<unknown> { | ||
|  |     return this._map; | ||
|  |   } | ||
|  | 
 | ||
|  |   getType(): string { | ||
|  |     return this._type; | ||
|  |   } | ||
|  | 
 | ||
|  |   getSize(): number { | ||
|  |     return 1; | ||
|  |   } | ||
|  | 
 | ||
|  |   getOffset(): number { | ||
|  |     const collabElementNode = this._parent; | ||
|  |     return collabElementNode.getChildOffset(this); | ||
|  |   } | ||
|  | 
 | ||
|  |   destroy(binding: Binding): void { | ||
|  |     const collabNodeMap = binding.collabNodeMap; | ||
|  |     collabNodeMap.delete(this._key); | ||
|  |   } | ||
|  | } | ||
|  | 
 | ||
|  | export function $createCollabLineBreakNode( | ||
|  |   map: YMap<unknown>, | ||
|  |   parent: CollabElementNode, | ||
|  | ): CollabLineBreakNode { | ||
|  |   const collabNode = new CollabLineBreakNode(map, parent); | ||
|  |   map._collabNode = collabNode; | ||
|  |   return collabNode; | ||
|  | } |