vue#VNodeChild TypeScript Examples
The following examples show how to use
vue#VNodeChild.
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: DatetimeFormat.test.ts From vue-i18n-next with MIT License | 6 votes |
test('component', async () => {
const i18n = createI18n({
locale: 'en-US',
datetimeFormats
})
const MyComponent = defineComponent({
setup(props, context: SetupContext) {
return (): VNodeChild => h('span', context.slots.default!())
}
})
const App = defineComponent({
data: () => ({ MyComponent }),
template: `
<i18n-d :tag="MyComponent" :value="new Date()"></i18n-d>
<i18n-d :tag="MyComponent" :value="new Date()" format="long"></i18n-d>
<i18n-d
:tag="MyComponent"
:value="new Date()"
format="long"
locale="ja-JP-u-ca-japanese"
></i18n-d>
`
})
const wrapper = await mount(App, i18n)
expect(wrapper.html().includes('span')).toBeTruthy()
})
Example #2
Source File: NumberFormat.test.ts From vue-i18n-next with MIT License | 6 votes |
test('component', async () => {
const i18n = createI18n({
locale: 'en-US',
numberFormats
})
const MyComponent = defineComponent({
setup(props, context: SetupContext) {
return (): VNodeChild => h('span', context.slots.default!())
}
})
const App = defineComponent({
data: () => ({ MyComponent }),
template: `
<i18n-n :tag="MyComponent" :value="100"></i18n-n>
<i18n-n :tag="MyComponent" :value="100" format="currency"></i18n-n>
<i18n-n :tag="MyComponent" :value="100" format="currency" locale="ja-JP"></i18n-n>
`
})
const wrapper = await mount(App, i18n)
expect(wrapper.html()).toEqual(
`<span>100</span><span>$100.00</span><span>¥100</span>`
)
})
Example #3
Source File: Translation.test.ts From vue-i18n-next with MIT License | 6 votes |
test('component', async () => {
const i18n = createI18n({
locale: 'en',
messages
})
const MyComponent = defineComponent({
setup(props, context: SetupContext) {
return (): VNodeChild => h('p', context.slots.default!())
}
})
const App = defineComponent({
data: () => ({ MyComponent }),
template: `
<i18n-t :tag="MyComponent" class="name" keypath="message.named">
<template #name>
<span>kazupon</span>
</template>
</i18n-t>
`
})
const wrapper = await mount(App, i18n)
expect(wrapper.html()).toEqual(
`<p class="name">hello, <span>kazupon</span>!</p>`
)
})
Example #4
Source File: Translation.ts From vue-i18n-next with MIT License | 5 votes |
Translation = /* #__PURE__*/ /* defineComponent */ {
/* eslint-disable */
name: 'i18n-t',
props: assign(
{
keypath: {
type: String,
required: true
},
plural: {
type: [Number, String],
// eslint-disable-next-line @typescript-eslint/no-explicit-any
validator: (val: any): boolean => isNumber(val) || !isNaN(val)
}
},
baseFormatProps
),
/* eslint-enable */
// eslint-disable-next-line @typescript-eslint/no-explicit-any
setup(props: any, context: any): any {
const { slots, attrs } = context
// NOTE: avoid https://github.com/microsoft/rushstack/issues/1050
const i18n =
props.i18n ||
(useI18n({
useScope: props.scope as 'global' | 'parent',
__useComponent: true
}) as Composer & ComposerInternal)
const keys = Object.keys(slots).filter(key => key !== '_')
return (): VNodeChild => {
const options = {} as TranslateOptions
if (props.locale) {
options.locale = props.locale
}
if (props.plural !== undefined) {
options.plural = isString(props.plural) ? +props.plural : props.plural
}
const arg = getInterpolateArg(context, keys)
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const children = (i18n as any)[TransrateVNodeSymbol](
props.keypath,
arg,
options
)
const assignedAttrs = assign({}, attrs)
const tag =
isString(props.tag) || isObject(props.tag)
? props.tag
: getFragmentableTag('span')
return h(tag, assignedAttrs, children)
}
}
}
Example #5
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)
}
}
Example #6
Source File: Translation.test.ts From vue-i18n-next with MIT License | 5 votes |
test('message resolver', async () => {
const fn = jest.fn()
const mockMessageResolver = fn as jest.MockedFunction<MessageResolver>
mockMessageResolver.mockImplementation(
(obj: unknown, path: Path): PathValue => {
const msg = (obj as any)[path] // eslint-disable-line @typescript-eslint/no-explicit-any
return msg != null ? msg : null
}
)
const en = {
'message.named': 'hello, {name}!'
}
const i18n = createI18n({
locale: 'en',
messageResolver: fn,
messages: { en }
})
const MyComponent = defineComponent({
setup(props, context: SetupContext) {
return (): VNodeChild => h('p', context.slots.default!())
}
})
const App = defineComponent({
data: () => ({ MyComponent }),
template: `
<i18n-t :tag="MyComponent" class="name" keypath="message.named">
<template #name>
<span>kazupon</span>
</template>
</i18n-t>
`
})
const wrapper = await mount(App, i18n)
expect(wrapper.html()).toEqual(
`<p class="name">hello, <span>kazupon</span>!</p>`
)
expect(mockMessageResolver).toHaveBeenCalledTimes(1)
expect(mockMessageResolver.mock.calls[0][0]).toEqual(en)
expect(mockMessageResolver.mock.calls[0][1]).toEqual('message.named')
})