forked from github/plane
1be1b9f4a3
* chore: autorun for the issue detail store * fix: labels mutation * chore: remove old peek overview code * chore: move add to cycle and module logic to store * fix: build errors * chore: add peekProjectId query param for the peek overview * chore: update profile layout * fix: multiple workspaces * style: Issue activity and link design improvements in Peek overview. * fix issue with labels not occupying full widht. * fix links overflow issue. * add tooltip in links to display entire link. * add functionality to copy links to clipboard. * chore: peek overview for all the layouts * fix: build errors --------- Co-authored-by: Prateek Shourya <prateekshourya29@gmail.com> Co-authored-by: sriram veeraghanta <veeraghanta.sriram@gmail.com>
90 lines
3.0 KiB
TypeScript
90 lines
3.0 KiB
TypeScript
import { action, makeObservable, runInAction } from "mobx";
|
|
// types
|
|
import { RootStore } from "../root";
|
|
import { IIssueType } from "store/issue";
|
|
|
|
export interface ICycleIssueCalendarViewStore {
|
|
// actions
|
|
handleDragDrop: (source: any, destination: any) => void;
|
|
}
|
|
|
|
export class CycleIssueCalendarViewStore implements ICycleIssueCalendarViewStore {
|
|
// root store
|
|
rootStore;
|
|
|
|
constructor(_rootStore: RootStore) {
|
|
makeObservable(this, {
|
|
// actions
|
|
handleDragDrop: action,
|
|
});
|
|
|
|
this.rootStore = _rootStore;
|
|
}
|
|
|
|
handleDragDrop = async (source: any, destination: any) => {
|
|
const workspaceSlug = this.rootStore?.workspace?.workspaceSlug;
|
|
const projectId = this.rootStore?.project?.projectId;
|
|
const cycleId = this.rootStore?.cycle?.cycleId;
|
|
const issueType: IIssueType | null = this.rootStore?.cycleIssue?.getIssueType;
|
|
const issueLayout = this.rootStore?.issueFilter?.userDisplayFilters?.layout || null;
|
|
const currentIssues: any = this.rootStore.cycleIssue.getIssues;
|
|
|
|
if (workspaceSlug && projectId && cycleId && issueType && issueLayout === "calendar" && currentIssues) {
|
|
// update issue payload
|
|
let updateIssue: any = {
|
|
workspaceSlug: workspaceSlug,
|
|
projectId: projectId,
|
|
};
|
|
|
|
const droppableSourceColumnId = source?.droppableId || null;
|
|
const droppableDestinationColumnId = destination?.droppableId || null;
|
|
|
|
if (droppableSourceColumnId === droppableDestinationColumnId) return;
|
|
|
|
if (droppableSourceColumnId != droppableDestinationColumnId) {
|
|
// horizontal
|
|
const _sourceIssues = currentIssues[droppableSourceColumnId];
|
|
let _destinationIssues = currentIssues[droppableDestinationColumnId] || [];
|
|
|
|
const [removed] = _sourceIssues.splice(source.index, 1);
|
|
|
|
if (_destinationIssues && _destinationIssues.length > 0)
|
|
_destinationIssues.splice(destination.index, 0, {
|
|
...removed,
|
|
target_date: droppableDestinationColumnId,
|
|
});
|
|
else _destinationIssues = [..._destinationIssues, { ...removed, target_date: droppableDestinationColumnId }];
|
|
|
|
updateIssue = { ...updateIssue, issueId: removed?.id, target_date: droppableDestinationColumnId };
|
|
|
|
currentIssues[droppableSourceColumnId] = _sourceIssues;
|
|
currentIssues[droppableDestinationColumnId] = _destinationIssues;
|
|
}
|
|
|
|
const reorderedIssues = {
|
|
...this.rootStore?.cycleIssue.issues,
|
|
[cycleId]: {
|
|
...this.rootStore?.cycleIssue.issues?.[cycleId],
|
|
[issueType]: {
|
|
...this.rootStore?.cycleIssue.issues?.[cycleId]?.[issueType],
|
|
[issueType]: currentIssues,
|
|
},
|
|
},
|
|
};
|
|
|
|
runInAction(() => {
|
|
this.rootStore.cycleIssue.issues = { ...reorderedIssues };
|
|
});
|
|
|
|
this.rootStore.projectIssues.updateIssue(
|
|
updateIssue.workspaceSlug,
|
|
updateIssue.projectId,
|
|
updateIssue.issueId,
|
|
updateIssue
|
|
);
|
|
}
|
|
|
|
return;
|
|
};
|
|
}
|