chore: space folders (#8707)
* chore: change the space folders structure * fix: format
This commit is contained in:
parent
be8836642a
commit
7fb6696c67
154 changed files with 30 additions and 197 deletions
77
apps/space/store/module.store.ts
Normal file
77
apps/space/store/module.store.ts
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
/**
|
||||
* Copyright (c) 2023-present Plane Software, Inc. and contributors
|
||||
* SPDX-License-Identifier: AGPL-3.0-only
|
||||
* See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
import { set } from "lodash-es";
|
||||
import { action, computed, makeObservable, observable, runInAction } from "mobx";
|
||||
// plane imports
|
||||
import { SitesModuleService } from "@plane/services";
|
||||
// types
|
||||
import type { TPublicModule } from "@/types/modules";
|
||||
// root store
|
||||
import type { CoreRootStore } from "./root.store";
|
||||
|
||||
export interface IIssueModuleStore {
|
||||
// observables
|
||||
modules: TPublicModule[] | undefined;
|
||||
// computed actions
|
||||
getModuleById: (moduleId: string | undefined) => TPublicModule | undefined;
|
||||
getModulesByIds: (moduleIds: string[]) => TPublicModule[];
|
||||
// fetch actions
|
||||
fetchModules: (anchor: string) => Promise<TPublicModule[]>;
|
||||
}
|
||||
|
||||
export class ModuleStore implements IIssueModuleStore {
|
||||
moduleMap: Record<string, TPublicModule> = {};
|
||||
moduleService: SitesModuleService;
|
||||
rootStore: CoreRootStore;
|
||||
|
||||
constructor(_rootStore: CoreRootStore) {
|
||||
makeObservable(this, {
|
||||
// observables
|
||||
moduleMap: observable,
|
||||
// computed
|
||||
modules: computed,
|
||||
// fetch action
|
||||
fetchModules: action,
|
||||
});
|
||||
this.moduleService = new SitesModuleService();
|
||||
this.rootStore = _rootStore;
|
||||
}
|
||||
|
||||
get modules() {
|
||||
return Object.values(this.moduleMap);
|
||||
}
|
||||
|
||||
getModuleById = (moduleId: string | undefined) => (moduleId ? this.moduleMap[moduleId] : undefined);
|
||||
|
||||
getModulesByIds = (moduleIds: string[]) => {
|
||||
const currModules = [];
|
||||
for (const moduleId of moduleIds) {
|
||||
const issueModule = this.getModuleById(moduleId);
|
||||
if (issueModule) {
|
||||
currModules.push(issueModule);
|
||||
}
|
||||
}
|
||||
|
||||
return currModules;
|
||||
};
|
||||
|
||||
fetchModules = async (anchor: string) => {
|
||||
try {
|
||||
const modulesResponse = await this.moduleService.list(anchor);
|
||||
runInAction(() => {
|
||||
this.moduleMap = {};
|
||||
for (const issueModule of modulesResponse) {
|
||||
set(this.moduleMap, [issueModule.id], issueModule);
|
||||
}
|
||||
});
|
||||
return modulesResponse;
|
||||
} catch (error) {
|
||||
console.error("Failed to fetch members:", error);
|
||||
return [];
|
||||
}
|
||||
};
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue