mirror of
https://github.com/makeplane/plane
synced 2024-06-14 14:31:34 +00:00
170 lines
4.4 KiB
TypeScript
170 lines
4.4 KiB
TypeScript
import { observable, runInAction } from "mobx";
|
|
import set from "lodash/set";
|
|
import omit from "lodash/omit";
|
|
import isToday from "date-fns/isToday";
|
|
import isThisWeek from "date-fns/isThisWeek";
|
|
import isYesterday from "date-fns/isYesterday";
|
|
|
|
import { IPage } from "@plane/types";
|
|
import { PageService } from "services/page.service";
|
|
import { is } from "date-fns/locale";
|
|
|
|
export interface IPageStore {
|
|
access: number;
|
|
archived_at: string | null;
|
|
color: string;
|
|
created_at: Date;
|
|
created_by: string;
|
|
description: string;
|
|
description_html: string;
|
|
description_stripped: string | null;
|
|
id: string;
|
|
is_favorite: boolean;
|
|
is_locked: boolean;
|
|
labels: string[];
|
|
name: string;
|
|
owned_by: string;
|
|
project: string;
|
|
updated_at: Date;
|
|
updated_by: string;
|
|
workspace: string;
|
|
}
|
|
|
|
export class PageStore {
|
|
access: number;
|
|
archived_at: string | null;
|
|
color: string;
|
|
created_at: Date;
|
|
created_by: string;
|
|
description: string;
|
|
description_html: string;
|
|
description_stripped: string | null;
|
|
id: string;
|
|
is_favorite: boolean;
|
|
is_locked: boolean;
|
|
labels: string[];
|
|
name: string;
|
|
owned_by: string;
|
|
project: string;
|
|
updated_at: Date;
|
|
updated_by: string;
|
|
workspace: string;
|
|
|
|
pageService;
|
|
|
|
constructor(page: IPage) {
|
|
observable(this, {
|
|
name: observable.ref,
|
|
description_html: observable.ref,
|
|
is_favorite: observable.ref,
|
|
is_locked: observable.ref,
|
|
});
|
|
this.created_by = page?.created_by || "";
|
|
this.created_at = page?.created_at || new Date();
|
|
this.color = page?.color || "";
|
|
this.archived_at = page?.archived_at || null;
|
|
this.name = page?.name || "";
|
|
this.description = page?.description || "";
|
|
this.description_stripped = page?.description_stripped || "";
|
|
this.description_html = page?.description_html || "";
|
|
this.access = page?.access || 0;
|
|
this.workspace = page?.workspace || "";
|
|
this.updated_by = page?.updated_by || "";
|
|
this.updated_at = page?.updated_at || new Date();
|
|
this.project = page?.project || "";
|
|
this.owned_by = page?.owned_by || "";
|
|
this.labels = page?.labels || [];
|
|
this.is_locked = page?.is_locked || false;
|
|
this.id = page?.id || "";
|
|
this.is_favorite = page?.is_favorite || false;
|
|
|
|
this.pageService = new PageService();
|
|
}
|
|
|
|
updateName = async (name: string) => {
|
|
this.name = name;
|
|
await this.pageService.patchPage(this.workspace, this.project, this.id, { name });
|
|
};
|
|
|
|
updateDescription = async (description: string) => {
|
|
this.description = description;
|
|
await this.pageService.patchPage(this.workspace, this.project, this.id, { description });
|
|
};
|
|
|
|
/**
|
|
* Add Page to users favorites list
|
|
* @param workspaceSlug
|
|
* @param projectId
|
|
* @param pageId
|
|
*/
|
|
addToFavorites = async (workspaceSlug: string, projectId: string, pageId: string) => {
|
|
try {
|
|
runInAction(() => {
|
|
this.is_favorite = true;
|
|
});
|
|
await this.pageService.addPageToFavorites(workspaceSlug, projectId, pageId);
|
|
} catch (error) {
|
|
this.is_favorite = false;
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Remove page from the users favorites list
|
|
* @param workspaceSlug
|
|
* @param projectId
|
|
* @param pageId
|
|
*/
|
|
removeFromFavorites = async (workspaceSlug: string, projectId: string, pageId: string) => {
|
|
try {
|
|
this.is_favorite = false;
|
|
await this.pageService.removePageFromFavorites(workspaceSlug, projectId, pageId);
|
|
} catch (error) {
|
|
this.is_favorite = true;
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* make a page public
|
|
* @param workspaceSlug
|
|
* @param projectId
|
|
* @param pageId
|
|
* @returns
|
|
*/
|
|
makePublic = async (workspaceSlug: string, projectId: string, pageId: string) => {
|
|
try {
|
|
runInAction(() => {
|
|
this.access = 0;
|
|
});
|
|
await this.pageService.patchPage(workspaceSlug, projectId, pageId, { access: 0 });
|
|
} catch (error) {
|
|
runInAction(() => {
|
|
this.access = 1;
|
|
});
|
|
throw error;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Make a page private
|
|
* @param workspaceSlug
|
|
* @param projectId
|
|
* @param pageId
|
|
* @returns
|
|
*/
|
|
makePrivate = async (workspaceSlug: string, projectId: string, pageId: string) => {
|
|
try {
|
|
runInAction(() => {
|
|
this.access = 1;
|
|
});
|
|
await this.pageService.patchPage(workspaceSlug, projectId, pageId, { access: 1 });
|
|
} catch (error) {
|
|
runInAction(() => {
|
|
this.access = 0;
|
|
});
|
|
throw error;
|
|
}
|
|
};
|
|
}
|