Merge branch 'refactor/mobx-store' of https://github.com/makeplane/plane into refactor/mobx-store

This commit is contained in:
Aaryan Khandelwal 2023-12-18 12:32:06 +05:30
commit d14dc13542
3 changed files with 28 additions and 52 deletions

View File

@ -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>

View File

@ -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">

View File

@ -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}</>;
} }