Browse Source

fix(nocodb): new apis

pull/7611/head
DarkPhoenix2704 8 months ago
parent
commit
9ffdf3d954
  1. 18
      packages/nc-gui/components/smartsheet/calendar/RecordCard.vue
  2. 18
      packages/nc-gui/composables/useCalendarViewStore.ts
  3. 27
      packages/nocodb/src/db/BaseModelSqlv2.ts

18
packages/nc-gui/components/smartsheet/calendar/RecordCard.vue

@ -27,8 +27,6 @@ const emit = defineEmits(['resize-start'])
<div
:class="{
'min-h-9': size === 'small',
'min-h-10': size === 'medium',
'min-h-12': size === 'large',
'h-full': size === 'auto',
'rounded-l-lg ml-1': position === 'leftRounded',
'rounded-r-lg mr-1': position === 'rightRounded',
@ -40,10 +38,10 @@ const emit = defineEmits(['resize-start'])
'bg-yellow-50': color === 'yellow',
'bg-pink-50': color === 'pink',
'bg-purple-50': color === 'purple',
'group-hover:(border-brand-500 border-2)': resize,
'!border-brand-500 border-2': selected || hover,
'group-hover:(border-brand-500 border-1)': resize,
'!border-brand-500 border-1': selected || hover,
}"
class="relative flex items-center px-1 group border-2 border-transparent"
class="relative flex items-center px-1 group border-1 border-transparent"
>
<div
v-if="position === 'leftRounded' || position === 'rounded'"
@ -61,7 +59,7 @@ const emit = defineEmits(['resize-start'])
<div
v-if="(position === 'leftRounded' || position === 'rounded') && resize"
:class="{
'!block !border-2 !rounded-lg !border-brand-500': selected || hover,
'!block !border-1 !rounded-lg !border-brand-500': selected || hover,
}"
class="mt-0.1 h-7.1 absolute hidden -left-4 resize"
>
@ -70,9 +68,9 @@ const emit = defineEmits(['resize-start'])
</NcButton>
</div>
<div class="ml-3 pr-3 overflow-hidden w-full h-8 absolute">
<div class="overflow-hidden ml-2 w-full h-8 absolute">
<span v-if="position === 'rightRounded' || position === 'none'" class="mr-1"> .... </span>
<span class="absolute text-sm text-gray-800">
<span class="text-sm !w-[80%] text-gray-800">
<slot />
</span>
<span v-if="position === 'leftRounded' || position === 'none'" class="absolute my-0 right-5"> .... </span>
@ -81,9 +79,9 @@ const emit = defineEmits(['resize-start'])
<div
v-if="(position === 'rightRounded' || position === 'rounded') && resize"
:class="{
'!block border-2 rounded-lg border-brand-500': selected || hover,
'!block border-1 rounded-lg border-brand-500': selected || hover,
}"
class="absolute mt-0.1 hidden h-7.1 -right-4 border-1 resize !group-hover:(border-brand-500 border-2 block rounded-lg)"
class="absolute mt-0.1 hidden h-7.1 -right-4 border-1 resize !group-hover:(border-brand-500 border-1 block rounded-lg)"
>
<NcButton size="xsmall" type="secondary" @mousedown.stop="emit('resize-start', 'right', $event, record)">
<component :is="iconMap.drag" class="text-gray-400"></component>

18
packages/nc-gui/composables/useCalendarViewStore.ts

@ -437,16 +437,23 @@ const [useProvideCalendarViewStore, useCalendarViewStore] = useInjectionState(
if (!base?.value?.id || !meta.value?.id || !viewMeta.value?.id || !calendarRange.value) return
let prevDate: dayjs.Dayjs | string | null = null
let nextDate: dayjs.Dayjs | string | null = null
let fromDate: dayjs.Dayjs | string | null = null
if (activeCalendarView.value === 'week' || activeCalendarView.value === 'day' || activeCalendarView.value === 'month') {
prevDate = pageDate.value.subtract(1, 'day').endOf('day')
prevDate = pageDate.value.startOf('month').subtract(1, 'day').endOf('day')
fromDate = pageDate.value.startOf('month')
nextDate = pageDate.value.add(1, 'day').startOf('day')
nextDate = pageDate.value.endOf('month').add(1, 'day').startOf('day')
} else if (activeCalendarView.value === 'year') {
fromDate = selectedDate.value.startOf('year')
prevDate = selectedDate.value.startOf('year').subtract(1, 'day').endOf('day')
nextDate = selectedDate.value.endOf('year').add(1, 'day').startOf('day')
}
prevDate = prevDate!.format('YYYY-MM-DD HH:mm:ssZ')
nextDate = nextDate!.format('YYYY-MM-DD HH:mm:ssZ')
fromDate = pageDate.value.format('YYYY-MM-DD HH:mm:ssZ')
const activeDateFilter: Array<any> = []
calendarRange.value.forEach((range) => {
@ -474,6 +481,13 @@ const [useProvideCalendarViewStore, useCalendarViewStore] = useInjectionState(
},
],
},
{
fk_column_id: fromCol.id,
comparison_op: 'eq',
logical_op: 'or',
comparison_sub_op: 'exactDate',
value: fromDate,
},
]
} else if (fromCol) {
rangeFilter = [

27
packages/nocodb/src/db/BaseModelSqlv2.ts

@ -256,7 +256,7 @@ class BaseModelSqlv2 {
model,
filterArr,
}: {
ranges: Partial<CalendarRangeType>[];
ranges: Partial<any>[];
model: Model;
filterArr?: Filter[];
}) {
@ -269,24 +269,32 @@ class BaseModelSqlv2 {
if (range?.fk_from_column_id && range?.fk_to_column_id) {
query = this.dbDriver(
this.dbDriver.raw(
`SELECT generate_series(
`(SELECT generate_series(
??,
??,
'1 day'
)::date AS date FROM ??`,
)::timestamptz AS date, ??::timestamptz, ??::timestamptz FROM ??) AS ??`,
[
columns.find((c) => c.id === range.fk_from_column_id).column_name,
columns.find((c) => c.id === range.fk_to_column_id).column_name,
columns.find((c) => c.id === range.fk_from_column_id).column_name,
columns.find((c) => c.id === range.fk_to_column_id).column_name,
this.tnPath,
range.id,
],
),
);
} else if (range.fk_from_column_id) {
query = this.dbDriver(
this.dbDriver.raw(`SELECT ??::date AS date FROM ??`, [
columns.find((c) => c.id === range.fk_from_column_id).column_name,
this.tnPath,
]),
this.dbDriver.raw(
`(SELECT ??::timestamptz AS date, ??::timestamptz FROM ??) AS ?? `,
[
columns.find((c) => c.id === range.fk_from_column_id).column_name,
columns.find((c) => c.id === range.fk_from_column_id).column_name,
this.tnPath,
range.id,
],
),
);
}
@ -304,15 +312,12 @@ class BaseModelSqlv2 {
),
);
const qb = this.dbDriver(
this.dbDriver.raw(`(${unionQuery.toQuery()}) AS ??`, ['nc']),
)
const qb = this.dbDriver(this.dbDriver.raw(`(${unionQuery}) AS ??`, ['nc']))
.select('date')
.count('* as count')
.groupBy('date')
.orderBy('date');
console.log(qb.toQuery());
return await this.execAndParse(qb);
}

Loading…
Cancel
Save