mirror of
https://github.com/makeplane/plane
synced 2025-08-07 19:59:33 +00:00
* chore: workspace constant and types updated * chore: workspace service, store and app theme store updated * dev: extended sidebar implementation and code refactor * chore: ux improvements * chore: sidebar preference endpoint updated * chore: sidebar preference endpoint updated * chore: sidebar preference endpoint updated * chore: code refactor * chore: code refactor * chore: radix-ui react-scroll-area added to plane ui package * chore: scrollbar color token added to tailwind config * dev: scroll area component * chore-scroll-area-component-improvement * fix: build error * chore: code refactor --------- Co-authored-by: sangeethailango <sangeethailango21@gmail.com>
164 lines
6.0 KiB
TypeScript
164 lines
6.0 KiB
TypeScript
import { action, observable, makeObservable } from "mobx";
|
|
|
|
export interface IThemeStore {
|
|
// observables
|
|
sidebarCollapsed: boolean | undefined;
|
|
extendedSidebarCollapsed: boolean | undefined;
|
|
extendedProjectSidebarCollapsed: boolean | undefined;
|
|
profileSidebarCollapsed: boolean | undefined;
|
|
workspaceAnalyticsSidebarCollapsed: boolean | undefined;
|
|
issueDetailSidebarCollapsed: boolean | undefined;
|
|
epicDetailSidebarCollapsed: boolean | undefined;
|
|
initiativesSidebarCollapsed: boolean | undefined;
|
|
projectOverviewSidebarCollapsed: boolean | undefined;
|
|
// actions
|
|
toggleSidebar: (collapsed?: boolean) => void;
|
|
toggleExtendedSidebar: (collapsed?: boolean) => void;
|
|
toggleExtendedProjectSidebar: (collapsed?: boolean) => void;
|
|
toggleProfileSidebar: (collapsed?: boolean) => void;
|
|
toggleWorkspaceAnalyticsSidebar: (collapsed?: boolean) => void;
|
|
toggleIssueDetailSidebar: (collapsed?: boolean) => void;
|
|
toggleEpicDetailSidebar: (collapsed?: boolean) => void;
|
|
toggleInitiativesSidebar: (collapsed?: boolean) => void;
|
|
toggleProjectOverviewSidebar: (collapsed?: boolean) => void;
|
|
}
|
|
|
|
export class ThemeStore implements IThemeStore {
|
|
// observables
|
|
sidebarCollapsed: boolean | undefined = undefined;
|
|
extendedSidebarCollapsed: boolean | undefined = undefined;
|
|
extendedProjectSidebarCollapsed: boolean | undefined = undefined;
|
|
profileSidebarCollapsed: boolean | undefined = undefined;
|
|
workspaceAnalyticsSidebarCollapsed: boolean | undefined = undefined;
|
|
issueDetailSidebarCollapsed: boolean | undefined = undefined;
|
|
epicDetailSidebarCollapsed: boolean | undefined = undefined;
|
|
initiativesSidebarCollapsed: boolean | undefined = undefined;
|
|
projectOverviewSidebarCollapsed: boolean | undefined = undefined;
|
|
|
|
constructor() {
|
|
makeObservable(this, {
|
|
// observable
|
|
sidebarCollapsed: observable.ref,
|
|
extendedSidebarCollapsed: observable.ref,
|
|
extendedProjectSidebarCollapsed: observable.ref,
|
|
profileSidebarCollapsed: observable.ref,
|
|
workspaceAnalyticsSidebarCollapsed: observable.ref,
|
|
issueDetailSidebarCollapsed: observable.ref,
|
|
epicDetailSidebarCollapsed: observable.ref,
|
|
initiativesSidebarCollapsed: observable.ref,
|
|
projectOverviewSidebarCollapsed: observable.ref,
|
|
// action
|
|
toggleSidebar: action,
|
|
toggleExtendedSidebar: action,
|
|
toggleExtendedProjectSidebar: action,
|
|
toggleProfileSidebar: action,
|
|
toggleWorkspaceAnalyticsSidebar: action,
|
|
toggleIssueDetailSidebar: action,
|
|
toggleEpicDetailSidebar: action,
|
|
toggleInitiativesSidebar: action,
|
|
toggleProjectOverviewSidebar: action,
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Toggle the sidebar collapsed state
|
|
* @param collapsed
|
|
*/
|
|
toggleSidebar = (collapsed?: boolean) => {
|
|
if (collapsed === undefined) {
|
|
this.sidebarCollapsed = !this.sidebarCollapsed;
|
|
} else {
|
|
this.sidebarCollapsed = collapsed;
|
|
}
|
|
localStorage.setItem("app_sidebar_collapsed", this.sidebarCollapsed.toString());
|
|
};
|
|
|
|
/**
|
|
* Toggle the extended sidebar collapsed state
|
|
* @param collapsed
|
|
*/
|
|
toggleExtendedSidebar = (collapsed?: boolean) => {
|
|
if (collapsed === undefined) {
|
|
this.extendedSidebarCollapsed = !this.extendedSidebarCollapsed;
|
|
} else {
|
|
this.extendedSidebarCollapsed = collapsed;
|
|
}
|
|
localStorage.setItem("extended_sidebar_collapsed", this.extendedSidebarCollapsed.toString());
|
|
};
|
|
|
|
/**
|
|
* Toggle the extended project sidebar collapsed state
|
|
* @param collapsed
|
|
*/
|
|
toggleExtendedProjectSidebar = (collapsed?: boolean) => {
|
|
if (collapsed === undefined) {
|
|
this.extendedProjectSidebarCollapsed = !this.extendedProjectSidebarCollapsed;
|
|
} else {
|
|
this.extendedProjectSidebarCollapsed = collapsed;
|
|
}
|
|
localStorage.setItem("extended_project_sidebar_collapsed", this.extendedProjectSidebarCollapsed.toString());
|
|
};
|
|
|
|
/**
|
|
* Toggle the profile sidebar collapsed state
|
|
* @param collapsed
|
|
*/
|
|
toggleProfileSidebar = (collapsed?: boolean) => {
|
|
if (collapsed === undefined) {
|
|
this.profileSidebarCollapsed = !this.profileSidebarCollapsed;
|
|
} else {
|
|
this.profileSidebarCollapsed = collapsed;
|
|
}
|
|
localStorage.setItem("profile_sidebar_collapsed", this.profileSidebarCollapsed.toString());
|
|
};
|
|
|
|
/**
|
|
* Toggle the profile sidebar collapsed state
|
|
* @param collapsed
|
|
*/
|
|
toggleWorkspaceAnalyticsSidebar = (collapsed?: boolean) => {
|
|
if (collapsed === undefined) {
|
|
this.workspaceAnalyticsSidebarCollapsed = !this.workspaceAnalyticsSidebarCollapsed;
|
|
} else {
|
|
this.workspaceAnalyticsSidebarCollapsed = collapsed;
|
|
}
|
|
localStorage.setItem("workspace_analytics_sidebar_collapsed", this.workspaceAnalyticsSidebarCollapsed.toString());
|
|
};
|
|
|
|
toggleIssueDetailSidebar = (collapsed?: boolean) => {
|
|
if (collapsed === undefined) {
|
|
this.issueDetailSidebarCollapsed = !this.issueDetailSidebarCollapsed;
|
|
} else {
|
|
this.issueDetailSidebarCollapsed = collapsed;
|
|
}
|
|
localStorage.setItem("issue_detail_sidebar_collapsed", this.issueDetailSidebarCollapsed.toString());
|
|
};
|
|
|
|
toggleEpicDetailSidebar = (collapsed?: boolean) => {
|
|
if (collapsed === undefined) {
|
|
this.epicDetailSidebarCollapsed = !this.epicDetailSidebarCollapsed;
|
|
} else {
|
|
this.epicDetailSidebarCollapsed = collapsed;
|
|
}
|
|
localStorage.setItem("epic_detail_sidebar_collapsed", this.epicDetailSidebarCollapsed.toString());
|
|
};
|
|
|
|
toggleInitiativesSidebar = (collapsed?: boolean) => {
|
|
if (collapsed === undefined) {
|
|
this.initiativesSidebarCollapsed = !this.initiativesSidebarCollapsed;
|
|
} else {
|
|
this.initiativesSidebarCollapsed = collapsed;
|
|
}
|
|
localStorage.setItem("initiatives_sidebar_collapsed", this.initiativesSidebarCollapsed.toString());
|
|
};
|
|
|
|
toggleProjectOverviewSidebar = (collapsed?: boolean) => {
|
|
if (collapsed === undefined) {
|
|
this.projectOverviewSidebarCollapsed = !this.projectOverviewSidebarCollapsed;
|
|
} else {
|
|
this.projectOverviewSidebarCollapsed = collapsed;
|
|
}
|
|
localStorage.setItem("project_overview_sidebar_collapsed", this.projectOverviewSidebarCollapsed.toString());
|
|
};
|
|
}
|