From 79a5de198e58a22301beda8f4f7afe9eb4075391 Mon Sep 17 00:00:00 2001 From: DarkPhoenix2704 Date: Thu, 29 Feb 2024 10:15:27 +0000 Subject: [PATCH] fix(nc-gui): wire new apis --- .../composables/useCalendarViewStore.ts | 241 +++++------------- packages/nc-gui/composables/useSharedView.ts | 71 ++++-- packages/nocodb/src/schema/swagger.json | 8 +- 3 files changed, 120 insertions(+), 200 deletions(-) diff --git a/packages/nc-gui/composables/useCalendarViewStore.ts b/packages/nc-gui/composables/useCalendarViewStore.ts index 432ba3554a..d5b04d648a 100644 --- a/packages/nc-gui/composables/useCalendarViewStore.ts +++ b/packages/nc-gui/composables/useCalendarViewStore.ts @@ -97,7 +97,7 @@ const [useProvideCalendarViewStore, useCalendarViewStore] = useInjectionState( const { sorts, nestedFilters } = useSmartsheetStoreOrThrow() - const { sharedView, fetchSharedViewData, fetchSharedViewActiveDate } = useSharedView() + const { sharedView, fetchSharedViewData, fetchSharedViewActiveDate, fetchSharedCalendarViewData } = useSharedView() const calendarMetaData = ref({}) @@ -219,7 +219,6 @@ const [useProvideCalendarViewStore, useCalendarViewStore] = useInjectionState( } fromDate = fromDate!.format('YYYY-MM-DD HH:mm:ssZ') - toDate = toDate!.format('YYYY-MM-DD HH:mm:ssZ') prevDate = prevDate!.format('YYYY-MM-DD HH:mm:ssZ') nextDate = nextDate!.format('YYYY-MM-DD HH:mm:ssZ') @@ -337,112 +336,6 @@ const [useProvideCalendarViewStore, useCalendarViewStore] = useInjectionState( } } - const filterJSON = computed(() => { - if (!calendarRange.value) return [] - const combinedFilters: any = { - is_group: true, - logical_op: 'and', - children: [], - } - - let prevDate: string | null | dayjs.Dayjs = null - let fromDate: dayjs.Dayjs | null | string = null - let toDate: dayjs.Dayjs | null | string = null - let nextDate: string | null | dayjs.Dayjs = null - - switch (activeCalendarView.value) { - case 'week': - fromDate = selectedDateRange.value.start.startOf('day') - toDate = selectedDateRange.value.end.endOf('day') - prevDate = selectedDateRange.value.start.subtract(1, 'day').endOf('day') - nextDate = selectedDateRange.value.end.add(1, 'day').startOf('day') - break - case 'month': { - const startOfMonth = selectedMonth.value.startOf('month') - const endOfMonth = selectedMonth.value.endOf('month') - - const daysToDisplay = Math.max(endOfMonth.diff(startOfMonth, 'day') + 1, 35) - fromDate = startOfMonth.subtract((startOfMonth.day() + 7) % 7, 'day') - toDate = fromDate.add(daysToDisplay, 'day') - prevDate = fromDate.subtract(1, 'day').endOf('day') - nextDate = toDate.add(1, 'day').startOf('day') - break - } - case 'year': - fromDate = selectedDate.value.startOf('year') - toDate = selectedDate.value.endOf('year') - prevDate = fromDate.subtract(1, 'day').endOf('day') - nextDate = toDate.add(1, 'day').startOf('day') - break - case 'day': - fromDate = selectedDate.value.startOf('day') - toDate = selectedDate.value.endOf('day') - prevDate = selectedDate.value.subtract(1, 'day').endOf('day') - nextDate = selectedDate.value.add(1, 'day').startOf('day') - break - } - - fromDate = fromDate!.format('YYYY-MM-DD HH:mm:ssZ') - toDate = toDate!.format('YYYY-MM-DD HH:mm:ssZ') - prevDate = prevDate!.format('YYYY-MM-DD HH:mm:ssZ') - nextDate = nextDate!.format('YYYY-MM-DD HH:mm:ssZ') - - calendarRange.value.forEach((range) => { - const fromCol = range.fk_from_col - const toCol = range.fk_to_col - let rangeFilter: any = [] - - if (fromCol && toCol) { - rangeFilter = [ - { - is_group: true, - logical_op: 'and', - children: [ - { - fk_column_id: fromCol.id, - comparison_op: 'lt', - comparison_sub_op: 'exactDate', - value: nextDate, - }, - { - fk_column_id: toCol.id, - comparison_op: 'gt', - comparison_sub_op: 'exactDate', - value: prevDate, - }, - ], - }, - { - fk_column_id: fromCol.id, - comparison_op: 'eq', - logical_op: 'or', - comparison_sub_op: 'exactDate', - value: fromDate, - }, - ] - } else if (fromCol) { - rangeFilter = [ - { - fk_column_id: fromCol.id, - comparison_op: 'lt', - comparison_sub_op: 'exactDate', - value: nextDate, - }, - { - fk_column_id: fromCol.id, - comparison_op: 'gt', - comparison_sub_op: 'exactDate', - value: prevDate, - }, - ] - } - if (rangeFilter.length > 0) { - combinedFilters.children.push(rangeFilter) - } - }) - return combinedFilters.children.length > 0 ? [combinedFilters] : [] - }) - const fetchActiveDates = async () => { if (!base?.value?.id || !meta.value?.id || !viewMeta.value?.id || !calendarRange.value) return let prevDate: dayjs.Dayjs | string | null = null @@ -459,85 +352,31 @@ const [useProvideCalendarViewStore, useCalendarViewStore] = useInjectionState( prevDate = fromDate.subtract(1, 'day').endOf('day') nextDate = toDate.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 = fromDate!.format('YYYY-MM-DD HH:mm:ssZ') const activeDateFilter: Array = [] - calendarRange.value.forEach((range) => { - const fromCol = range.fk_from_col - const toCol = range.fk_to_col - let rangeFilter: any = [] - - if (fromCol && toCol) { - rangeFilter = [ - { - is_group: true, - logical_op: 'and', - children: [ - { - fk_column_id: fromCol.id, - comparison_op: 'lt', - comparison_sub_op: 'exactDate', - value: nextDate, - }, - { - fk_column_id: toCol.id, - comparison_op: 'gt', - comparison_sub_op: 'exactDate', - value: prevDate, - }, - ], - }, - { - fk_column_id: fromCol.id, - comparison_op: 'eq', - logical_op: 'or', - comparison_sub_op: 'exactDate', - value: fromDate, - }, - ] - } else if (fromCol) { - rangeFilter = [ - { - fk_column_id: fromCol.id, - comparison_op: 'lt', - comparison_sub_op: 'exactDate', - value: nextDate, - }, - { - fk_column_id: fromCol.id, - comparison_op: 'gt', - comparison_sub_op: 'exactDate', - value: prevDate, - }, - ] - } - - activeDateFilter.push(rangeFilter) - }) - if (!base?.value?.id || !meta.value?.id || !viewMeta.value?.id) return try { const res = !isPublic.value - ? await api.dbViewRow.calendarCount('noco', base.value.id!, meta.value!.id!, viewMeta.value.id, { + ? await api.dbCalendarViewRowCount.dbCalendarViewRowCount('noco', base.value.id!, meta.value!.id!, viewMeta.value.id, { ...queryParams.value, - ...{}, - ...{}, - ...{ filterArrJson: JSON.stringify([...activeDateFilter]) }, + from_date: prevDate, + to_date: nextDate, }) : await fetchSharedViewActiveDate({ + from_date: prevDate, + to_date: nextDate, sortsArr: sorts.value, filtersArr: activeDateFilter, }) - activeDates.value = res.map((dateObj: unknown) => dayjs(dateObj)) + activeDates.value = res.dates.map((dateObj: unknown) => dayjs(dateObj)) } catch (e) { activeDates.value = [] message.error(`${t('msg.error.fetchingActiveDates')} ${await extractSdkResponseErrorMsg(e)}`) @@ -585,30 +424,74 @@ const [useProvideCalendarViewStore, useCalendarViewStore] = useInjectionState( } async function loadCalendarData() { - if ((!base?.value?.id || !meta.value?.id || !viewMeta.value?.id || !filterJSON.value) && !isPublic?.value) return + if ((!base?.value?.id || !meta.value?.id || !viewMeta.value?.id) && !isPublic?.value) return + + let prevDate: string | null | dayjs.Dayjs = null + let fromDate: dayjs.Dayjs | null | string = null + let toDate: dayjs.Dayjs | null | string = null + let nextDate: string | null | dayjs.Dayjs = null + + switch (activeCalendarView.value) { + case 'week': + fromDate = selectedDateRange.value.start.startOf('day') + toDate = selectedDateRange.value.end.endOf('day') + prevDate = selectedDateRange.value.start.subtract(1, 'day').endOf('day') + nextDate = selectedDateRange.value.end.add(1, 'day').startOf('day') + break + case 'month': { + const startOfMonth = selectedMonth.value.startOf('month') + const endOfMonth = selectedMonth.value.endOf('month') + + const daysToDisplay = Math.max(endOfMonth.diff(startOfMonth, 'day') + 1, 35) + fromDate = startOfMonth.subtract((startOfMonth.day() + 7) % 7, 'day') + toDate = fromDate.add(daysToDisplay, 'day') + prevDate = fromDate.subtract(1, 'day').endOf('day') + nextDate = toDate.add(1, 'day').startOf('day') + break + } + case 'year': + fromDate = selectedDate.value.startOf('year') + toDate = selectedDate.value.endOf('year') + prevDate = fromDate.subtract(1, 'day').endOf('day') + nextDate = toDate.add(1, 'day').startOf('day') + break + case 'day': + fromDate = selectedDate.value.startOf('day') + toDate = selectedDate.value.endOf('day') + prevDate = selectedDate.value.subtract(1, 'day').endOf('day') + nextDate = selectedDate.value.add(1, 'day').startOf('day') + break + } + prevDate = prevDate!.format('YYYY-MM-DD HH:mm:ssZ') + nextDate = nextDate!.format('YYYY-MM-DD HH:mm:ssZ') + try { isCalendarDataLoading.value = true const res = !isPublic.value - ? await api.dbViewRow.list( + ? await api.dbCalendarViewRow.list( 'noco', base.value.id!, meta.value!.id!, viewMeta.value!.id!, { - ...queryParams.value, - ...(isUIAllowed('filterSync') - ? { filterArrJson: JSON.stringify([...filterJSON.value]) } - : { filterArrJson: JSON.stringify([nestedFilters.value, ...filterJSON.value]) }), - where: where?.value ?? '', + from_date: prevDate, + to_date: nextDate, }, { - headers: { - 'xc-ignore-pagination': true, - }, + ...queryParams.value, + ...(isUIAllowed('filterSync') ? { filterArrJson: [] } : { filterArrJson: JSON.stringify([nestedFilters.value]) }), + where: where?.value ?? '', + filterArrJson: JSON.stringify([...nestedFilters.value]), }, ) - : await fetchSharedViewData({ sortsArr: sorts.value, filtersArr: filterJSON.value }) + : await fetchSharedCalendarViewData({ + sortsArr: sorts.value, + from_date: prevDate, + to_date: nextDate, + filtersArr: nestedFilters.value, + where: where?.value ?? '', + }) formattedData.value = formatData(res!.list) } catch (e) { message.error(`${t('msg.error.fetchingCalendarData')} ${await extractSdkResponseErrorMsg(e)}`) diff --git a/packages/nc-gui/composables/useSharedView.ts b/packages/nc-gui/composables/useSharedView.ts index a460760d1e..d7da18fb1c 100644 --- a/packages/nc-gui/composables/useSharedView.ts +++ b/packages/nc-gui/composables/useSharedView.ts @@ -110,21 +110,16 @@ export function useSharedView() { } } - const fetchSharedViewData = async ( - param: { - sortsArr: SortType[] - filtersArr: FilterType[] - fields?: any[] - sort?: any[] - where?: string - /** Query params for nested data */ - nested?: any - offset?: number - }, - headers?: { - ignorePagination?: boolean - }, - ) => { + const fetchSharedViewData = async (param: { + sortsArr: SortType[] + filtersArr: FilterType[] + fields?: any[] + sort?: any[] + where?: string + /** Query params for nested data */ + nested?: any + offset?: number + }) => { if (!sharedView.value) return { list: [], @@ -148,13 +143,54 @@ export function useSharedView() { { headers: { 'xc-password': password.value, - 'xc-ignore-pagination': headers?.ignorePagination ? 'true' : 'false', + }, + }, + ) + } + + const fetchSharedCalendarViewData = async (param: { + from_date: string + to_date: string + sortsArr: SortType[] + filtersArr: FilterType[] + fields?: any[] + sort?: any[] + where?: string + /** Query params for nested data */ + nested?: any + offset?: number + }) => { + if (!sharedView.value) + return { + list: [], + pageInfo: {}, + } + + if (!param.offset) { + const page = paginationData.value.page || 1 + const pageSize = paginationData.value.pageSize || appInfoDefaultLimit + param.offset = (page - 1) * pageSize + } + + return await $api.dbCalendarViewRow.publicDataCalendarRowList( + sharedView.value.uuid!, + { + limit: sharedView.value?.type === ViewTypes.MAP ? 1000 : undefined, + ...param, + filterArrJson: JSON.stringify(param.filtersArr ?? nestedFilters.value), + sortArrJson: JSON.stringify(param.sortsArr ?? sorts.value), + } as any, + { + headers: { + 'xc-password': password.value, }, }, ) } const fetchSharedViewActiveDate = async (param: { + from_date: string + to_date: string sortsArr: SortType[] filtersArr: FilterType[] sort?: any[] @@ -166,7 +202,7 @@ export function useSharedView() { pageInfo: {}, } - return await $api.public.calendarCount( + return await $api.public.dataCalendarRowCount( sharedView.value.uuid!, { ...param, @@ -234,6 +270,7 @@ export function useSharedView() { nestedFilters, fetchSharedViewData, fetchSharedViewActiveDate, + fetchSharedCalendarViewData, fetchSharedViewGroupedData, paginationData, sorts, diff --git a/packages/nocodb/src/schema/swagger.json b/packages/nocodb/src/schema/swagger.json index 8d1808acd3..9aa44a6676 100644 --- a/packages/nocodb/src/schema/swagger.json +++ b/packages/nocodb/src/schema/swagger.json @@ -9955,10 +9955,10 @@ ], "get": { "summary": "Count of Records in Dates in Calendar View", - "operationId": "db-view-row-calendar-count", + "operationId": "db-calendar-view-row-count", "description": "Get the count of table view rows grouped by the dates", "tags": [ - "DB View Row" + "DB Calendar View Row Count" ], "parameters": [ { @@ -10049,7 +10049,7 @@ ], "get": { "summary": "List rows in Calendar View of a Table", - "operationId": "db-calendar-view-row-list", + "operationId": "public-data-calendar-row-list", "description": "List all rows in Calendar View of a Table", "tags": [ "DB Calendar View Row" @@ -10231,7 +10231,7 @@ ], "get": { "summary": "Count of Records in Dates in Calendar View", - "operationId": "public-calendar-count", + "operationId": "public-data-calendar-row-count", "parameters": [ { "schema": {