vue#RenderFunction TypeScript Examples
The following examples show how to use
vue#RenderFunction.
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: formatRenderer.ts From vue-i18n-next with MIT License | 5 votes |
export function renderFormatter<
Props extends FormattableProps<Value, Format>,
Value,
Format extends FormatOverrideOptions,
Arg extends FormatOptions,
Return extends FormatPartReturn
>(
props: Props,
context: SetupContext,
slotKeys: string[],
partFormatter: (...args: unknown[]) => string | Return[]
): RenderFunction {
const { slots, attrs } = context
return (): VNodeChild => {
const options = { part: true } as Arg
let overrides = {} as FormatOverrideOptions
if (props.locale) {
options.locale = props.locale
}
if (isString(props.format)) {
options.key = props.format
} else if (isObject(props.format)) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
if (isString((props.format as any).key)) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
options.key = (props.format as any).key
}
// Filter out number format options only
overrides = Object.keys(props.format).reduce((options, prop) => {
return slotKeys.includes(prop)
? assign({}, options, { [prop]: (props.format as any)[prop] }) // eslint-disable-line @typescript-eslint/no-explicit-any
: options
}, {})
}
const parts = partFormatter(...[props.value, options, overrides])
let children = [options.key] as VNodeArrayChildren
if (isArray(parts)) {
children = parts.map((part, index) => {
const slot = slots[part.type]
const node = slot
? slot({ [part.type]: part.value, index, parts })
: [part.value]
if (isVNode(node)) {
node[0].key = `${part.type}-${index}`
}
return node
})
} else if (isString(parts)) {
children = [parts]
}
const assignedAttrs = assign({}, attrs)
const tag =
isString(props.tag) || isObject(props.tag)
? props.tag
: getFragmentableTag('span')
return h(tag, assignedAttrs, children)
}
}