Skip to content

Commit f68b41d

Browse files
committed
feat: generic component type & render demo
1 parent faed321 commit f68b41d

File tree

3 files changed

+20
-12
lines changed

3 files changed

+20
-12
lines changed

playground/src/App.vue

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<script setup lang="ts">
2-
import { ref } from 'vue'
2+
import { h, ref } from 'vue'
33
import { Range } from '../../src'
44
import type { RangeData } from '../../src'
55
@@ -12,9 +12,14 @@ function handleAddThumbNumbers(value: number) {
1212
modelNumbersAdd.value.push(value)
1313
}
1414
15-
const modelData = ref<RangeData<string>[]>([])
15+
const modelData = ref<RangeData<string>[]>([
16+
{ data: '00:00', value: 10 },
17+
{ data: '59:59', value: 90 },
18+
])
1619
function handleAddThumbData(value: number) {
20+
const date = new Date()
1721
modelData.value.push({
22+
data: `${date.getMinutes()}:${date.getSeconds()}`,
1823
value,
1924
})
2025
}
@@ -46,6 +51,7 @@ function handleAddThumbData(value: number) {
4651
class="w-full pt16 pb8"
4752
add
4853
smooth
54+
:render-top="(data) => h('div', data.value)"
4955
@add-thumb="handleAddThumbNumbers"
5056
/>
5157
<h2>RangeData[]</h2>
@@ -57,6 +63,8 @@ function handleAddThumbData(value: number) {
5763
class="w-full pt16 pb8"
5864
add
5965
:limit="5"
66+
:render-top="(data) => h('div', data.data)"
67+
:render-bottom="(data) => h('div', data.value)"
6068
@add-thumb="handleAddThumbData"
6169
/>
6270
</template>

src/Range.vue

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
<script lang="ts" setup>
1+
<script lang="ts" setup generic="T">
22
import { computed, nextTick, provide, ref, watch } from 'vue'
33
import { RangeContainerRefKey, RangeTrackRefKey } from './Range'
44
import RangeThumb from './RangeThumb.vue'
55
import type { RangeData, RangeRenderFn, RangeValue } from './type'
66
import { percentage2value, swap, value2percentage } from './utils'
77
88
const props = withDefaults(defineProps<{
9-
modelValue: RangeValue
9+
modelValue: RangeValue<T>
1010
min?: number
1111
max?: number
1212
step?: number
@@ -15,8 +15,8 @@ const props = withDefaults(defineProps<{
1515
smooth?: boolean
1616
deduplicate?: boolean
1717
rangeHighlight?: boolean
18-
renderTop?: RangeRenderFn
19-
renderBottom?: RangeRenderFn
18+
renderTop?: RangeRenderFn<T>
19+
renderBottom?: RangeRenderFn<T>
2020
}>(), {
2121
modelValue: () => [],
2222
min: 0,
@@ -39,7 +39,7 @@ const modelType = computed<'single' | 'numbers' | 'data'>(() => {
3939
else
4040
return 'single'
4141
})
42-
const model = computed<RangeData[]>({
42+
const model = computed<RangeData<T>[]>({
4343
get: () => {
4444
const value = props.modelValue
4545
if (Array.isArray(value))
@@ -64,7 +64,7 @@ const allowAdd = computed(() =>
6464
)
6565
6666
const indexMap = ref<number[]>([])
67-
function sort(val: RangeData[]) {
67+
function sort(val: RangeData<T>[]) {
6868
let changed = false
6969
for (let i = val.length; i > 0; i--) {
7070
for (let j = 0; j < i - 1; j++) {

src/RangeThumb.vue

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
<script lang="ts" setup>
1+
<script lang="ts" setup generic="T">
22
import { inject, nextTick, ref } from 'vue'
33
import { RangeContainerRefKey, RangeTrackRefKey } from './Range'
44
import Render from './Render.vue'
55
import type { RangeData, RangeRenderFn } from './type'
66
77
const props = defineProps<{
88
position: number
9-
data: RangeData
9+
data: RangeData<T>
1010
active?: boolean
1111
disabled?: boolean
12-
renderTop?: RangeRenderFn
13-
renderBottom?: RangeRenderFn
12+
renderTop?: RangeRenderFn<T>
13+
renderBottom?: RangeRenderFn<T>
1414
}>()
1515
1616
const emits = defineEmits<{

0 commit comments

Comments
 (0)