improve: set select control value style #298
This commit is contained in:
@@ -11,7 +11,7 @@ import {
|
|||||||
IControlInstance
|
IControlInstance
|
||||||
} from '../../../../interface/Control'
|
} from '../../../../interface/Control'
|
||||||
import { IElement } from '../../../../interface/Element'
|
import { IElement } from '../../../../interface/Element'
|
||||||
import { omitObject, splitText } from '../../../../utils'
|
import { omitObject, pickObject, splitText } from '../../../../utils'
|
||||||
import { formatElementContext } from '../../../../utils/element'
|
import { formatElementContext } from '../../../../utils/element'
|
||||||
import { Control } from '../Control'
|
import { Control } from '../Control'
|
||||||
|
|
||||||
@@ -36,9 +36,9 @@ export class SelectControl implements IControlInstance {
|
|||||||
return this.element.control?.code || null
|
return this.element.control?.code || null
|
||||||
}
|
}
|
||||||
|
|
||||||
public getValue(): IElement[] {
|
public getValue(context: IControlContext = {}): IElement[] {
|
||||||
const elementList = this.control.getElementList()
|
const elementList = context.elementList || this.control.getElementList()
|
||||||
const { startIndex } = this.control.getRange()
|
const { startIndex } = context.range || this.control.getRange()
|
||||||
const startElement = elementList[startIndex]
|
const startElement = elementList[startIndex]
|
||||||
const data: IElement[] = []
|
const data: IElement[] = []
|
||||||
// 向左查找
|
// 向左查找
|
||||||
@@ -187,26 +187,31 @@ export class SelectControl implements IControlInstance {
|
|||||||
// 转换code
|
// 转换code
|
||||||
const valueSet = valueSets.find(v => v.code === code)
|
const valueSet = valueSets.find(v => v.code === code)
|
||||||
if (!valueSet) return
|
if (!valueSet) return
|
||||||
// 清空选项
|
|
||||||
const startIndex = this.clearSelect(context)
|
|
||||||
this.control.removePlaceholder(startIndex)
|
|
||||||
// 插入
|
|
||||||
const elementList = context.elementList || this.control.getElementList()
|
const elementList = context.elementList || this.control.getElementList()
|
||||||
const startElement = elementList[startIndex]
|
// 样式赋值元素-默认值的第一个字符样式
|
||||||
const anchorElement =
|
const styleElement = pickObject(
|
||||||
startElement.controlComponent === ControlComponent.PREFIX
|
this.getValue(context)[0],
|
||||||
? omitObject(startElement, EDITOR_ELEMENT_STYLE_ATTR)
|
EDITOR_ELEMENT_STYLE_ATTR
|
||||||
: startElement
|
)
|
||||||
const start = startIndex + 1
|
// 清空选项
|
||||||
|
const prefixIndex = this.clearSelect(context)
|
||||||
|
this.control.removePlaceholder(prefixIndex)
|
||||||
|
// 属性赋值元素-默认为前缀属性
|
||||||
|
const propertyElement = omitObject(
|
||||||
|
elementList[prefixIndex],
|
||||||
|
EDITOR_ELEMENT_STYLE_ATTR
|
||||||
|
)
|
||||||
|
const start = prefixIndex + 1
|
||||||
const data = splitText(valueSet.value)
|
const data = splitText(valueSet.value)
|
||||||
const draw = this.control.getDraw()
|
const draw = this.control.getDraw()
|
||||||
for (let i = 0; i < data.length; i++) {
|
for (let i = 0; i < data.length; i++) {
|
||||||
const newElement: IElement = {
|
const newElement: IElement = {
|
||||||
...anchorElement,
|
...styleElement,
|
||||||
|
...propertyElement,
|
||||||
value: data[i],
|
value: data[i],
|
||||||
controlComponent: ControlComponent.VALUE
|
controlComponent: ControlComponent.VALUE
|
||||||
}
|
}
|
||||||
formatElementContext(elementList, [newElement], startIndex)
|
formatElementContext(elementList, [newElement], prefixIndex)
|
||||||
draw.spliceElementList(elementList, start + i, 0, newElement)
|
draw.spliceElementList(elementList, start + i, 0, newElement)
|
||||||
}
|
}
|
||||||
// 设置状态
|
// 设置状态
|
||||||
|
|||||||
@@ -216,6 +216,16 @@ export function cloneProperty<T>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function pickObject<T>(object: T, pickKeys: (keyof T)[]): T {
|
||||||
|
const newObject: T = <T>{}
|
||||||
|
for (const key in object) {
|
||||||
|
if (pickKeys.includes(key)) {
|
||||||
|
newObject[key] = object[key]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return newObject
|
||||||
|
}
|
||||||
|
|
||||||
export function omitObject<T>(object: T, omitKeys: (keyof T)[]): T {
|
export function omitObject<T>(object: T, omitKeys: (keyof T)[]): T {
|
||||||
const newObject: T = <T>{}
|
const newObject: T = <T>{}
|
||||||
for (const key in object) {
|
for (const key in object) {
|
||||||
|
|||||||
Reference in New Issue
Block a user