diff --git a/plane-src/apps/web/ce/components/projects/external-contours/board-item.tsx b/plane-src/apps/web/ce/components/projects/external-contours/board-item.tsx index a9d62b9..df9e672 100644 --- a/plane-src/apps/web/ce/components/projects/external-contours/board-item.tsx +++ b/plane-src/apps/web/ce/components/projects/external-contours/board-item.tsx @@ -360,6 +360,10 @@ export const ExternalContoursBoardItem = observer(function ExternalContoursBoard void handleCardUpdate({ target_date: targetDate ? renderFormattedPayloadDate(targetDate) : null, diff --git a/plane-src/apps/web/ce/components/projects/external-contours/issue-root.tsx b/plane-src/apps/web/ce/components/projects/external-contours/issue-root.tsx index 53661a1..1411171 100644 --- a/plane-src/apps/web/ce/components/projects/external-contours/issue-root.tsx +++ b/plane-src/apps/web/ce/components/projects/external-contours/issue-root.tsx @@ -344,7 +344,7 @@ export const ExternalContoursIssueMainContent = observer(function ExternalContou
- +
); diff --git a/plane-src/apps/web/core/components/core/app-header.tsx b/plane-src/apps/web/core/components/core/app-header.tsx index a21153e..988e9a6 100644 --- a/plane-src/apps/web/core/components/core/app-header.tsx +++ b/plane-src/apps/web/core/components/core/app-header.tsx @@ -34,11 +34,17 @@ export const AppHeader = observer(function AppHeader(props: AppHeaderProps) { const updateDockBounds = () => { const { left, width } = main.getBoundingClientRect(); + const height = container?.getBoundingClientRect().height ?? 0; setDockStyle({ left, width, }); + + document.documentElement.style.setProperty( + "--nodedc-bottom-dock-offset", + `${Math.max(height, 0)}px` + ); }; updateDockBounds(); @@ -50,12 +56,18 @@ export const AppHeader = observer(function AppHeader(props: AppHeaderProps) { return () => { resizeObserver.disconnect(); window.removeEventListener("resize", updateDockBounds); + document.documentElement.style.removeProperty("--nodedc-bottom-dock-offset"); }; }, []); return (
- + {mobileHeader && mobileHeader} diff --git a/plane-src/apps/web/core/components/core/filters/date-filter-modal.tsx b/plane-src/apps/web/core/components/core/filters/date-filter-modal.tsx index 0f1ac2c..465eaf0 100644 --- a/plane-src/apps/web/core/components/core/filters/date-filter-modal.tsx +++ b/plane-src/apps/web/core/components/core/filters/date-filter-modal.tsx @@ -72,7 +72,7 @@ export function DateFilterModal({ title, handleClose, isOpen, onSelect }: Props) const date2Value = getDate(watch("date2")); return (
{ onSelect?.(val); }} diff --git a/plane-src/apps/web/core/components/dropdowns/date.tsx b/plane-src/apps/web/core/components/dropdowns/date.tsx index f323a49..951d344 100644 --- a/plane-src/apps/web/core/components/dropdowns/date.tsx +++ b/plane-src/apps/web/core/components/dropdowns/date.tsx @@ -4,7 +4,7 @@ * See the LICENSE file for details. */ -import React, { useRef, useState } from "react"; +import React, { useMemo, useRef, useState } from "react"; import { observer } from "mobx-react"; import { createPortal } from "react-dom"; import { usePopper } from "react-popper"; @@ -38,6 +38,10 @@ type Props = TDropdownProps & { maxDate?: Date; onChange: (val: Date | null) => void; onClose?: () => void; + rangePreview?: { + from?: Date | string | null; + to?: Date | string | null; + }; value: Date | string | null; closeOnSelect?: boolean; formatToken?: string; @@ -64,6 +68,7 @@ export const DateDropdown = observer(function DateDropdown(props: Props) { maxDate, onChange, onClose, + rangePreview, placeholder = "Date", placement, showTooltip = false, @@ -122,6 +127,15 @@ export const DateDropdown = observer(function DateDropdown(props: Props) { if (minDate) disabledDays.push({ before: minDate }); if (maxDate) disabledDays.push({ after: maxDate }); + const rangePreviewValue = useMemo(() => { + const from = getDate(rangePreview?.from ?? null); + const to = getDate(rangePreview?.to ?? null); + + if (!from || !to) return undefined; + if (from <= to) return { from, to }; + return { from: to, to: from }; + }, [rangePreview?.from, rangePreview?.to]); + const comboButton = ( <> {button ? ( @@ -207,21 +221,40 @@ export const DateDropdown = observer(function DateDropdown(props: Props) { style={styles.popper} {...attributes.popper} > - { - dropdownOnChange(date ?? null); - }} - showOutsideDays - initialFocus - disabled={disabledDays} - mode="single" - fixedWeeks - weekStartsOn={startOfWeek} - /> + {rangePreviewValue ? ( + { + if (modifiers.disabled) return; + dropdownOnChange(date ?? null); + }} + showOutsideDays + initialFocus + disabled={disabledDays} + mode="range" + fixedWeeks + weekStartsOn={startOfWeek} + /> + ) : ( + { + dropdownOnChange(date ?? null); + }} + showOutsideDays + initialFocus + disabled={disabledDays} + mode="single" + fixedWeeks + weekStartsOn={startOfWeek} + /> + )}
, document.body diff --git a/plane-src/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/properties.tsx b/plane-src/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/properties.tsx index 250e8ff..0a604b0 100644 --- a/plane-src/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/properties.tsx +++ b/plane-src/apps/web/core/components/issues/issue-detail-widgets/sub-issues/issues-list/properties.tsx @@ -169,6 +169,10 @@ export const SubIssuesListItemProperties = observer(function SubIssuesListItemPr
issueOperations.update(workspaceSlug, projectId, issueId, { start_date: val ? renderFormattedPayloadDate(val) : null, @@ -167,6 +171,10 @@ export const IssueDetailsSidebar = observer(function IssueDetailsSidebar(props: issueOperations.update(workspaceSlug, projectId, issueId, { target_date: val ? renderFormattedPayloadDate(val) : null, diff --git a/plane-src/apps/web/core/components/issues/issue-layouts/kanban/internal-contour-card.tsx b/plane-src/apps/web/core/components/issues/issue-layouts/kanban/internal-contour-card.tsx index f16a21f..7c6fb93 100644 --- a/plane-src/apps/web/core/components/issues/issue-layouts/kanban/internal-contour-card.tsx +++ b/plane-src/apps/web/core/components/issues/issue-layouts/kanban/internal-contour-card.tsx @@ -172,6 +172,10 @@ export const InternalContourKanbanCard = observer(function InternalContourKanban
updateIssue?.(issue.project_id ?? null, issue.id, { target_date: targetDate ? renderFormattedPayloadDate(targetDate) : null, diff --git a/plane-src/apps/web/core/components/issues/issue-layouts/kanban/kanban-group.tsx b/plane-src/apps/web/core/components/issues/issue-layouts/kanban/kanban-group.tsx index 8448048..ca60420 100644 --- a/plane-src/apps/web/core/components/issues/issue-layouts/kanban/kanban-group.tsx +++ b/plane-src/apps/web/core/components/issues/issue-layouts/kanban/kanban-group.tsx @@ -264,7 +264,7 @@ export const KanbanGroup = observer(function KanbanGroup(props: IKanbanGroup) { ) : (
{t("common.load_more")} ↓ @@ -278,6 +278,10 @@ export const KanbanGroup = observer(function KanbanGroup(props: IKanbanGroup) { !!group_by && DRAG_ALLOWED_GROUPS.includes(group_by) && (sub_group_by ? DRAG_ALLOWED_GROUPS.includes(sub_group_by) : true); + const shouldShowQuickAdd = + !!enableQuickIssueCreate && + !disableIssueCreation && + !getIsWorkflowWorkItemCreationDisabled(groupId, sub_group_id); return (
- +
+ - {shouldLoadMore && - (isSubGroup ? ( - <>{loadMore} - ) : ( -
- {Array.from({ length: 2 }).map((_, index) => ( - - ))} - -
- ))} + {shouldLoadMore && + (isSubGroup ? ( + <>{loadMore} + ) : ( +
+ {Array.from({ length: 2 }).map((_, index) => ( + + ))} + +
+ ))} +
- {enableQuickIssueCreate && - !disableIssueCreation && - !getIsWorkflowWorkItemCreationDisabled(groupId, sub_group_id) && ( -
- -
- )} + {shouldShowQuickAdd && ( +
+ +
+ )}
); }); diff --git a/plane-src/apps/web/core/components/issues/issue-layouts/list/list-group.tsx b/plane-src/apps/web/core/components/issues/issue-layouts/list/list-group.tsx index 5c8f56f..647d521 100644 --- a/plane-src/apps/web/core/components/issues/issue-layouts/list/list-group.tsx +++ b/plane-src/apps/web/core/components/issues/issue-layouts/list/list-group.tsx @@ -329,7 +329,7 @@ export const ListGroup = observer(function ListGroup(props: Props) { !isGroupByCreatedBy && !isCompletedCycle && !isWorkflowIssueCreationDisabled && ( -
+
{ const targetDate = data ? renderFormattedPayloadDate(data) : null; diff --git a/plane-src/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx b/plane-src/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx index 09404e4..b93da3b 100644 --- a/plane-src/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx +++ b/plane-src/apps/web/core/components/issues/issue-layouts/spreadsheet/columns/start-date-column.tsx @@ -28,6 +28,10 @@ export const SpreadsheetStartDateColumn = observer(function SpreadsheetStartDate
{ const startDate = data ? renderFormattedPayloadDate(data) : null; diff --git a/plane-src/apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-view.tsx b/plane-src/apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-view.tsx index f3f143d..960479b 100644 --- a/plane-src/apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-view.tsx +++ b/plane-src/apps/web/core/components/issues/issue-layouts/spreadsheet/spreadsheet-view.tsx @@ -110,7 +110,7 @@ export const SpreadsheetView = observer(function SpreadsheetView(props: Props) { />
-
+
{enableQuickCreateIssue && !disableIssueCreation && ( { onChange(date ? renderFormattedPayloadDate(date) : null); handleFormChange(); @@ -211,6 +215,10 @@ export const IssueDefaultProperties = observer(function IssueDefaultProperties(p
{ onChange(date ? renderFormattedPayloadDate(date) : null); handleFormChange(); diff --git a/plane-src/apps/web/core/components/issues/peek-overview/properties.tsx b/plane-src/apps/web/core/components/issues/peek-overview/properties.tsx index 8658d2f..67af20c 100644 --- a/plane-src/apps/web/core/components/issues/peek-overview/properties.tsx +++ b/plane-src/apps/web/core/components/issues/peek-overview/properties.tsx @@ -146,6 +146,10 @@ export const PeekOverviewProperties = observer(function PeekOverviewProperties(p issueOperations.update(workspaceSlug, projectId, issueId, { start_date: val ? renderFormattedPayloadDate(val) : null, @@ -167,6 +171,10 @@ export const PeekOverviewProperties = observer(function PeekOverviewProperties(p
issueOperations.update(workspaceSlug, projectId, issueId, { target_date: val ? renderFormattedPayloadDate(val) : null, diff --git a/plane-src/apps/web/core/components/issues/preview-card/root.tsx b/plane-src/apps/web/core/components/issues/preview-card/root.tsx index d54220f..9b4e4d4 100644 --- a/plane-src/apps/web/core/components/issues/preview-card/root.tsx +++ b/plane-src/apps/web/core/components/issues/preview-card/root.tsx @@ -38,25 +38,25 @@ export const WorkItemPreviewCard = observer(function WorkItemPreviewCard(props: const stateName = stateDetails?.name ?? fallbackStateDetails?.name; return ( -
-
+
+
-
+

{stateName}

-
{workItem.name}
+
{workItem.name}
-
+