chore workspace draft issue improvements (#5808)
This commit is contained in:
parent
e7065af358
commit
c9580ab794
6 changed files with 38 additions and 4 deletions
|
|
@ -147,6 +147,8 @@ class WorkspaceDraftIssueViewSet(BaseViewSet):
|
||||||
"updated_at",
|
"updated_at",
|
||||||
"created_by",
|
"created_by",
|
||||||
"updated_by",
|
"updated_by",
|
||||||
|
"type_id",
|
||||||
|
"description_html",
|
||||||
)
|
)
|
||||||
.first()
|
.first()
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@ export const CreateUpdateIssueModalBase: React.FC<IssuesModalProps> = observer((
|
||||||
storeType: issueStoreFromProps,
|
storeType: issueStoreFromProps,
|
||||||
isDraft = false,
|
isDraft = false,
|
||||||
fetchIssueDetails = true,
|
fetchIssueDetails = true,
|
||||||
|
moveToIssue = false,
|
||||||
} = props;
|
} = props;
|
||||||
const issueStoreType = useIssueStoreType();
|
const issueStoreType = useIssueStoreType();
|
||||||
|
|
||||||
|
|
@ -308,6 +309,7 @@ export const CreateUpdateIssueModalBase: React.FC<IssuesModalProps> = observer((
|
||||||
isCreateMoreToggleEnabled={createMore}
|
isCreateMoreToggleEnabled={createMore}
|
||||||
onCreateMoreToggleChange={handleCreateMoreToggleChange}
|
onCreateMoreToggleChange={handleCreateMoreToggleChange}
|
||||||
isDraft={isDraft}
|
isDraft={isDraft}
|
||||||
|
moveToIssue={moveToIssue}
|
||||||
/>
|
/>
|
||||||
) : (
|
) : (
|
||||||
<IssueFormRoot
|
<IssueFormRoot
|
||||||
|
|
@ -324,6 +326,7 @@ export const CreateUpdateIssueModalBase: React.FC<IssuesModalProps> = observer((
|
||||||
onSubmit={(payload) => handleFormSubmit(payload, isDraft)}
|
onSubmit={(payload) => handleFormSubmit(payload, isDraft)}
|
||||||
projectId={activeProjectId}
|
projectId={activeProjectId}
|
||||||
isDraft={isDraft}
|
isDraft={isDraft}
|
||||||
|
moveToIssue={moveToIssue}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
</ModalCore>
|
</ModalCore>
|
||||||
|
|
|
||||||
|
|
@ -29,6 +29,7 @@ export interface DraftIssueProps {
|
||||||
onSubmit: (formData: Partial<TIssue>, is_draft_issue?: boolean) => Promise<void>;
|
onSubmit: (formData: Partial<TIssue>, is_draft_issue?: boolean) => Promise<void>;
|
||||||
projectId: string;
|
projectId: string;
|
||||||
isDraft: boolean;
|
isDraft: boolean;
|
||||||
|
moveToIssue?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const DraftIssueLayout: React.FC<DraftIssueProps> = observer((props) => {
|
export const DraftIssueLayout: React.FC<DraftIssueProps> = observer((props) => {
|
||||||
|
|
@ -43,6 +44,7 @@ export const DraftIssueLayout: React.FC<DraftIssueProps> = observer((props) => {
|
||||||
isCreateMoreToggleEnabled,
|
isCreateMoreToggleEnabled,
|
||||||
onCreateMoreToggleChange,
|
onCreateMoreToggleChange,
|
||||||
isDraft,
|
isDraft,
|
||||||
|
moveToIssue = false,
|
||||||
} = props;
|
} = props;
|
||||||
// states
|
// states
|
||||||
const [issueDiscardModal, setIssueDiscardModal] = useState(false);
|
const [issueDiscardModal, setIssueDiscardModal] = useState(false);
|
||||||
|
|
@ -156,6 +158,7 @@ export const DraftIssueLayout: React.FC<DraftIssueProps> = observer((props) => {
|
||||||
onSubmit={onSubmit}
|
onSubmit={onSubmit}
|
||||||
projectId={projectId}
|
projectId={projectId}
|
||||||
isDraft={isDraft}
|
isDraft={isDraft}
|
||||||
|
moveToIssue={moveToIssue}
|
||||||
/>
|
/>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import { useForm } from "react-hook-form";
|
||||||
// editor
|
// editor
|
||||||
import { EditorRefApi } from "@plane/editor";
|
import { EditorRefApi } from "@plane/editor";
|
||||||
// types
|
// types
|
||||||
import type { TIssue, ISearchIssueResponse } from "@plane/types";
|
import type { TIssue, ISearchIssueResponse, TWorkspaceDraftIssue } from "@plane/types";
|
||||||
// hooks
|
// hooks
|
||||||
import { Button, ToggleSwitch, TOAST_TYPE, setToast } from "@plane/ui";
|
import { Button, ToggleSwitch, TOAST_TYPE, setToast } from "@plane/ui";
|
||||||
// components
|
// components
|
||||||
|
|
@ -26,7 +26,7 @@ import { getChangedIssuefields } from "@/helpers/issue.helper";
|
||||||
import { getTabIndex } from "@/helpers/tab-indices.helper";
|
import { getTabIndex } from "@/helpers/tab-indices.helper";
|
||||||
// hooks
|
// hooks
|
||||||
import { useIssueModal } from "@/hooks/context/use-issue-modal";
|
import { useIssueModal } from "@/hooks/context/use-issue-modal";
|
||||||
import { useIssueDetail, useProject, useProjectState } from "@/hooks/store";
|
import { useIssueDetail, useProject, useProjectState, useWorkspaceDraftIssues } from "@/hooks/store";
|
||||||
import { usePlatformOS } from "@/hooks/use-platform-os";
|
import { usePlatformOS } from "@/hooks/use-platform-os";
|
||||||
import { useProjectIssueProperties } from "@/hooks/use-project-issue-properties";
|
import { useProjectIssueProperties } from "@/hooks/use-project-issue-properties";
|
||||||
// plane web components
|
// plane web components
|
||||||
|
|
@ -59,6 +59,7 @@ export interface IssueFormProps {
|
||||||
onSubmit: (values: Partial<TIssue>, is_draft_issue?: boolean) => Promise<void>;
|
onSubmit: (values: Partial<TIssue>, is_draft_issue?: boolean) => Promise<void>;
|
||||||
projectId: string;
|
projectId: string;
|
||||||
isDraft: boolean;
|
isDraft: boolean;
|
||||||
|
moveToIssue?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const IssueFormRoot: FC<IssueFormProps> = observer((props) => {
|
export const IssueFormRoot: FC<IssueFormProps> = observer((props) => {
|
||||||
|
|
@ -72,6 +73,7 @@ export const IssueFormRoot: FC<IssueFormProps> = observer((props) => {
|
||||||
isCreateMoreToggleEnabled,
|
isCreateMoreToggleEnabled,
|
||||||
onCreateMoreToggleChange,
|
onCreateMoreToggleChange,
|
||||||
isDraft,
|
isDraft,
|
||||||
|
moveToIssue,
|
||||||
} = props;
|
} = props;
|
||||||
|
|
||||||
// states
|
// states
|
||||||
|
|
@ -91,6 +93,7 @@ export const IssueFormRoot: FC<IssueFormProps> = observer((props) => {
|
||||||
const { getIssueTypeIdOnProjectChange, getActiveAdditionalPropertiesLength, handlePropertyValuesValidation } =
|
const { getIssueTypeIdOnProjectChange, getActiveAdditionalPropertiesLength, handlePropertyValuesValidation } =
|
||||||
useIssueModal();
|
useIssueModal();
|
||||||
const { isMobile } = usePlatformOS();
|
const { isMobile } = usePlatformOS();
|
||||||
|
const { moveIssue } = useWorkspaceDraftIssues();
|
||||||
|
|
||||||
const {
|
const {
|
||||||
issue: { getIssueById },
|
issue: { getIssueById },
|
||||||
|
|
@ -400,7 +403,7 @@ export const IssueFormRoot: FC<IssueFormProps> = observer((props) => {
|
||||||
Discard
|
Discard
|
||||||
</Button>
|
</Button>
|
||||||
<Button
|
<Button
|
||||||
variant="primary"
|
variant={moveToIssue ? "neutral-primary" : "primary"}
|
||||||
type="submit"
|
type="submit"
|
||||||
size="sm"
|
size="sm"
|
||||||
ref={submitBtnRef}
|
ref={submitBtnRef}
|
||||||
|
|
@ -417,6 +420,19 @@ export const IssueFormRoot: FC<IssueFormProps> = observer((props) => {
|
||||||
? "Create draft issue"
|
? "Create draft issue"
|
||||||
: "Create"}
|
: "Create"}
|
||||||
</Button>
|
</Button>
|
||||||
|
{moveToIssue && (
|
||||||
|
<Button
|
||||||
|
variant="primary"
|
||||||
|
type="button"
|
||||||
|
size="sm"
|
||||||
|
loading={isSubmitting}
|
||||||
|
onClick={() =>
|
||||||
|
data?.id && data && moveIssue(workspaceSlug.toString(), data?.id, data as TWorkspaceDraftIssue)
|
||||||
|
}
|
||||||
|
>
|
||||||
|
Add to project
|
||||||
|
</Button>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ export interface IssuesModalProps {
|
||||||
storeType?: EIssuesStoreType;
|
storeType?: EIssuesStoreType;
|
||||||
isDraft?: boolean;
|
isDraft?: boolean;
|
||||||
fetchIssueDetails?: boolean;
|
fetchIssueDetails?: boolean;
|
||||||
|
moveToIssue?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const CreateUpdateIssueModal: React.FC<IssuesModalProps> = observer(
|
export const CreateUpdateIssueModal: React.FC<IssuesModalProps> = observer(
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ export const WorkspaceDraftIssueQuickActions: React.FC<IQuickActionProps> = obse
|
||||||
parentRef,
|
parentRef,
|
||||||
} = props;
|
} = props;
|
||||||
// states
|
// states
|
||||||
|
const [moveToIssue, setMoveToIssue] = useState(false);
|
||||||
const [createUpdateIssueModal, setCreateUpdateIssueModal] = useState(false);
|
const [createUpdateIssueModal, setCreateUpdateIssueModal] = useState(false);
|
||||||
const [issueToEdit, setIssueToEdit] = useState<TWorkspaceDraftIssue | undefined>(undefined);
|
const [issueToEdit, setIssueToEdit] = useState<TWorkspaceDraftIssue | undefined>(undefined);
|
||||||
const [deleteIssueModal, setDeleteIssueModal] = useState(false);
|
const [deleteIssueModal, setDeleteIssueModal] = useState(false);
|
||||||
|
|
@ -77,7 +78,13 @@ export const WorkspaceDraftIssueQuickActions: React.FC<IQuickActionProps> = obse
|
||||||
key: "move-to-issues",
|
key: "move-to-issues",
|
||||||
title: "Move to issues",
|
title: "Move to issues",
|
||||||
icon: SquareStackIcon,
|
icon: SquareStackIcon,
|
||||||
action: () => handleMoveToIssues && handleMoveToIssues(),
|
action: () => {
|
||||||
|
if (handleMoveToIssues) {
|
||||||
|
setMoveToIssue(true);
|
||||||
|
setIssueToEdit(issue);
|
||||||
|
setCreateUpdateIssueModal(true);
|
||||||
|
}
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "delete",
|
key: "delete",
|
||||||
|
|
@ -102,6 +109,7 @@ export const WorkspaceDraftIssueQuickActions: React.FC<IQuickActionProps> = obse
|
||||||
onClose={() => {
|
onClose={() => {
|
||||||
setCreateUpdateIssueModal(false);
|
setCreateUpdateIssueModal(false);
|
||||||
setIssueToEdit(undefined);
|
setIssueToEdit(undefined);
|
||||||
|
setMoveToIssue(false);
|
||||||
}}
|
}}
|
||||||
data={issueToEdit ?? duplicateIssuePayload}
|
data={issueToEdit ?? duplicateIssuePayload}
|
||||||
onSubmit={async (data) => {
|
onSubmit={async (data) => {
|
||||||
|
|
@ -109,6 +117,7 @@ export const WorkspaceDraftIssueQuickActions: React.FC<IQuickActionProps> = obse
|
||||||
}}
|
}}
|
||||||
storeType={EIssuesStoreType.WORKSPACE_DRAFT}
|
storeType={EIssuesStoreType.WORKSPACE_DRAFT}
|
||||||
fetchIssueDetails={false}
|
fetchIssueDetails={false}
|
||||||
|
moveToIssue={moveToIssue}
|
||||||
isDraft
|
isDraft
|
||||||
/>
|
/>
|
||||||
<ContextMenu parentRef={parentRef} items={MENU_ITEMS} />
|
<ContextMenu parentRef={parentRef} items={MENU_ITEMS} />
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue