fix: Improve the getAttributes method implementation
This commit is contained in:
		
							parent
							
								
									c398448152
								
							
						
					
					
						commit
						782b2f4d00
					
				@ -877,19 +877,28 @@ export const typeMapGet = (parent, key) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * @param {AbstractType<any>} parent
 | 
					 * @param {AbstractType<any>} parent
 | 
				
			||||||
 | 
					 * @param {Snapshot} [snapshot]
 | 
				
			||||||
 * @return {Object<string,Object<string,any>|number|null|Array<any>|string|Uint8Array|AbstractType<any>|undefined>}
 | 
					 * @return {Object<string,Object<string,any>|number|null|Array<any>|string|Uint8Array|AbstractType<any>|undefined>}
 | 
				
			||||||
 *
 | 
					 *
 | 
				
			||||||
 * @private
 | 
					 * @private
 | 
				
			||||||
 * @function
 | 
					 * @function
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
export const typeMapGetAll = (parent) => {
 | 
					export const typeMapGetAll = (parent, snapshot) => {
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
   * @type {Object<string,any>}
 | 
					   * @type {Object<string,any>}
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
  const res = {}
 | 
					  const res = {}
 | 
				
			||||||
 | 
					  const isItemExist = parent._item && isVisible(parent._item, snapshot)
 | 
				
			||||||
  parent._map.forEach((value, key) => {
 | 
					  parent._map.forEach((value, key) => {
 | 
				
			||||||
    if (!value.deleted) {
 | 
					    /**
 | 
				
			||||||
      res[key] = value.content.getContent()[value.length - 1]
 | 
					     * @type {Item|null}
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    let item = value
 | 
				
			||||||
 | 
					    while (isItemExist && item && !isVisible(item, snapshot)) {
 | 
				
			||||||
 | 
					      item = item.left
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (item) {
 | 
				
			||||||
 | 
					      res[key] = item.content.getContent()[item.length - 1]
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
  return res
 | 
					  return res
 | 
				
			||||||
 | 
				
			|||||||
@ -1259,12 +1259,14 @@ export class YText extends AbstractType {
 | 
				
			|||||||
   *
 | 
					   *
 | 
				
			||||||
   * @note Xml-Text nodes don't have attributes. You can use this feature to assign properties to complete text-blocks.
 | 
					   * @note Xml-Text nodes don't have attributes. You can use this feature to assign properties to complete text-blocks.
 | 
				
			||||||
   *
 | 
					   *
 | 
				
			||||||
 | 
					   * @param {Snapshot} [snapshot]
 | 
				
			||||||
 | 
					   *
 | 
				
			||||||
   * @return {Object<string, any>} A JSON Object that describes the attributes.
 | 
					   * @return {Object<string, any>} A JSON Object that describes the attributes.
 | 
				
			||||||
   *
 | 
					   *
 | 
				
			||||||
   * @public
 | 
					   * @public
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
  getAttributes () {
 | 
					  getAttributes (snapshot) {
 | 
				
			||||||
    return typeMapGetAll(this)
 | 
					    return typeMapGetAll(this, snapshot)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
 | 
				
			|||||||
@ -10,7 +10,7 @@ import {
 | 
				
			|||||||
  typeMapGetAll,
 | 
					  typeMapGetAll,
 | 
				
			||||||
  typeListForEach,
 | 
					  typeListForEach,
 | 
				
			||||||
  YXmlElementRefID,
 | 
					  YXmlElementRefID,
 | 
				
			||||||
  YXmlText, ContentType, AbstractType, UpdateDecoderV1, UpdateDecoderV2, UpdateEncoderV1, UpdateEncoderV2, Doc, Item // eslint-disable-line
 | 
					  YXmlText, ContentType, AbstractType, UpdateDecoderV1, UpdateDecoderV2, UpdateEncoderV1, UpdateEncoderV2, Doc, Item, Snapshot // eslint-disable-line
 | 
				
			||||||
} from '../internals.js'
 | 
					} from '../internals.js'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
@ -192,12 +192,14 @@ export class YXmlElement extends YXmlFragment {
 | 
				
			|||||||
  /**
 | 
					  /**
 | 
				
			||||||
   * Returns all attribute name/value pairs in a JSON Object.
 | 
					   * Returns all attribute name/value pairs in a JSON Object.
 | 
				
			||||||
   *
 | 
					   *
 | 
				
			||||||
 | 
					   * @param {Snapshot} [snapshot]
 | 
				
			||||||
 | 
					   *
 | 
				
			||||||
   * @return {{ [Key in Extract<keyof KV,string>]?: KV[Key]}} A JSON Object that describes the attributes.
 | 
					   * @return {{ [Key in Extract<keyof KV,string>]?: KV[Key]}} A JSON Object that describes the attributes.
 | 
				
			||||||
   *
 | 
					   *
 | 
				
			||||||
   * @public
 | 
					   * @public
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
  getAttributes () {
 | 
					  getAttributes (snapshot) {
 | 
				
			||||||
    return /** @type {any} */ (typeMapGetAll(this))
 | 
					    return /** @type {any} */ (typeMapGetAll(this, snapshot))
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user