forked from github/plane
refactor: change naming convention (#2383)
This commit is contained in:
parent
e28919a964
commit
0ef2200465
@ -36,18 +36,18 @@ export const ModuleIssuesHeader: React.FC = observer(() => {
|
|||||||
(key: keyof IIssueFilterOptions, value: string | string[]) => {
|
(key: keyof IIssueFilterOptions, value: string | string[]) => {
|
||||||
if (!workspaceSlug || !projectId || !moduleId) return;
|
if (!workspaceSlug || !projectId || !moduleId) return;
|
||||||
|
|
||||||
const newValues = moduleFilterStore.userModuleFilters?.[key] ?? [];
|
const newValues = moduleFilterStore.moduleFilters?.[key] ?? [];
|
||||||
|
|
||||||
if (Array.isArray(value)) {
|
if (Array.isArray(value)) {
|
||||||
value.forEach((val) => {
|
value.forEach((val) => {
|
||||||
if (!newValues.includes(val)) newValues.push(val);
|
if (!newValues.includes(val)) newValues.push(val);
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
if (moduleFilterStore.userModuleFilters?.[key]?.includes(value)) newValues.splice(newValues.indexOf(value), 1);
|
if (moduleFilterStore.moduleFilters?.[key]?.includes(value)) newValues.splice(newValues.indexOf(value), 1);
|
||||||
else newValues.push(value);
|
else newValues.push(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
moduleFilterStore.updateUserModuleFilters(workspaceSlug.toString(), projectId.toString(), moduleId.toString(), {
|
moduleFilterStore.updateModuleFilters(workspaceSlug.toString(), projectId.toString(), moduleId.toString(), {
|
||||||
[key]: newValues,
|
[key]: newValues,
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
@ -76,7 +76,7 @@ export const ModuleIssuesHeader: React.FC = observer(() => {
|
|||||||
/>
|
/>
|
||||||
<FiltersDropdown title="Filters">
|
<FiltersDropdown title="Filters">
|
||||||
<FilterSelection
|
<FilterSelection
|
||||||
filters={moduleFilterStore.userModuleFilters}
|
filters={moduleFilterStore.moduleFilters}
|
||||||
handleFiltersUpdate={handleFiltersUpdate}
|
handleFiltersUpdate={handleFiltersUpdate}
|
||||||
layoutDisplayFiltersOptions={activeLayout ? ISSUE_DISPLAY_FILTERS_BY_LAYOUT.issues[activeLayout] : undefined}
|
layoutDisplayFiltersOptions={activeLayout ? ISSUE_DISPLAY_FILTERS_BY_LAYOUT.issues[activeLayout] : undefined}
|
||||||
projectId={projectId?.toString() ?? ""}
|
projectId={projectId?.toString() ?? ""}
|
||||||
|
@ -14,7 +14,7 @@ export const ModuleAppliedFiltersRoot: React.FC = observer(() => {
|
|||||||
|
|
||||||
const { project: projectStore, moduleFilter: moduleFilterStore } = useMobxStore();
|
const { project: projectStore, moduleFilter: moduleFilterStore } = useMobxStore();
|
||||||
|
|
||||||
const userFilters = moduleFilterStore.userModuleFilters;
|
const userFilters = moduleFilterStore.moduleFilters;
|
||||||
|
|
||||||
// filters whose value not null or empty array
|
// filters whose value not null or empty array
|
||||||
const appliedFilters: IIssueFilterOptions = {};
|
const appliedFilters: IIssueFilterOptions = {};
|
||||||
@ -31,17 +31,17 @@ export const ModuleAppliedFiltersRoot: React.FC = observer(() => {
|
|||||||
|
|
||||||
// remove all values of the key if value is null
|
// remove all values of the key if value is null
|
||||||
if (!value) {
|
if (!value) {
|
||||||
moduleFilterStore.updateUserModuleFilters(workspaceSlug.toString(), projectId.toString(), moduleId.toString(), {
|
moduleFilterStore.updateModuleFilters(workspaceSlug.toString(), projectId.toString(), moduleId.toString(), {
|
||||||
[key]: null,
|
[key]: null,
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove the passed value from the key
|
// remove the passed value from the key
|
||||||
let newValues = moduleFilterStore.userModuleFilters?.[key] ?? [];
|
let newValues = moduleFilterStore.moduleFilters?.[key] ?? [];
|
||||||
newValues = newValues.filter((val) => val !== value);
|
newValues = newValues.filter((val) => val !== value);
|
||||||
|
|
||||||
moduleFilterStore.updateUserModuleFilters(workspaceSlug.toString(), projectId.toString(), moduleId.toString(), {
|
moduleFilterStore.updateModuleFilters(workspaceSlug.toString(), projectId.toString(), moduleId.toString(), {
|
||||||
[key]: newValues,
|
[key]: newValues,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
@ -54,7 +54,7 @@ export const ModuleAppliedFiltersRoot: React.FC = observer(() => {
|
|||||||
newFilters[key as keyof IIssueFilterOptions] = null;
|
newFilters[key as keyof IIssueFilterOptions] = null;
|
||||||
});
|
});
|
||||||
|
|
||||||
moduleFilterStore.updateUserModuleFilters(workspaceSlug.toString(), projectId.toString(), moduleId?.toString(), {
|
moduleFilterStore.updateModuleFilters(workspaceSlug.toString(), projectId.toString(), moduleId?.toString(), {
|
||||||
...newFilters,
|
...newFilters,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -18,9 +18,14 @@ export const ModuleAllLayouts: React.FC = observer(() => {
|
|||||||
const router = useRouter();
|
const router = useRouter();
|
||||||
const { workspaceSlug, projectId, moduleId } = router.query;
|
const { workspaceSlug, projectId, moduleId } = router.query;
|
||||||
|
|
||||||
const { module: moduleStore, project: projectStore, issueFilter: issueFilterStore } = useMobxStore();
|
const {
|
||||||
|
module: moduleStore,
|
||||||
|
moduleFilter: moduleFilterStore,
|
||||||
|
project: projectStore,
|
||||||
|
issueFilter: issueFilterStore,
|
||||||
|
} = useMobxStore();
|
||||||
|
|
||||||
useSWR(workspaceSlug && projectId ? `MODULE_ISSUES` : null, async () => {
|
useSWR(workspaceSlug && projectId && moduleId ? `MODULE_ISSUES_${moduleId.toString()}` : null, async () => {
|
||||||
if (workspaceSlug && projectId && moduleId) {
|
if (workspaceSlug && projectId && moduleId) {
|
||||||
await issueFilterStore.fetchUserProjectFilters(workspaceSlug.toString(), projectId.toString());
|
await issueFilterStore.fetchUserProjectFilters(workspaceSlug.toString(), projectId.toString());
|
||||||
|
|
||||||
@ -28,8 +33,8 @@ export const ModuleAllLayouts: React.FC = observer(() => {
|
|||||||
await projectStore.fetchProjectLabels(workspaceSlug.toString(), projectId.toString());
|
await projectStore.fetchProjectLabels(workspaceSlug.toString(), projectId.toString());
|
||||||
await projectStore.fetchProjectMembers(workspaceSlug.toString(), projectId.toString());
|
await projectStore.fetchProjectMembers(workspaceSlug.toString(), projectId.toString());
|
||||||
|
|
||||||
await moduleStore.fetchModuleDetails(workspaceSlug.toString(), projectId.toString(), moduleId.toString());
|
|
||||||
await moduleStore.fetchModuleIssues(workspaceSlug.toString(), projectId.toString(), moduleId.toString());
|
await moduleStore.fetchModuleIssues(workspaceSlug.toString(), projectId.toString(), moduleId.toString());
|
||||||
|
await moduleFilterStore.fetchModuleFilters(workspaceSlug.toString(), projectId.toString(), moduleId.toString());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -225,7 +225,6 @@ export const ISSUE_DISPLAY_FILTERS_BY_LAYOUT: {
|
|||||||
display_properties: true,
|
display_properties: true,
|
||||||
display_filters: {
|
display_filters: {
|
||||||
group_by: ["state_detail.group", "project", "priority", "labels", null],
|
group_by: ["state_detail.group", "project", "priority", "labels", null],
|
||||||
sub_group_by: ["state_detail.group", "project", "priority", "labels", null],
|
|
||||||
order_by: ["sort_order", "-created_at", "-updated_at", "start_date", "priority"],
|
order_by: ["sort_order", "-created_at", "-updated_at", "start_date", "priority"],
|
||||||
type: [null, "active", "backlog"],
|
type: [null, "active", "backlog"],
|
||||||
},
|
},
|
||||||
@ -255,7 +254,6 @@ export const ISSUE_DISPLAY_FILTERS_BY_LAYOUT: {
|
|||||||
display_properties: true,
|
display_properties: true,
|
||||||
display_filters: {
|
display_filters: {
|
||||||
group_by: ["state", "priority", "labels", "assignees", "created_by", null],
|
group_by: ["state", "priority", "labels", "assignees", "created_by", null],
|
||||||
sub_group_by: ["state", "priority", "labels", "assignees", "created_by", null],
|
|
||||||
order_by: ["sort_order", "-created_at", "-updated_at", "start_date", "priority"],
|
order_by: ["sort_order", "-created_at", "-updated_at", "start_date", "priority"],
|
||||||
type: [null, "active", "backlog"],
|
type: [null, "active", "backlog"],
|
||||||
},
|
},
|
||||||
|
@ -6,16 +6,17 @@ import { ModuleService } from "services/modules.service";
|
|||||||
import { handleIssueQueryParamsByLayout } from "helpers/issue.helper";
|
import { handleIssueQueryParamsByLayout } from "helpers/issue.helper";
|
||||||
// types
|
// types
|
||||||
import { RootStore } from "./root";
|
import { RootStore } from "./root";
|
||||||
import { IIssueFilterOptions, TIssueParams } from "types";
|
import { IIssueFilterOptions, IModule, TIssueParams } from "types";
|
||||||
|
|
||||||
export interface IModuleFilterStore {
|
export interface IModuleFilterStore {
|
||||||
loader: boolean;
|
loader: boolean;
|
||||||
error: any | null;
|
error: any | null;
|
||||||
userModuleFilters: IIssueFilterOptions;
|
moduleFilters: IIssueFilterOptions;
|
||||||
defaultFilters: IIssueFilterOptions;
|
defaultFilters: IIssueFilterOptions;
|
||||||
|
|
||||||
// action
|
// action
|
||||||
updateUserModuleFilters: (
|
fetchModuleFilters: (workspaceSlug: string, projectId: string, moduleId: string) => Promise<IModule>;
|
||||||
|
updateModuleFilters: (
|
||||||
workspaceSlug: string,
|
workspaceSlug: string,
|
||||||
projectId: string,
|
projectId: string,
|
||||||
moduleId: string,
|
moduleId: string,
|
||||||
@ -31,7 +32,7 @@ class ModuleFilterStore implements IModuleFilterStore {
|
|||||||
error: any | null = null;
|
error: any | null = null;
|
||||||
|
|
||||||
// observables
|
// observables
|
||||||
userModuleFilters: IIssueFilterOptions = {};
|
moduleFilters: IIssueFilterOptions = {};
|
||||||
defaultFilters: IIssueFilterOptions = {};
|
defaultFilters: IIssueFilterOptions = {};
|
||||||
|
|
||||||
// root store
|
// root store
|
||||||
@ -48,10 +49,11 @@ class ModuleFilterStore implements IModuleFilterStore {
|
|||||||
|
|
||||||
// observables
|
// observables
|
||||||
defaultFilters: observable.ref,
|
defaultFilters: observable.ref,
|
||||||
userModuleFilters: observable.ref,
|
moduleFilters: observable.ref,
|
||||||
|
|
||||||
// actions
|
// actions
|
||||||
updateUserModuleFilters: action,
|
fetchModuleFilters: action,
|
||||||
|
updateModuleFilters: action,
|
||||||
|
|
||||||
// computed
|
// computed
|
||||||
appliedFilters: computed,
|
appliedFilters: computed,
|
||||||
@ -77,17 +79,17 @@ class ModuleFilterStore implements IModuleFilterStore {
|
|||||||
get appliedFilters(): TIssueParams[] | null {
|
get appliedFilters(): TIssueParams[] | null {
|
||||||
const userDisplayFilters = this.rootStore.issueFilter.userDisplayFilters;
|
const userDisplayFilters = this.rootStore.issueFilter.userDisplayFilters;
|
||||||
|
|
||||||
if (!this.userModuleFilters || !userDisplayFilters) return null;
|
if (!this.moduleFilters || !userDisplayFilters) return null;
|
||||||
|
|
||||||
let filteredRouteParams: any = {
|
let filteredRouteParams: any = {
|
||||||
priority: this.userModuleFilters?.priority || undefined,
|
priority: this.moduleFilters?.priority || undefined,
|
||||||
state_group: this.userModuleFilters?.state_group || undefined,
|
state_group: this.moduleFilters?.state_group || undefined,
|
||||||
state: this.userModuleFilters?.state || undefined,
|
state: this.moduleFilters?.state || undefined,
|
||||||
assignees: this.userModuleFilters?.assignees || undefined,
|
assignees: this.moduleFilters?.assignees || undefined,
|
||||||
created_by: this.userModuleFilters?.created_by || undefined,
|
created_by: this.moduleFilters?.created_by || undefined,
|
||||||
labels: this.userModuleFilters?.labels || undefined,
|
labels: this.moduleFilters?.labels || undefined,
|
||||||
start_date: this.userModuleFilters?.start_date || undefined,
|
start_date: this.moduleFilters?.start_date || undefined,
|
||||||
target_date: this.userModuleFilters?.target_date || undefined,
|
target_date: this.moduleFilters?.target_date || undefined,
|
||||||
group_by: userDisplayFilters?.group_by || "state",
|
group_by: userDisplayFilters?.group_by || "state",
|
||||||
order_by: userDisplayFilters?.order_by || "-created_at",
|
order_by: userDisplayFilters?.order_by || "-created_at",
|
||||||
sub_group_by: userDisplayFilters?.sub_group_by || undefined,
|
sub_group_by: userDisplayFilters?.sub_group_by || undefined,
|
||||||
@ -106,20 +108,48 @@ class ModuleFilterStore implements IModuleFilterStore {
|
|||||||
return filteredRouteParams;
|
return filteredRouteParams;
|
||||||
}
|
}
|
||||||
|
|
||||||
updateUserModuleFilters = async (
|
fetchModuleFilters = async (workspaceSlug: string, projectId: string, moduleId: string) => {
|
||||||
|
try {
|
||||||
|
runInAction(() => {
|
||||||
|
this.loader = true;
|
||||||
|
this.error = null;
|
||||||
|
});
|
||||||
|
|
||||||
|
const response = await this.moduleService.getModuleDetails(workspaceSlug, projectId, moduleId);
|
||||||
|
|
||||||
|
runInAction(() => {
|
||||||
|
this.moduleFilters = response.view_props?.filters ?? {};
|
||||||
|
this.loader = false;
|
||||||
|
this.error = null;
|
||||||
|
});
|
||||||
|
|
||||||
|
return response;
|
||||||
|
} catch (error) {
|
||||||
|
console.error("Failed to fetch module details in module store", error);
|
||||||
|
|
||||||
|
runInAction(() => {
|
||||||
|
this.loader = false;
|
||||||
|
this.error = error;
|
||||||
|
});
|
||||||
|
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
updateModuleFilters = async (
|
||||||
workspaceSlug: string,
|
workspaceSlug: string,
|
||||||
projectId: string,
|
projectId: string,
|
||||||
moduleId: string,
|
moduleId: string,
|
||||||
filterToUpdate: Partial<IIssueFilterOptions>
|
filterToUpdate: Partial<IIssueFilterOptions>
|
||||||
) => {
|
) => {
|
||||||
const newFilters = {
|
const newFilters = {
|
||||||
...this.userModuleFilters,
|
...this.moduleFilters,
|
||||||
...filterToUpdate,
|
...filterToUpdate,
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
try {
|
||||||
runInAction(() => {
|
runInAction(() => {
|
||||||
this.userModuleFilters = newFilters;
|
this.moduleFilters = newFilters;
|
||||||
});
|
});
|
||||||
|
|
||||||
this.moduleService.patchModule(
|
this.moduleService.patchModule(
|
||||||
@ -134,7 +164,7 @@ class ModuleFilterStore implements IModuleFilterStore {
|
|||||||
this.rootStore.user.currentUser
|
this.rootStore.user.currentUser
|
||||||
);
|
);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
this.rootStore.module.fetchModuleDetails(workspaceSlug, projectId, moduleId);
|
this.fetchModuleFilters(workspaceSlug, projectId, moduleId);
|
||||||
|
|
||||||
runInAction(() => {
|
runInAction(() => {
|
||||||
this.error = error;
|
this.error = error;
|
||||||
|
@ -178,7 +178,6 @@ class ModuleStore implements IModuleStore {
|
|||||||
...this.moduleDetails,
|
...this.moduleDetails,
|
||||||
[moduleId]: response,
|
[moduleId]: response,
|
||||||
};
|
};
|
||||||
this.rootStore.moduleFilter.userModuleFilters = response.view_props?.filters ?? {};
|
|
||||||
this.loader = false;
|
this.loader = false;
|
||||||
this.error = null;
|
this.error = null;
|
||||||
});
|
});
|
||||||
@ -343,7 +342,6 @@ class ModuleStore implements IModuleStore {
|
|||||||
this.rootStore.project.setProjectId(projectId);
|
this.rootStore.project.setProjectId(projectId);
|
||||||
|
|
||||||
const params = this.rootStore?.issueFilter?.appliedFilters;
|
const params = this.rootStore?.issueFilter?.appliedFilters;
|
||||||
console.log("params", params);
|
|
||||||
const issueResponse = await this.moduleService.getModuleIssuesWithParams(
|
const issueResponse = await this.moduleService.getModuleIssuesWithParams(
|
||||||
workspaceSlug,
|
workspaceSlug,
|
||||||
projectId,
|
projectId,
|
||||||
|
Loading…
Reference in New Issue
Block a user