Skip to content

Commit eb35801

Browse files
authored
Merge pull request #209 from Yannick243/vue3-composition-refactor
feat(ui-predicate-vue3): migrate components to composition API & add support for v-model
2 parents 7a19e81 + 9e08f26 commit eb35801

19 files changed

+4472
-10013
lines changed

packages/ui-predicate-vue3/README.md

+2-3
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ app.mount('#app');
5656
<template>
5757
<div>
5858
<ui-predicate
59-
:data="predicate"
59+
v-model="predicate"
6060
:columns="columns"
6161
@change="onChange"
6262
@initialized="onInitialized"
@@ -164,7 +164,6 @@ const columns = {
164164
}
165165

166166
const onChange = (data) => {
167-
predicate.value = data
168167
console.log('Predicate changed', data);
169168
};
170169

@@ -276,7 +275,7 @@ export default {
276275
},
277276
methods: {
278277
onChange(diff) {
279-
this.predicate = diff;
278+
console.log('Predicate changed', diff);
280279
},
281280
},
282281
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
<template>
2+
<div class="ui-predicate__date__range__argument">
3+
<input type="date" v-model="start" @change="emitUpdatedValue" />
4+
<span>and</span>
5+
<input type="date" v-model="end" @change="emitUpdatedValue" />
6+
</div>
7+
</template>
8+
<script setup>
9+
import { ref, watch } from "vue";
10+
11+
const props = defineProps({
12+
value: {
13+
type: null,
14+
required: true,
15+
},
16+
});
17+
18+
const emit = defineEmits(["change"]);
19+
20+
const start = ref(props.value?.[0] || "");
21+
const end = ref(props.value?.[1] || "");
22+
23+
// Watch for external prop changes and update local refs
24+
watch(
25+
() => props.value,
26+
(newValue) => {
27+
if (Array.isArray(newValue)) {
28+
start.value = newValue[0] || "";
29+
end.value = newValue[1] || "";
30+
}
31+
}
32+
);
33+
34+
const emitUpdatedValue = () => {
35+
emit("change", [start.value, end.value]);
36+
};
37+
</script>
38+
<style scoped>
39+
.ui-predicate__date__range__argument {
40+
display: flex;
41+
align-items: center;
42+
}
43+
</style>

packages/ui-predicate-vue3/getting-started/simple.vue

+15-5
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
<div>
33
<div class="column">
44
<ui-predicate
5-
:data="predicate"
5+
v-model="predicate"
66
:columns="columns"
7-
@change="onChange"
7+
@changed="onChange"
88
@initialized="onInitialized"
99
/>
1010
</div>
@@ -36,6 +36,7 @@ import { ref } from 'vue';
3636
import ColorArgument from './ColorArgument.vue';
3737
import TextArgument from './TextArgument.vue';
3838
import DateArgument from './DateArgument.vue';
39+
import DateRangeArgument from './DateRangeArgument.vue';
3940
4041
const predicate = ref({
4142
logicalType_id: 'all',
@@ -103,6 +104,11 @@ const columns = {
103104
label: 'is',
104105
argumentType_id: 'datepicker',
105106
},
107+
{
108+
operator_id: 'isBetween_date',
109+
label: 'is between',
110+
argumentType_id: 'daterangepicker',
111+
},
106112
{
107113
operator_id: 'isBrighterThan',
108114
label: 'is brighter than',
@@ -130,7 +136,7 @@ const columns = {
130136
},
131137
{
132138
type_id: 'datetime',
133-
operator_ids: ['is_date'],
139+
operator_ids: ['is_date', 'isBetween_date'],
134140
},
135141
{
136142
type_id: 'color',
@@ -156,6 +162,10 @@ const columns = {
156162
argumentType_id: 'datepicker',
157163
component: DateArgument,
158164
},
165+
{
166+
argumentType_id: 'daterangepicker',
167+
component: DateRangeArgument,
168+
},
159169
{
160170
argumentType_id: 'colorpicker',
161171
component: ColorArgument,
@@ -172,11 +182,11 @@ const columns = {
172182
}
173183
174184
const onChange = (data) => {
175-
predicate.value = data
185+
console.log('UIPredicate onChange', data);
176186
};
177187
178188
const onInitialized = (ctrl) => {
179-
// console.log('UIPredicate initialized', ctrl);
189+
console.log('UIPredicate initialized', ctrl);
180190
}
181191
</script>
182192

0 commit comments

Comments
 (0)