chore: updating filters, display_filter and display properties

This commit is contained in:
gurusainath 2023-09-14 14:41:41 +05:30
parent 0ec0ad6aba
commit 3ffbb6ac17
19 changed files with 724 additions and 518 deletions

View File

@ -13,6 +13,10 @@ export const FilterDisplayProperties = observer(() => {
const [previewEnabled, setPreviewEnabled] = React.useState(true); const [previewEnabled, setPreviewEnabled] = React.useState(true);
const handleDisplayProperties = (key: string, value: boolean) => {
issueFilterStore.handleUserFilter("display_properties", key, !value);
};
return ( return (
<div> <div>
<FilterHeader <FilterHeader
@ -32,6 +36,12 @@ export const FilterDisplayProperties = observer(() => {
? `bg-custom-primary-200 border-custom-primary-200 text-white` ? `bg-custom-primary-200 border-custom-primary-200 text-white`
: `hover:bg-custom-border-100 border-custom-border-100` : `hover:bg-custom-border-100 border-custom-border-100`
}`} }`}
onClick={() =>
handleDisplayProperties(
_displayProperties?.key,
issueFilterStore?.userFilters?.display_properties?.[_displayProperties?.key]
)
}
> >
{_displayProperties?.title} {_displayProperties?.title}
</div> </div>

View File

@ -14,6 +14,10 @@ export const FilterExtraOptions = observer(() => {
const [previewEnabled, setPreviewEnabled] = React.useState(true); const [previewEnabled, setPreviewEnabled] = React.useState(true);
const handleExtraOptions = (key: string, value: boolean) => {
issueFilterStore.handleUserFilter("display_filters", key, !value);
};
return ( return (
<div> <div>
<FilterHeader <FilterHeader
@ -33,6 +37,12 @@ export const FilterExtraOptions = observer(() => {
? true ? true
: false : false
} }
onClick={() =>
handleExtraOptions(
_extraProperties?.key,
issueFilterStore?.userFilters?.display_filters?.[_extraProperties?.key]
)
}
title={_extraProperties.title} title={_extraProperties.title}
/> />
))} ))}

View File

@ -14,6 +14,10 @@ export const FilterGroupBy = observer(() => {
const [previewEnabled, setPreviewEnabled] = React.useState(true); const [previewEnabled, setPreviewEnabled] = React.useState(true);
const handleGroupBy = (key: string, value: string) => {
issueFilterStore.handleUserFilter("display_filters", key, value);
};
return ( return (
<div> <div>
<FilterHeader <FilterHeader
@ -33,6 +37,7 @@ export const FilterGroupBy = observer(() => {
? true ? true
: false : false
} }
onClick={() => handleGroupBy("group_by", _groupBy?.key)}
title={_groupBy.title} title={_groupBy.title}
multiple={false} multiple={false}
/> />

View File

@ -14,6 +14,10 @@ export const FilterIssueType = observer(() => {
const [previewEnabled, setPreviewEnabled] = React.useState(true); const [previewEnabled, setPreviewEnabled] = React.useState(true);
const handleIssueType = (key: string, value: string) => {
issueFilterStore.handleUserFilter("display_filters", key, value);
};
return ( return (
<div> <div>
<FilterHeader <FilterHeader
@ -33,6 +37,7 @@ export const FilterIssueType = observer(() => {
? true ? true
: false : false
} }
onClick={() => handleIssueType("type", _issueType?.key)}
title={_issueType.title} title={_issueType.title}
multiple={false} multiple={false}
/> />

View File

@ -14,6 +14,10 @@ export const FilterOrderBy = observer(() => {
const [previewEnabled, setPreviewEnabled] = React.useState(true); const [previewEnabled, setPreviewEnabled] = React.useState(true);
const handleOrderBy = (key: string, value: string) => {
issueFilterStore.handleUserFilter("display_filters", key, value);
};
return ( return (
<div> <div>
<FilterHeader <FilterHeader
@ -33,6 +37,7 @@ export const FilterOrderBy = observer(() => {
? true ? true
: false : false
} }
onClick={() => handleOrderBy("order_by", _orderBy?.key)}
title={_orderBy.title} title={_orderBy.title}
multiple={false} multiple={false}
/> />

View File

@ -34,10 +34,20 @@ export const FilterAssignees = observer(() => {
const [previewEnabled, setPreviewEnabled] = React.useState(true); const [previewEnabled, setPreviewEnabled] = React.useState(true);
const handleFilter = (key: string, value: string) => {
const _value =
issueFilterStore?.userFilters?.filters?.[key] != null
? issueFilterStore?.userFilters?.filters?.[key].includes(value)
? issueFilterStore?.userFilters?.filters?.[key].filter((p: string) => p != value)
: [...issueFilterStore?.userFilters?.filters?.[key], value]
: [value];
issueFilterStore.handleUserFilter("filters", key, _value);
};
return ( return (
<div> <div>
<FilterHeader <FilterHeader
title={"Assignees"} title={`Assignees (${issueFilterStore?.projectMembers?.length || 0})`}
isPreviewEnabled={previewEnabled} isPreviewEnabled={previewEnabled}
handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)} handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)}
/> />
@ -54,6 +64,7 @@ export const FilterAssignees = observer(() => {
? true ? true
: false : false
} }
onClick={() => handleFilter("assignees", _member?.member?.id)}
icon={ icon={
<MemberIcons <MemberIcons
display_name={_member?.member.display_name} display_name={_member?.member.display_name}

View File

@ -17,10 +17,20 @@ export const FilterCreatedBy = observer(() => {
const [previewEnabled, setPreviewEnabled] = React.useState(true); const [previewEnabled, setPreviewEnabled] = React.useState(true);
const handleFilter = (key: string, value: string) => {
const _value =
issueFilterStore?.userFilters?.filters?.[key] != null
? issueFilterStore?.userFilters?.filters?.[key].includes(value)
? issueFilterStore?.userFilters?.filters?.[key].filter((p: string) => p != value)
: [...issueFilterStore?.userFilters?.filters?.[key], value]
: [value];
issueFilterStore.handleUserFilter("filters", key, _value);
};
return ( return (
<div> <div>
<FilterHeader <FilterHeader
title={"Created By"} title={`Created By (${issueFilterStore?.projectMembers?.length || 0})`}
isPreviewEnabled={previewEnabled} isPreviewEnabled={previewEnabled}
handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)} handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)}
/> />
@ -37,6 +47,7 @@ export const FilterCreatedBy = observer(() => {
? true ? true
: false : false
} }
onClick={() => handleFilter("created_by", _member?.member?.id)}
icon={ icon={
<MemberIcons <MemberIcons
display_name={_member?.member.display_name} display_name={_member?.member.display_name}

View File

@ -22,10 +22,20 @@ export const FilterLabels = observer(() => {
const [previewEnabled, setPreviewEnabled] = React.useState(true); const [previewEnabled, setPreviewEnabled] = React.useState(true);
const handleFilter = (key: string, value: string) => {
const _value =
issueFilterStore?.userFilters?.filters?.[key] != null
? issueFilterStore?.userFilters?.filters?.[key].includes(value)
? issueFilterStore?.userFilters?.filters?.[key].filter((p: string) => p != value)
: [...issueFilterStore?.userFilters?.filters?.[key], value]
: [value];
issueFilterStore.handleUserFilter("filters", key, _value);
};
return ( return (
<div> <div>
<FilterHeader <FilterHeader
title={"labels"} title={`Labels (${issueFilterStore?.projectLabels?.length || 0})`}
isPreviewEnabled={previewEnabled} isPreviewEnabled={previewEnabled}
handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)} handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)}
/> />
@ -42,6 +52,7 @@ export const FilterLabels = observer(() => {
? true ? true
: false : false
} }
onClick={() => handleFilter("labels", _label?.id)}
icon={<LabelIcons color={_label.color} />} icon={<LabelIcons color={_label.color} />}
title={_label.name} title={_label.name}
/> />

View File

@ -56,10 +56,20 @@ export const FilterPriority = observer(() => {
const [previewEnabled, setPreviewEnabled] = React.useState(true); const [previewEnabled, setPreviewEnabled] = React.useState(true);
const handleFilter = (key: string, value: string) => {
const _value =
issueFilterStore?.userFilters?.filters?.[key] != null
? issueFilterStore?.userFilters?.filters?.[key].includes(value)
? issueFilterStore?.userFilters?.filters?.[key].filter((p: string) => p != value)
: [...issueFilterStore?.userFilters?.filters?.[key], value]
: [value];
issueFilterStore.handleUserFilter("filters", key, _value);
};
return ( return (
<div> <div>
<FilterHeader <FilterHeader
title={"Priority"} title={`Priority (${issueFilterStore?.issueRenderFilters?.priority.length || 0})`}
isPreviewEnabled={previewEnabled} isPreviewEnabled={previewEnabled}
handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)} handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)}
/> />
@ -76,14 +86,15 @@ export const FilterPriority = observer(() => {
? true ? true
: false : false
} }
onClick={() => handleFilter("priority", _priority?.key)}
icon={<PriorityIcons priority={_priority.key} />} icon={<PriorityIcons priority={_priority.key} />}
title={_priority.title} title={_priority.title}
/> />
))} ))}
<div className="pl-[32px] flex items-center gap-2 py-[6px] text-xs text-custom-primary-100"> <div className="pl-[32px] flex items-center gap-2 py-[6px] text-xs text-custom-primary-100">
<div>View more</div>
<div>View less</div> <div>View less</div>
<div>View all</div> <div>View more</div>
{/* TODO: <div>View all</div> */}
</div> </div>
</div> </div>
)} )}

View File

@ -16,10 +16,15 @@ export const FilterStartDate = observer(() => {
const [previewEnabled, setPreviewEnabled] = React.useState(true); const [previewEnabled, setPreviewEnabled] = React.useState(true);
const handleFilter = (key: string, value: string) => {
const _value = [value];
issueFilterStore.handleUserFilter("filters", key, _value);
};
return ( return (
<div> <div>
<FilterHeader <FilterHeader
title={"Start Date"} title={`Start Date (${issueFilterStore?.issueRenderFilters?.start_date?.length})`}
isPreviewEnabled={previewEnabled} isPreviewEnabled={previewEnabled}
handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)} handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)}
/> />
@ -30,7 +35,13 @@ export const FilterStartDate = observer(() => {
issueFilterStore?.issueRenderFilters?.start_date.map((_startDate) => ( issueFilterStore?.issueRenderFilters?.start_date.map((_startDate) => (
<FilterOption <FilterOption
key={_startDate?.key} key={_startDate?.key}
isChecked={false} isChecked={
issueFilterStore?.userFilters?.filters?.start_date != null &&
issueFilterStore?.userFilters?.filters?.start_date.includes(_startDate?.key)
? true
: false
}
onClick={() => handleFilter("start_date", _startDate?.key)}
title={_startDate.title} title={_startDate.title}
multiple={false} multiple={false}
/> />

View File

@ -89,10 +89,20 @@ export const FilterStateGroup = observer(() => {
const [previewEnabled, setPreviewEnabled] = React.useState(true); const [previewEnabled, setPreviewEnabled] = React.useState(true);
const handleFilter = (key: string, value: string) => {
const _value =
issueFilterStore?.userFilters?.filters?.[key] != null
? issueFilterStore?.userFilters?.filters?.[key].includes(value)
? issueFilterStore?.userFilters?.filters?.[key].filter((p: string) => p != value)
: [...issueFilterStore?.userFilters?.filters?.[key], value]
: [value];
issueFilterStore.handleUserFilter("filters", key, _value);
};
return ( return (
<div> <div>
<FilterHeader <FilterHeader
title={"State Group"} title={`State Group (${issueFilterStore?.issueRenderFilters?.state_group?.length})`}
isPreviewEnabled={previewEnabled} isPreviewEnabled={previewEnabled}
handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)} handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)}
/> />
@ -109,6 +119,7 @@ export const FilterStateGroup = observer(() => {
? true ? true
: false : false
} }
onClick={() => handleFilter("state_group", _stateGroup?.key)}
icon={<StateGroupIcons stateGroup={_stateGroup.key} />} icon={<StateGroupIcons stateGroup={_stateGroup.key} />}
title={_stateGroup.title} title={_stateGroup.title}
/> />

View File

@ -19,10 +19,26 @@ export const FilterState = observer(() => {
const [previewEnabled, setPreviewEnabled] = React.useState(true); const [previewEnabled, setPreviewEnabled] = React.useState(true);
const handleFilter = (key: string, value: string) => {
const _value =
issueFilterStore?.userFilters?.filters?.[key] != null
? issueFilterStore?.userFilters?.filters?.[key].includes(value)
? issueFilterStore?.userFilters?.filters?.[key].filter((p: string) => p != value)
: [...issueFilterStore?.userFilters?.filters?.[key], value]
: [value];
issueFilterStore.handleUserFilter("filters", key, _value);
};
const countAllState = issueStateGroupKeys
.map((_stateGroup) => issueFilterStore?.projectStates?.[_stateGroup].length || 0)
.reduce((sum: number, currentValue: number) => sum + currentValue, 0);
console.log("countAllState", countAllState);
return ( return (
<div> <div>
<FilterHeader <FilterHeader
title={"State"} title={`State (${countAllState})`}
isPreviewEnabled={previewEnabled} isPreviewEnabled={previewEnabled}
handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)} handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)}
/> />
@ -42,6 +58,7 @@ export const FilterState = observer(() => {
? true ? true
: false : false
} }
onClick={() => handleFilter("state", _state?.id)}
icon={<StateGroupIcons stateGroup={_stateGroup} color={_state?.color} />} icon={<StateGroupIcons stateGroup={_stateGroup} color={_state?.color} />}
title={_state?.name} title={_state?.name}
/> />

View File

@ -16,10 +16,15 @@ export const FilterTargetDate = observer(() => {
const [previewEnabled, setPreviewEnabled] = React.useState(true); const [previewEnabled, setPreviewEnabled] = React.useState(true);
const handleFilter = (key: string, value: string) => {
const _value = [value];
issueFilterStore.handleUserFilter("filters", key, _value);
};
return ( return (
<div> <div>
<FilterHeader <FilterHeader
title={"Target Date"} title={`Target Date (${issueFilterStore?.issueRenderFilters?.due_date.length})`}
isPreviewEnabled={previewEnabled} isPreviewEnabled={previewEnabled}
handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)} handleIsPreviewEnabled={() => setPreviewEnabled(!previewEnabled)}
/> />
@ -30,7 +35,13 @@ export const FilterTargetDate = observer(() => {
issueFilterStore?.issueRenderFilters?.due_date.map((_targetDate) => ( issueFilterStore?.issueRenderFilters?.due_date.map((_targetDate) => (
<FilterOption <FilterOption
key={_targetDate?.key} key={_targetDate?.key}
isChecked={false} isChecked={
issueFilterStore?.userFilters?.filters?.target_date != null &&
issueFilterStore?.userFilters?.filters?.target_date.includes(_targetDate?.key)
? true
: false
}
onClick={() => handleFilter("target_date", _targetDate?.key)}
title={_targetDate.title} title={_targetDate.title}
multiple={false} multiple={false}
/> />

View File

@ -7,10 +7,20 @@ interface IFilterOption {
icon?: React.ReactNode; icon?: React.ReactNode;
title: string; title: string;
multiple?: boolean; multiple?: boolean;
onClick?: () => void;
} }
export const FilterOption = ({ isChecked, icon, title, multiple = true }: IFilterOption) => ( export const FilterOption = ({
<div className="flex items-center gap-3 cursor-pointer rounded p-[6px] py-[5px] transition-all hover:bg-custom-border-100"> isChecked,
icon,
title,
multiple = true,
onClick,
}: IFilterOption) => (
<div
className="flex items-center gap-3 cursor-pointer rounded p-[6px] py-[5px] transition-all hover:bg-custom-border-100"
onClick={onClick}
>
<div <div
className={`flex-shrink-0 w-[14px] h-[14px] flex justify-center items-center border border-custom-border-300 bg-custom-background-90 ${ className={`flex-shrink-0 w-[14px] h-[14px] flex justify-center items-center border border-custom-border-300 bg-custom-background-90 ${
isChecked ? `bg-custom-primary-300 text-white` : `` isChecked ? `bg-custom-primary-300 text-white` : ``

View File

@ -40,55 +40,22 @@ export const LayoutSelection = observer(() => {
}, },
]; ];
const handleLayoutSelection = (layout: TIssueLayouts) => { const handleLayoutSelection = (_layoutKey: string) => {
if (!issueFilterStore.workspaceId) return; issueFilterStore.handleUserFilter("display_filters", "layout", _layoutKey);
if (issueFilterStore.issueView === "my_issues") {
issueStore.getMyIssuesAsync(issueFilterStore.workspaceId, issueFilterStore.issueView, layout);
return;
}
if (!issueFilterStore.projectId) return;
if (issueFilterStore.issueView === "issues") {
issueStore.getProjectIssuesAsync(
issueFilterStore.workspaceId,
issueFilterStore.projectId,
issueFilterStore.issueView,
layout
);
return;
}
if (issueFilterStore.issueView === "modules" && issueFilterStore.moduleId) {
issueStore.getIssuesForModulesAsync(
issueFilterStore.workspaceId,
issueFilterStore.projectId,
issueFilterStore.moduleId,
issueFilterStore.issueView,
layout
);
return;
}
if (issueFilterStore.issueView === "cycles" && issueFilterStore.cycleId) {
issueStore.getIssuesForCyclesAsync(
issueFilterStore.workspaceId,
issueFilterStore.projectId,
issueFilterStore.cycleId,
issueFilterStore.issueView,
layout
);
return;
}
if (issueFilterStore.issueView === "views" && issueFilterStore.viewId) {
issueStore.getIssuesForViewsAsync(
issueFilterStore.workspaceId,
issueFilterStore.projectId,
issueFilterStore.viewId,
issueFilterStore.issueView,
layout
);
return;
}
}; };
console.log("----");
console.log("workspace_id", issueFilterStore.workspaceId);
console.log("project_id", issueFilterStore.projectId);
console.log("module_id", issueFilterStore.moduleId);
console.log("cycle_id", issueFilterStore.cycleId);
console.log("view_id", issueFilterStore.viewId);
console.log("issue_view", issueFilterStore.issueView);
console.log("issue_layout", issueFilterStore.issueLayout);
console.log("----");
return ( return (
<div className="relative flex items-center p-1 rounded gap-1 bg-custom-background-80"> <div className="relative flex items-center p-1 rounded gap-1 bg-custom-background-80">
{layoutSelectionFilters.map((_layout) => ( {layoutSelectionFilters.map((_layout) => (

View File

@ -1,6 +1,4 @@
import React from "react"; import React from "react";
// swr
import useSWR from "swr";
// components // components
import { IssueKanBanViewRoot } from "components/issue-layouts/kanban"; import { IssueKanBanViewRoot } from "components/issue-layouts/kanban";
import { LayoutSelection } from "components/issue-layouts/layout-selection"; import { LayoutSelection } from "components/issue-layouts/layout-selection";
@ -18,140 +16,29 @@ const KanBanViewRoot = () => {
const projectSlug: string = "08d59d96-9dfb-40e5-aa30-ecc66319450f"; const projectSlug: string = "08d59d96-9dfb-40e5-aa30-ecc66319450f";
const moduleSlug: string = "05613afc-29ea-4fd8-a025-a3cdfed209d1"; const moduleSlug: string = "05613afc-29ea-4fd8-a025-a3cdfed209d1";
const cycleSlug: string = "1f66a767-00d1-422c-8f8f-6925282b7249"; const cycleSlug: string = "1f66a767-00d1-422c-8f8f-6925282b7249";
const viewSlug: string = "1f66a767-00d1-422c-8f8f-6925282b7249"; const viewSlug: string = "64e6ecca-80ca-4f7c-8476-d650fca9d5b9";
const store: RootStore = useMobxStore(); const store: RootStore = useMobxStore();
const { issueFilters: issueFilterStore, issueView: issueViewStore } = store; const { issueFilters: issueFilterStore, issueView: issueViewStore } = store;
React.useEffect(() => { React.useEffect(() => {
const init = async () => { const init = async () => {
console.log("started--->");
// my issues under a workspace // my issues under a workspace
// console.log("started--->"); // await issueViewStore.getMyIssuesAsync(workspaceSlug);
// await issueViewStore.getMyIssuesAsync(workspaceSlug, "my_issues", "list");
// await issueViewStore.getMyIssuesAsync(workspaceSlug, "my_issues", "kanban");
// await issueViewStore.getMyIssuesAsync(workspaceSlug, "my_issues", "calendar");
// await issueViewStore.getMyIssuesAsync(workspaceSlug, "my_issues", "spreadsheet");
// await issueViewStore.getMyIssuesAsync(workspaceSlug, "my_issues", "gantt");
// project issues under and workspace and project // project issues under and workspace and project
// await issueViewStore.getProjectIssuesAsync(workspaceSlug, projectSlug, "issues", "list"); await issueViewStore.getProjectIssuesAsync(workspaceSlug, projectSlug);
await issueViewStore.getProjectIssuesAsync(workspaceSlug, projectSlug, "issues", "kanban");
// await issueViewStore.getProjectIssuesAsync(workspaceSlug, projectSlug, "issues", "calendar");
// await issueViewStore.getProjectIssuesAsync(
// workspaceSlug,
// projectSlug,
// "issues",
// "spreadsheet"
// );
// await issueViewStore.getProjectIssuesAsync(workspaceSlug, projectSlug, "issues", "gantt");
// module issues under and workspace and project // module issues under and workspace and project
// await issueViewStore.getIssuesForModulesAsync( // await issueViewStore.getIssuesForModulesAsync(workspaceSlug, projectSlug, moduleSlug);
// workspaceSlug,
// projectSlug,
// moduleSlug,
// "modules",
// "list"
// );
// await issueViewStore.getIssuesForModulesAsync(
// workspaceSlug,
// projectSlug,
// moduleSlug,
// "modules",
// "kanban"
// );
// await issueViewStore.getIssuesForModulesAsync(
// workspaceSlug,
// projectSlug,
// moduleSlug,
// "modules",
// "calendar"
// );
// await issueViewStore.getIssuesForModulesAsync(
// workspaceSlug,
// projectSlug,
// moduleSlug,
// "modules",
// "spreadsheet"
// );
// await issueViewStore.getIssuesForModulesAsync(
// workspaceSlug,
// projectSlug,
// moduleSlug,
// "modules",
// "gantt"
// );
// cycle issues under and workspace and project // cycle issues under and workspace and project
// await issueViewStore.getIssuesForCyclesAsync( // await issueViewStore.getIssuesForCyclesAsync(workspaceSlug, projectSlug, cycleSlug);
// workspaceSlug,
// projectSlug,
// cycleSlug,
// "cycles",
// "list"
// );
// await issueViewStore.getIssuesForCyclesAsync(
// workspaceSlug,
// projectSlug,
// cycleSlug,
// "cycles",
// "kanban"
// );
// await issueViewStore.getIssuesForCyclesAsync(
// workspaceSlug,
// projectSlug,
// cycleSlug,
// "cycles",
// "calendar"
// );
// await issueViewStore.getIssuesForCyclesAsync(
// workspaceSlug,
// projectSlug,
// cycleSlug,
// "cycles",
// "spreadsheet"
// );
// await issueViewStore.getIssuesForCyclesAsync(
// workspaceSlug,
// projectSlug,
// cycleSlug,
// "cycles",
// "gantt"
// );
// cycle issues under and workspace and project // cycle issues under and workspace and project
// await issueViewStore.getIssuesForViewsAsync( // await issueViewStore.getIssuesForViewsAsync(workspaceSlug, projectSlug, viewSlug);
// workspaceSlug, console.log("ended--->");
// projectSlug,
// viewSlug,
// "views",
// "list"
// );
// await issueViewStore.getIssuesForViewsAsync(
// workspaceSlug,
// projectSlug,
// viewSlug,
// "views",
// "kanban"
// );
// await issueViewStore.getIssuesForViewsAsync(
// workspaceSlug,
// projectSlug,
// viewSlug,
// "views",
// "calendar"
// );
// await issueViewStore.getIssuesForViewsAsync(
// workspaceSlug,
// projectSlug,
// viewSlug,
// "views",
// "spreadsheet"
// );
// await issueViewStore.getIssuesForViewsAsync(
// workspaceSlug,
// projectSlug,
// viewSlug,
// "views",
// "gantt"
// );
// console.log("ended--->");
}; };
init(); init();
@ -160,10 +47,7 @@ const KanBanViewRoot = () => {
return ( return (
<div className="w-screen min-h-[600px] h-screen"> <div className="w-screen min-h-[600px] h-screen">
<div className="w-full h-full relative flex flex-col overflow-hidden"> <div className="w-full h-full relative flex flex-col overflow-hidden">
<div <div className="flex-shrink-0 h-[60px] border-b border-gray-200">
className="flex-shrink-0 h-[60px] border-b border-gray-200"
// style={{ writingMode: "vertical-lr" }}
>
<div className="w-full h-full p-2 px-5 relative flex justify-between items-center gap-2"> <div className="w-full h-full p-2 px-5 relative flex justify-between items-center gap-2">
<div> <div>
<div>Filter Header</div> <div>Filter Header</div>
@ -179,6 +63,7 @@ const KanBanViewRoot = () => {
</div> </div>
</div> </div>
</div> </div>
<div className="flex-shrink-0 border-b border-gray-200">Hello</div>
<div className="w-full h-full relative overflow-hidden"> <div className="w-full h-full relative overflow-hidden">
<IssueKanBanViewRoot /> <IssueKanBanViewRoot />
</div> </div>

View File

@ -11,7 +11,7 @@ const { NEXT_PUBLIC_API_BASE_URL } = process.env;
const trackEvent = const trackEvent =
process.env.NEXT_PUBLIC_TRACK_EVENTS === "true" || process.env.NEXT_PUBLIC_TRACK_EVENTS === "1"; process.env.NEXT_PUBLIC_TRACK_EVENTS === "true" || process.env.NEXT_PUBLIC_TRACK_EVENTS === "1";
class ViewServices extends APIService { export class ViewServices extends APIService {
constructor() { constructor() {
super(NEXT_PUBLIC_API_BASE_URL || "http://localhost:8000"); super(NEXT_PUBLIC_API_BASE_URL || "http://localhost:8000");
} }

View File

@ -48,37 +48,22 @@ export interface IIssueViewStore {
// computed // computed
getIssues: IIssues | null | undefined; getIssues: IIssues | null | undefined;
// actions // actions
getMyIssuesAsync: ( getMyIssuesAsync: (workspaceId: string) => null | Promise<any>;
workspaceId: string, getProjectIssuesAsync: (workspaceId: string, projectId: string) => null | Promise<any>;
_view: TIssueViews,
_layout: TIssueLayouts
) => null | Promise<any>;
getProjectIssuesAsync: (
workspaceId: string,
projectId: string,
_view: TIssueViews,
_layout: TIssueLayouts
) => null | Promise<any>;
getIssuesForModulesAsync: ( getIssuesForModulesAsync: (
workspaceId: string, workspaceId: string,
projectId: string, projectId: string,
moduleId: string, moduleId: string
_view: TIssueViews,
_layout: TIssueLayouts
) => null | Promise<any>; ) => null | Promise<any>;
getIssuesForCyclesAsync: ( getIssuesForCyclesAsync: (
workspaceId: string, workspaceId: string,
projectId: string, projectId: string,
cycleId: string, cycleId: string
_view: TIssueViews,
_layout: TIssueLayouts
) => null | Promise<any>; ) => null | Promise<any>;
getIssuesForViewsAsync: ( getIssuesForViewsAsync: (
workspaceId: string, workspaceId: string,
projectId: string, projectId: string,
viewId: string, viewId: string
_view: TIssueViews,
_layout: TIssueLayouts
) => null | Promise<any>; ) => null | Promise<any>;
} }
@ -159,7 +144,7 @@ class IssueViewStore implements IIssueViewStore {
} }
// fetching my issues // fetching my issues
getMyIssuesAsync = async (workspaceId: string, _view: TIssueViews, _layout: TIssueLayouts) => { getMyIssuesAsync = async (workspaceId: string) => {
try { try {
this.loader = true; this.loader = true;
this.error = null; this.error = null;
@ -171,8 +156,7 @@ class IssueViewStore implements IIssueViewStore {
null, null,
null, null,
null, null,
_view, "my_issues"
_layout
); );
const issuesResponse = await this.userService.userIssues(workspaceId, filteredParams); const issuesResponse = await this.userService.userIssues(workspaceId, filteredParams);
@ -183,7 +167,8 @@ class IssueViewStore implements IIssueViewStore {
...this?.issues[workspaceId], ...this?.issues[workspaceId],
my_issues: { my_issues: {
...this?.issues[workspaceId]?.my_issues, ...this?.issues[workspaceId]?.my_issues,
[_layout as string]: issuesResponse, [this.rootStore?.issueFilters?.userFilters?.display_filters?.layout as string]:
issuesResponse,
}, },
}, },
}; };
@ -205,12 +190,7 @@ class IssueViewStore implements IIssueViewStore {
}; };
// fetching project issues // fetching project issues
getProjectIssuesAsync = async ( getProjectIssuesAsync = async (workspaceId: string, projectId: string) => {
workspaceId: string,
projectId: string,
_view: TIssueViews,
_layout: TIssueLayouts
) => {
try { try {
this.loader = true; this.loader = true;
this.error = null; this.error = null;
@ -222,8 +202,7 @@ class IssueViewStore implements IIssueViewStore {
null, null,
null, null,
null, null,
_view, "issues"
_layout
); );
const issuesResponse = await this.issueService.getIssuesWithParams( const issuesResponse = await this.issueService.getIssuesWithParams(
workspaceId, workspaceId,
@ -242,7 +221,8 @@ class IssueViewStore implements IIssueViewStore {
...this?.issues?.[workspaceId]?.project_issues?.[projectId], ...this?.issues?.[workspaceId]?.project_issues?.[projectId],
issues: { issues: {
...this?.issues[workspaceId]?.project_issues?.[projectId]?.issues, ...this?.issues[workspaceId]?.project_issues?.[projectId]?.issues,
[_layout as string]: issuesResponse, [this.rootStore?.issueFilters?.userFilters?.display_filters?.layout as string]:
issuesResponse,
}, },
}, },
}, },
@ -266,13 +246,7 @@ class IssueViewStore implements IIssueViewStore {
}; };
// fetching project issues for modules // fetching project issues for modules
getIssuesForModulesAsync = async ( getIssuesForModulesAsync = async (workspaceId: string, projectId: string, moduleId: string) => {
workspaceId: string,
projectId: string,
moduleId: string,
_view: TIssueViews,
_layout: TIssueLayouts
) => {
try { try {
this.loader = true; this.loader = true;
this.error = null; this.error = null;
@ -288,8 +262,7 @@ class IssueViewStore implements IIssueViewStore {
moduleId, moduleId,
null, null,
null, null,
_view, "modules"
_layout
); );
const issuesResponse = await this.modulesService.getModuleIssuesWithParams( const issuesResponse = await this.modulesService.getModuleIssuesWithParams(
workspaceId, workspaceId,
@ -311,7 +284,8 @@ class IssueViewStore implements IIssueViewStore {
...this?.issues[workspaceId]?.project_issues?.[projectId]?.modules, ...this?.issues[workspaceId]?.project_issues?.[projectId]?.modules,
[moduleId]: { [moduleId]: {
...this?.issues[workspaceId]?.project_issues?.[projectId]?.modules?.[moduleId], ...this?.issues[workspaceId]?.project_issues?.[projectId]?.modules?.[moduleId],
[_layout as string]: issuesResponse, [this.rootStore?.issueFilters?.userFilters?.display_filters?.layout as string]:
issuesResponse,
}, },
}, },
}, },
@ -336,13 +310,7 @@ class IssueViewStore implements IIssueViewStore {
}; };
// fetching project issues for cycles // fetching project issues for cycles
getIssuesForCyclesAsync = async ( getIssuesForCyclesAsync = async (workspaceId: string, projectId: string, cycleId: string) => {
workspaceId: string,
projectId: string,
cycleId: string,
_view: TIssueViews,
_layout: TIssueLayouts
) => {
try { try {
this.loader = true; this.loader = true;
this.error = null; this.error = null;
@ -358,8 +326,7 @@ class IssueViewStore implements IIssueViewStore {
null, null,
cycleId, cycleId,
null, null,
_view, "cycles"
_layout
); );
const issuesResponse = await this.cyclesService.getCycleIssuesWithParams( const issuesResponse = await this.cyclesService.getCycleIssuesWithParams(
workspaceId, workspaceId,
@ -381,7 +348,8 @@ class IssueViewStore implements IIssueViewStore {
...this?.issues[workspaceId]?.project_issues?.[projectId]?.cycles, ...this?.issues[workspaceId]?.project_issues?.[projectId]?.cycles,
[cycleId]: { [cycleId]: {
...this?.issues[workspaceId]?.project_issues?.[projectId]?.cycles?.[cycleId], ...this?.issues[workspaceId]?.project_issues?.[projectId]?.cycles?.[cycleId],
[_layout as string]: issuesResponse, [this.rootStore?.issueFilters?.userFilters?.display_filters?.layout as string]:
issuesResponse,
}, },
}, },
}, },
@ -406,13 +374,7 @@ class IssueViewStore implements IIssueViewStore {
}; };
// fetching project issues for views // fetching project issues for views
getIssuesForViewsAsync = async ( getIssuesForViewsAsync = async (workspaceId: string, projectId: string, viewId: string) => {
workspaceId: string,
projectId: string,
viewId: string,
_view: TIssueViews,
_layout: TIssueLayouts
) => {
try { try {
this.loader = true; this.loader = true;
this.error = null; this.error = null;
@ -424,8 +386,7 @@ class IssueViewStore implements IIssueViewStore {
null, null,
null, null,
viewId, viewId,
_view, "views"
_layout
); );
const issuesResponse = await this.issueService.getIssuesWithParams( const issuesResponse = await this.issueService.getIssuesWithParams(
workspaceId, workspaceId,
@ -446,7 +407,8 @@ class IssueViewStore implements IIssueViewStore {
...this?.issues[workspaceId]?.project_issues?.[projectId]?.views, ...this?.issues[workspaceId]?.project_issues?.[projectId]?.views,
[viewId]: { [viewId]: {
...this?.issues[workspaceId]?.project_issues?.[projectId]?.views?.[viewId], ...this?.issues[workspaceId]?.project_issues?.[projectId]?.views?.[viewId],
[_layout as string]: issuesResponse, [this.rootStore?.issueFilters?.userFilters?.display_filters?.layout as string]:
issuesResponse,
}, },
}, },
}, },

File diff suppressed because it is too large Load Diff