A simple to-do app focused on tasks that can be completed within a specific time span.
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

extract useTimeComputed

ToBinio 0bec6a55 272e6dfe

+25 -39
+25 -39
app/components/edit/DataSelect.vue
··· 24 24 }); 25 25 const note = defineModel<string>("note", { required: true }); 26 26 27 - const timeRange = computed<TimeRange | undefined>({ 28 - get(): TimeRange | undefined { 29 - if (time.value?.type !== "range") return undefined; 30 - return { 31 - start: time.value.start, 32 - end: time.value.end, 33 - }; 34 - }, 35 - set(value) { 36 - if (!value) { 37 - time.value = undefined; 38 - return; 39 - } 40 - 41 - time.value = { 42 - type: "range", 43 - start: value.start, 44 - end: value.end, 45 - }; 46 - }, 47 - }); 27 + function useTimeComputed<T extends Time["type"]>( 28 + marker: T, 29 + ): ComputedRef<Omit<Extract<Time, { type: T }>, "type"> | undefined> { 30 + return computed<Omit<Extract<Time, { type: T }>, "type"> | undefined>({ 31 + get(): Omit<Extract<Time, { type: T }>, "type"> | undefined { 32 + if (time.value?.type !== marker) return undefined; 48 33 49 - const timeRecurring = computed<TimeRecurring | undefined>({ 50 - get(): TimeRecurring | undefined { 51 - if (time.value?.type !== "recurring") return undefined; 34 + const { type, ...rest } = time.value as Extract<Time, { type: T }>; 35 + return rest; 36 + }, 37 + set(value) { 38 + if (!value) { 39 + time.value = undefined; 40 + return; 41 + } 52 42 53 - const { type, ...rest } = time.value; 54 - return rest; 55 - }, 56 - set(value) { 57 - if (!value) { 58 - time.value = undefined; 59 - return; 60 - } 43 + time.value = { 44 + type: marker, 45 + ...value, 46 + } as Extract<Time, { type: T }>; 47 + }, 48 + }); 49 + } 61 50 62 - time.value = { 63 - type: "recurring", 64 - ...value, 65 - }; 66 - }, 67 - }); 51 + const timeRange = useTimeComputed("range"); 52 + const timeRecurring = useTimeComputed("recurring"); 53 + const timePoint = useTimeComputed("point"); 68 54 69 55 const activeTab = ref("notes"); 70 - const selectedTimeType = ref<"range" | "recurring">( 56 + const selectedTimeType = ref<"range" | "recurring" | "point">( 71 57 time.value?.type ?? "range", 72 58 ); 73 59