-
-
Notifications
You must be signed in to change notification settings - Fork 432
/
Copy pathcomponent.tsx
79 lines (72 loc) · 1.67 KB
/
component.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
import { defineComponent, ref, watch, type Ref, h } from 'vue'
import type { LinkTooltipConfig } from '../slices'
import { Icon } from '../../__internal__/components/icon'
h
type EditLinkProps = {
config: Ref<LinkTooltipConfig>
src: Ref<string>
onConfirm: (href: string) => void
onCancel: () => void
}
export const EditLink = defineComponent<EditLinkProps>({
props: {
config: {
type: Object,
required: true,
},
src: {
type: Object,
required: true,
},
onConfirm: {
type: Function,
required: true,
},
onCancel: {
type: Function,
required: true,
},
},
setup({ config, src, onConfirm, onCancel }) {
const link = ref(src)
watch(src, (value) => {
link.value = value
})
const onConfirmEdit = () => {
onConfirm(link.value)
}
const onKeydown = (e: KeyboardEvent) => {
e.stopPropagation()
if (e.key === 'Enter') {
e.preventDefault()
onConfirmEdit()
}
if (e.key === 'Escape') {
e.preventDefault()
onCancel()
}
}
return () => {
return (
<div class="link-edit">
<input
class="input-area"
placeholder={config.value.inputPlaceholder}
onKeydown={onKeydown}
onInput={(e: Event) => {
link.value = (e.target as HTMLInputElement).value
}}
value={link.value}
/>
{link.value ? (
<Icon
class="button confirm"
icon={config.value.confirmButton()}
onClick={onConfirmEdit}
/>
) : null}
</div>
)
}
},
})