Files
plane/web/core/store/theme.store.ts
Anmol Singh Bhatia 473932af0a [WEB-3291] dev: app sidebar revamp (#6578)
* 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>
2025-02-17 23:46:55 +05:30

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());
};
}