From 041550a26abb9cdcef613bc680f8fa3a55d999b5 Mon Sep 17 00:00:00 2001 From: DarkPhoenix2704 Date: Tue, 20 Feb 2024 07:15:58 +0000 Subject: [PATCH] fix(nc-gui): date field day view --- .../smartsheet/calendar/DayView.vue | 148 +++++++----------- .../composables/useCalendarViewStore.ts | 20 +-- 2 files changed, 67 insertions(+), 101 deletions(-) diff --git a/packages/nc-gui/components/smartsheet/calendar/DayView.vue b/packages/nc-gui/components/smartsheet/calendar/DayView.vue index 5c211dfb9b..0c2f443cf0 100644 --- a/packages/nc-gui/components/smartsheet/calendar/DayView.vue +++ b/packages/nc-gui/components/smartsheet/calendar/DayView.vue @@ -34,10 +34,60 @@ const renderData = computed(() => { } return formattedData.value }) + +const recordsAcrossAllRange = computed(() => { + if (!calendarRange.value) return [] + const recordsByRange = [] + + calendarRange.value.forEach((range) => { + if (range.fk_from_col && range.fk_to_col) { + const startCol = range.fk_from_col.title + const endCol = range.fk_to_col.title + for (const record of renderData.value) { + const startDate = dayjs(record.row[startCol]) + const endDate = dayjs(record.row[endCol]) + if ( + startDate.isSame(selectedDate.value, 'day') || + endDate.isSame(selectedDate.value, 'day') || + (startDate.isBefore(selectedDate.value, 'day') && endDate.isAfter(selectedDate.value, 'day')) || + (startDate.isSame(selectedDate.value, 'day') && endDate.isBefore(selectedDate.value, 'day')) || + (startDate.isAfter(selectedDate.value, 'day') && endDate.isSame(selectedDate.value, 'day')) || + (startDate.isAfter(selectedDate.value, 'day') && endDate.isBefore(selectedDate.value, 'day')) + ) { + recordsByRange.push({ + ...record, + rowMeta: { + ...record.rowMeta, + range, + }, + }) + } + } + } else if (range.fk_from_col) { + const startCol = range.fk_from_col.title + for (const record of renderData.value) { + const startDate = dayjs(record.row[startCol]) + if (startDate.isSame(selectedDate.value, 'day')) { + recordsByRange.push({ + ...record, + rowMeta: { + ...record.rowMeta, + range, + }, + }) + } + } + } + }) + return recordsByRange +}) + const getRecordPosition = (record: Row) => { - if (!calendarRange.value || !calendarRange.value[0]) return '' - const startCol = calendarRange.value[0].fk_from_col - const endCol = calendarRange.value[0].fk_to_col + if (!calendarRange.value) return '' + if (!record.rowMeta.range) return '' + const range = record.rowMeta.range + const startCol = range.fk_from_col + const endCol = range.fk_to_col if (!endCol && startCol) { const startDate = dayjs(record.row[startCol.title]) if (props.isEmbed) { @@ -76,35 +126,6 @@ const getRecordPosition = (record: Row) => { } } -const getSpanningRecords = computed(() => { - if (!calendarRange.value || !calendarRange.value[0]) return [] - const startCol = calendarRange.value[0].fk_from_col - const endCol = calendarRange.value[0].fk_to_col - const recordsSpanning = [] - // StartDate is Same as selectedDate and EndDate is Same as selectedDate -> Same Day No Spanning - // StartDate is Same as selectedDate and EndDate is After selectedDate -> Spanning Right - // StartDate is Before selectedDate and EndDate is Same as selectedDate -> Spanning Left - // StartDate is Before selectedDate and EndDate is After selectedDate -> Spanning Both - // StartDate is same as selectedDate and EndDate is Before selectedDate -> Spanning Left - // StartDate is after selectedDate and EndDate is same as selectedDate -> Spanning Right - // StartDate is after selectedDate and EndDate is before selectedDate -> Spanning Both - for (const record of renderData.value) { - if (endCol && startCol) { - const startDate = dayjs(record.row[startCol.title]) - const endDate = dayjs(record.row[endCol.title]) - if ( - (startDate.isSame(selectedDate.value, 'day') && endDate.isAfter(selectedDate.value, 'day')) || - (startDate.isBefore(selectedDate.value, 'day') && endDate.isSame(selectedDate.value, 'day')) || - (startDate.isSame(selectedDate.value, 'day') && endDate.isBefore(selectedDate.value, 'day')) || - (startDate.isAfter(selectedDate.value, 'day') && endDate.isSame(selectedDate.value, 'day')) - ) { - recordsSpanning.push(record) - } - } - } - return recordsSpanning -}) - const hours = computed(() => { const hours = [] for (let i = 0; i < 24; i++) { @@ -123,60 +144,11 @@ const hours = computed(() => { return hours }) -const isOverlap = (record, record1) => { - if (!calendarRange.value || !calendarRange.value[0]) return false - const startCol = calendarRange.value[0].fk_from_col.title - const endCol = calendarRange.value[0].fk_to_col.title - - const startDate = dayjs(record.row[startCol]) - const endDate = dayjs(record.row[endCol]) - const startDate1 = dayjs(record1.row[startCol]) - const endDate1 = dayjs(record1.row[endCol]) - - return startDate.isBefore(endDate1) && endDate.isAfter(startDate1) -} - -const overlappingGroups = computed(() => { - const recordGroups = [] - renderData.value - ?.filter((record) => !getSpanningRecords.value.includes(record)) - .forEach((record) => { - let placed = false - for (const group of recordGroups) { - if (group.some((rec) => isOverlap(rec, record))) { - group.push(record) - placed = true - break - } - } - if (!placed) { - recordGroups.push([record]) // Create a new group with the record - } - }) - return recordGroups -}) - -const getColumnIndexFromGroup = (record: Row) => { - for (const group of overlappingGroups.value) { - if (group.includes(record)) { - return group.indexOf(record) - } - } -} - -const getTotalColumns = (record: Row) => { - for (const group of overlappingGroups.value) { - if (group.includes(record)) { - return group.length - } - } - return 1 -} - const getRecordStyle = (record: Row) => { - if (!calendarRange.value || !calendarRange.value[0]) return {} - const startCol = calendarRange.value[0].fk_from_col.title - const endCol = calendarRange.value[0].fk_to_col.title + if (!calendarRange.value || !record.rowMeta.range) return {} + const range = record.rowMeta.range + const startCol = range.fk_from_col.title + const endCol = range.fk_to_col.title const scheduleStart = dayjs(selectedDate.value).startOf('day') const scheduleEnd = dayjs(selectedDate.value).endOf('day') const startDate = dayjs(record.row[startCol]) @@ -259,10 +231,10 @@ const dropEvent = (event: DragEvent) => { } " > - + {