mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
Merge branch 'refactor/mobx-store' of https://github.com/makeplane/plane into refactor/mobx-store
This commit is contained in:
commit
d14dc13542
@ -1,7 +1,7 @@
|
|||||||
import { memo } from "react";
|
import { memo } from "react";
|
||||||
import { Draggable } from "@hello-pangea/dnd";
|
import { Draggable } from "@hello-pangea/dnd";
|
||||||
// components
|
// components
|
||||||
import { KanBanProperties } from "./properties";
|
import { IssueProperties } from "../properties/all-properties";
|
||||||
// ui
|
// ui
|
||||||
import { Tooltip } from "@plane/ui";
|
import { Tooltip } from "@plane/ui";
|
||||||
// types
|
// types
|
||||||
@ -15,7 +15,6 @@ import {
|
|||||||
IProjectIssuesFilterStore,
|
IProjectIssuesFilterStore,
|
||||||
IViewIssuesFilterStore,
|
IViewIssuesFilterStore,
|
||||||
} from "store_legacy/issues";
|
} from "store_legacy/issues";
|
||||||
import { IssuesFilter } from "store/issue/base-issue-filter.store";
|
|
||||||
import { WithDisplayPropertiesHOC } from "../properties/with-display-properties-HOC";
|
import { WithDisplayPropertiesHOC } from "../properties/with-display-properties-HOC";
|
||||||
|
|
||||||
interface IssueBlockProps {
|
interface IssueBlockProps {
|
||||||
@ -70,10 +69,7 @@ const KanbanIssueDetailsBlock: React.FC<IssueDetailsBlockProps> = (props) => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<WithDisplayPropertiesHOC
|
<WithDisplayPropertiesHOC issuesFilter={issuesFilter} displayPropertyKey="key">
|
||||||
issuesFilter={issuesFilter}
|
|
||||||
getShouldRenderProperty={(displayProperties) => displayProperties?.key}
|
|
||||||
>
|
|
||||||
<div className="relative">
|
<div className="relative">
|
||||||
<div className="line-clamp-1 text-xs text-custom-text-300">
|
<div className="line-clamp-1 text-xs text-custom-text-300">
|
||||||
{issue.project_detail.identifier}-{issue.sequence_id}
|
{issue.project_detail.identifier}-{issue.sequence_id}
|
||||||
@ -87,11 +83,11 @@ const KanbanIssueDetailsBlock: React.FC<IssueDetailsBlockProps> = (props) => {
|
|||||||
</div>
|
</div>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
<div>
|
<div>
|
||||||
<KanBanProperties
|
<IssueProperties
|
||||||
|
className="flex flex-wrap items-center gap-2 whitespace-nowrap"
|
||||||
issue={issue}
|
issue={issue}
|
||||||
issuesFilter={issuesFilter}
|
issuesFilter={issuesFilter}
|
||||||
handleIssues={updateIssue}
|
handleIssues={updateIssue}
|
||||||
showEmptyGroup={showEmptyGroup}
|
|
||||||
isReadOnly={isReadOnly}
|
isReadOnly={isReadOnly}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
@ -20,7 +20,7 @@ import {
|
|||||||
} from "store_legacy/issues";
|
} from "store_legacy/issues";
|
||||||
import { WithDisplayPropertiesHOC } from "../properties/with-display-properties-HOC";
|
import { WithDisplayPropertiesHOC } from "../properties/with-display-properties-HOC";
|
||||||
|
|
||||||
export interface IKanBanProperties {
|
export interface IIssueProperties {
|
||||||
issue: IIssue;
|
issue: IIssue;
|
||||||
handleIssues: (issue: IIssue) => void;
|
handleIssues: (issue: IIssue) => void;
|
||||||
issuesFilter:
|
issuesFilter:
|
||||||
@ -29,12 +29,12 @@ export interface IKanBanProperties {
|
|||||||
| ICycleIssuesFilterStore
|
| ICycleIssuesFilterStore
|
||||||
| IViewIssuesFilterStore
|
| IViewIssuesFilterStore
|
||||||
| IProfileIssuesFilterStore;
|
| IProfileIssuesFilterStore;
|
||||||
showEmptyGroup: boolean;
|
|
||||||
isReadOnly: boolean;
|
isReadOnly: boolean;
|
||||||
|
className: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const KanBanProperties: React.FC<IKanBanProperties> = observer((props) => {
|
export const IssueProperties: React.FC<IIssueProperties> = observer((props) => {
|
||||||
const { issue, handleIssues, issuesFilter, isReadOnly } = props;
|
const { issue, handleIssues, issuesFilter, isReadOnly, className } = props;
|
||||||
|
|
||||||
const handleState = (state: IState) => {
|
const handleState = (state: IState) => {
|
||||||
handleIssues({ ...issue, state: state.id });
|
handleIssues({ ...issue, state: state.id });
|
||||||
@ -65,13 +65,10 @@ export const KanBanProperties: React.FC<IKanBanProperties> = observer((props) =>
|
|||||||
};
|
};
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="flex flex-wrap items-center gap-2 whitespace-nowrap">
|
<div className={className}>
|
||||||
{/* basic properties */}
|
{/* basic properties */}
|
||||||
{/* state */}
|
{/* state */}
|
||||||
<WithDisplayPropertiesHOC
|
<WithDisplayPropertiesHOC issuesFilter={issuesFilter} displayPropertyKey="state">
|
||||||
issuesFilter={issuesFilter}
|
|
||||||
getShouldRenderProperty={(displayProperties) => displayProperties && displayProperties?.state}
|
|
||||||
>
|
|
||||||
<IssuePropertyState
|
<IssuePropertyState
|
||||||
projectId={issue?.project_detail?.id || null}
|
projectId={issue?.project_detail?.id || null}
|
||||||
value={issue?.state || null}
|
value={issue?.state || null}
|
||||||
@ -83,10 +80,7 @@ export const KanBanProperties: React.FC<IKanBanProperties> = observer((props) =>
|
|||||||
</WithDisplayPropertiesHOC>
|
</WithDisplayPropertiesHOC>
|
||||||
|
|
||||||
{/* priority */}
|
{/* priority */}
|
||||||
<WithDisplayPropertiesHOC
|
<WithDisplayPropertiesHOC issuesFilter={issuesFilter} displayPropertyKey="priority">
|
||||||
issuesFilter={issuesFilter}
|
|
||||||
getShouldRenderProperty={(displayProperties) => displayProperties && displayProperties?.priority}
|
|
||||||
>
|
|
||||||
<IssuePropertyPriority
|
<IssuePropertyPriority
|
||||||
value={issue?.priority || null}
|
value={issue?.priority || null}
|
||||||
onChange={handlePriority}
|
onChange={handlePriority}
|
||||||
@ -97,10 +91,7 @@ export const KanBanProperties: React.FC<IKanBanProperties> = observer((props) =>
|
|||||||
|
|
||||||
{/* label */}
|
{/* label */}
|
||||||
|
|
||||||
<WithDisplayPropertiesHOC
|
<WithDisplayPropertiesHOC issuesFilter={issuesFilter} displayPropertyKey="labels">
|
||||||
issuesFilter={issuesFilter}
|
|
||||||
getShouldRenderProperty={(displayProperties) => displayProperties && displayProperties?.labels}
|
|
||||||
>
|
|
||||||
<IssuePropertyLabels
|
<IssuePropertyLabels
|
||||||
projectId={issue?.project_detail?.id || null}
|
projectId={issue?.project_detail?.id || null}
|
||||||
value={issue?.labels || null}
|
value={issue?.labels || null}
|
||||||
@ -112,10 +103,7 @@ export const KanBanProperties: React.FC<IKanBanProperties> = observer((props) =>
|
|||||||
</WithDisplayPropertiesHOC>
|
</WithDisplayPropertiesHOC>
|
||||||
|
|
||||||
{/* start date */}
|
{/* start date */}
|
||||||
<WithDisplayPropertiesHOC
|
<WithDisplayPropertiesHOC issuesFilter={issuesFilter} displayPropertyKey="start_date">
|
||||||
issuesFilter={issuesFilter}
|
|
||||||
getShouldRenderProperty={(displayProperties) => displayProperties?.start_date}
|
|
||||||
>
|
|
||||||
<IssuePropertyDate
|
<IssuePropertyDate
|
||||||
value={issue?.start_date || null}
|
value={issue?.start_date || null}
|
||||||
onChange={(date: string) => handleStartDate(date)}
|
onChange={(date: string) => handleStartDate(date)}
|
||||||
@ -125,10 +113,7 @@ export const KanBanProperties: React.FC<IKanBanProperties> = observer((props) =>
|
|||||||
</WithDisplayPropertiesHOC>
|
</WithDisplayPropertiesHOC>
|
||||||
|
|
||||||
{/* target/due date */}
|
{/* target/due date */}
|
||||||
<WithDisplayPropertiesHOC
|
<WithDisplayPropertiesHOC issuesFilter={issuesFilter} displayPropertyKey="due_date">
|
||||||
issuesFilter={issuesFilter}
|
|
||||||
getShouldRenderProperty={(displayProperties) => displayProperties?.due_date}
|
|
||||||
>
|
|
||||||
<IssuePropertyDate
|
<IssuePropertyDate
|
||||||
value={issue?.target_date || null}
|
value={issue?.target_date || null}
|
||||||
onChange={(date: string) => handleTargetDate(date)}
|
onChange={(date: string) => handleTargetDate(date)}
|
||||||
@ -138,10 +123,7 @@ export const KanBanProperties: React.FC<IKanBanProperties> = observer((props) =>
|
|||||||
</WithDisplayPropertiesHOC>
|
</WithDisplayPropertiesHOC>
|
||||||
|
|
||||||
{/* assignee */}
|
{/* assignee */}
|
||||||
<WithDisplayPropertiesHOC
|
<WithDisplayPropertiesHOC issuesFilter={issuesFilter} displayPropertyKey="assignee">
|
||||||
issuesFilter={issuesFilter}
|
|
||||||
getShouldRenderProperty={(displayProperties) => displayProperties?.assignee}
|
|
||||||
>
|
|
||||||
<IssuePropertyAssignee
|
<IssuePropertyAssignee
|
||||||
projectId={issue?.project_detail?.id || null}
|
projectId={issue?.project_detail?.id || null}
|
||||||
value={issue?.assignees || null}
|
value={issue?.assignees || null}
|
||||||
@ -154,10 +136,7 @@ export const KanBanProperties: React.FC<IKanBanProperties> = observer((props) =>
|
|||||||
</WithDisplayPropertiesHOC>
|
</WithDisplayPropertiesHOC>
|
||||||
|
|
||||||
{/* estimates */}
|
{/* estimates */}
|
||||||
<WithDisplayPropertiesHOC
|
<WithDisplayPropertiesHOC issuesFilter={issuesFilter} displayPropertyKey="estimate">
|
||||||
issuesFilter={issuesFilter}
|
|
||||||
getShouldRenderProperty={(displayProperties) => displayProperties?.estimate}
|
|
||||||
>
|
|
||||||
<IssuePropertyEstimates
|
<IssuePropertyEstimates
|
||||||
projectId={issue?.project_detail?.id || null}
|
projectId={issue?.project_detail?.id || null}
|
||||||
value={issue?.estimate_point || null}
|
value={issue?.estimate_point || null}
|
||||||
@ -171,7 +150,8 @@ export const KanBanProperties: React.FC<IKanBanProperties> = observer((props) =>
|
|||||||
{/* sub-issues */}
|
{/* sub-issues */}
|
||||||
<WithDisplayPropertiesHOC
|
<WithDisplayPropertiesHOC
|
||||||
issuesFilter={issuesFilter}
|
issuesFilter={issuesFilter}
|
||||||
getShouldRenderProperty={(displayProperties) => displayProperties?.sub_issue_count && !!issue?.sub_issues_count}
|
displayPropertyKey="sub_issue_count"
|
||||||
|
shouldRenderProperty={!!issue?.sub_issues_count}
|
||||||
>
|
>
|
||||||
<Tooltip tooltipHeading="Sub-issues" tooltipContent={`${issue.sub_issues_count}`}>
|
<Tooltip tooltipHeading="Sub-issues" tooltipContent={`${issue.sub_issues_count}`}>
|
||||||
<div className="flex h-5 flex-shrink-0 items-center justify-center gap-2 overflow-hidden rounded border-[0.5px] border-custom-border-300 px-2.5 py-1">
|
<div className="flex h-5 flex-shrink-0 items-center justify-center gap-2 overflow-hidden rounded border-[0.5px] border-custom-border-300 px-2.5 py-1">
|
||||||
@ -184,9 +164,8 @@ export const KanBanProperties: React.FC<IKanBanProperties> = observer((props) =>
|
|||||||
{/* attachments */}
|
{/* attachments */}
|
||||||
<WithDisplayPropertiesHOC
|
<WithDisplayPropertiesHOC
|
||||||
issuesFilter={issuesFilter}
|
issuesFilter={issuesFilter}
|
||||||
getShouldRenderProperty={(displayProperties) =>
|
displayPropertyKey="attachment_count"
|
||||||
displayProperties?.attachment_count && !!issue?.attachment_count
|
shouldRenderProperty={!!issue?.attachment_count}
|
||||||
}
|
|
||||||
>
|
>
|
||||||
<Tooltip tooltipHeading="Attachments" tooltipContent={`${issue.attachment_count}`}>
|
<Tooltip tooltipHeading="Attachments" tooltipContent={`${issue.attachment_count}`}>
|
||||||
<div className="flex h-5 flex-shrink-0 items-center justify-center gap-2 overflow-hidden rounded border-[0.5px] border-custom-border-300 px-2.5 py-1">
|
<div className="flex h-5 flex-shrink-0 items-center justify-center gap-2 overflow-hidden rounded border-[0.5px] border-custom-border-300 px-2.5 py-1">
|
||||||
@ -199,7 +178,8 @@ export const KanBanProperties: React.FC<IKanBanProperties> = observer((props) =>
|
|||||||
{/* link */}
|
{/* link */}
|
||||||
<WithDisplayPropertiesHOC
|
<WithDisplayPropertiesHOC
|
||||||
issuesFilter={issuesFilter}
|
issuesFilter={issuesFilter}
|
||||||
getShouldRenderProperty={(displayProperties) => displayProperties?.link && !!issue?.link_count}
|
displayPropertyKey="link"
|
||||||
|
shouldRenderProperty={!!issue?.link_count}
|
||||||
>
|
>
|
||||||
<Tooltip tooltipHeading="Links" tooltipContent={`${issue.link_count}`}>
|
<Tooltip tooltipHeading="Links" tooltipContent={`${issue.link_count}`}>
|
||||||
<div className="flex h-5 flex-shrink-0 items-center justify-center gap-2 overflow-hidden rounded border-[0.5px] border-custom-border-300 px-2.5 py-1">
|
<div className="flex h-5 flex-shrink-0 items-center justify-center gap-2 overflow-hidden rounded border-[0.5px] border-custom-border-300 px-2.5 py-1">
|
@ -7,7 +7,6 @@ import {
|
|||||||
IProjectIssuesFilterStore,
|
IProjectIssuesFilterStore,
|
||||||
IViewIssuesFilterStore,
|
IViewIssuesFilterStore,
|
||||||
} from "store_legacy/issues";
|
} from "store_legacy/issues";
|
||||||
import { IIssueDisplayProperties } from "types";
|
|
||||||
|
|
||||||
interface IWithDisplayPropertiesHOC {
|
interface IWithDisplayPropertiesHOC {
|
||||||
issuesFilter:
|
issuesFilter:
|
||||||
@ -16,16 +15,17 @@ interface IWithDisplayPropertiesHOC {
|
|||||||
| ICycleIssuesFilterStore
|
| ICycleIssuesFilterStore
|
||||||
| IViewIssuesFilterStore
|
| IViewIssuesFilterStore
|
||||||
| IProfileIssuesFilterStore;
|
| IProfileIssuesFilterStore;
|
||||||
getShouldRenderProperty: (displayProperties: IIssueDisplayProperties) => boolean;
|
shouldRenderProperty?: boolean;
|
||||||
|
displayPropertyKey: string;
|
||||||
children: ReactNode;
|
children: ReactNode;
|
||||||
}
|
}
|
||||||
export const WithDisplayPropertiesHOC = observer(
|
export const WithDisplayPropertiesHOC = observer(
|
||||||
({ issuesFilter, getShouldRenderProperty, children }: IWithDisplayPropertiesHOC) => {
|
({ issuesFilter, shouldRenderProperty = true, displayPropertyKey, children }: IWithDisplayPropertiesHOC) => {
|
||||||
const displayProperties = issuesFilter.issueFilters.displayProperties;
|
const shouldDisplayPropertyFromFilters = issuesFilter.issueFilters.displayProperties[displayPropertyKey];
|
||||||
|
|
||||||
const shouldRenderProperty = getShouldRenderProperty(displayProperties);
|
const renderProperty = shouldDisplayPropertyFromFilters && shouldRenderProperty;
|
||||||
|
|
||||||
if (!shouldRenderProperty) return null;
|
if (!renderProperty) return null;
|
||||||
|
|
||||||
return <>{children}</>;
|
return <>{children}</>;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user