= observer((props: Props) =
value={issue.label_ids}
defaultOptions={defaultLabelOptions}
onChange={(data) => onChange(issue, { label_ids: data }, { changed_property: "labels", change_details: data })}
- className="h-11 w-full border-b-[0.5px] border-custom-border-200 hover:bg-custom-background-80"
+ className="h-11 w-full border-b-[0.5px] border-neutral-border-medium hover:bg-custom-background-80"
buttonClassName="px-2.5 h-full"
hideDropdownArrow
maxRender={1}
diff --git a/web/components/issues/issue-layouts/spreadsheet/issue-column.tsx b/web/components/issues/issue-layouts/spreadsheet/issue-column.tsx
index 5d2e62fa5..b2d22049c 100644
--- a/web/components/issues/issue-layouts/spreadsheet/issue-column.tsx
+++ b/web/components/issues/issue-layouts/spreadsheet/issue-column.tsx
@@ -38,7 +38,7 @@ export const IssueColumn = observer((props: Props) => {
>
{
{/* first column/ issue name and key column */}
{
shouldRenderProperty={shouldRenderProperty}
>
|
diff --git a/web/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx b/web/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx
index 828977e64..1266e1691 100644
--- a/web/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx
+++ b/web/components/issues/issue-layouts/spreadsheet/spreadsheet-header.tsx
@@ -22,7 +22,7 @@ export const SpreadsheetHeader = (props: Props) => {
diff --git a/web/components/issues/issues-mobile-header.tsx b/web/components/issues/issues-mobile-header.tsx
index 2338e1848..3fd6cff84 100644
--- a/web/components/issues/issues-mobile-header.tsx
+++ b/web/components/issues/issues-mobile-header.tsx
@@ -14,153 +14,153 @@ import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOption
import { ProjectAnalyticsModal } from "components/analytics";
export const IssuesMobileHeader = () => {
- const layouts = [
- { key: "list", title: "List", icon: List },
- { key: "kanban", title: "Kanban", icon: Kanban },
- { key: "calendar", title: "Calendar", icon: Calendar },
- ];
- const [analyticsModal, setAnalyticsModal] = useState(false);
- const { workspaceSlug, projectId } = router.query as {
- workspaceSlug: string;
- projectId: string;
- };
- const { currentProjectDetails } = useProject();
- const { projectStates } = useProjectState();
- const { projectLabels } = useLabel();
+ const layouts = [
+ { key: "list", title: "List", icon: List },
+ { key: "kanban", title: "Kanban", icon: Kanban },
+ { key: "calendar", title: "Calendar", icon: Calendar },
+ ];
+ const [analyticsModal, setAnalyticsModal] = useState(false);
+ const { workspaceSlug, projectId } = router.query as {
+ workspaceSlug: string;
+ projectId: string;
+ };
+ const { currentProjectDetails } = useProject();
+ const { projectStates } = useProjectState();
+ const { projectLabels } = useLabel();
- // store hooks
- const {
- issuesFilter: { issueFilters, updateFilters },
- } = useIssues(EIssuesStoreType.PROJECT);
- const {
- project: { projectMemberIds },
- } = useMember();
- const activeLayout = issueFilters?.displayFilters?.layout;
+ // store hooks
+ const {
+ issuesFilter: { issueFilters, updateFilters },
+ } = useIssues(EIssuesStoreType.PROJECT);
+ const {
+ project: { projectMemberIds },
+ } = useMember();
+ const activeLayout = issueFilters?.displayFilters?.layout;
- const handleLayoutChange = useCallback(
- (layout: TIssueLayouts) => {
- if (!workspaceSlug || !projectId) return;
- updateFilters(workspaceSlug, projectId, EIssueFilterType.DISPLAY_FILTERS, { layout: layout });
- },
- [workspaceSlug, projectId, updateFilters]
- );
+ const handleLayoutChange = useCallback(
+ (layout: TIssueLayouts) => {
+ if (!workspaceSlug || !projectId) return;
+ updateFilters(workspaceSlug, projectId, EIssueFilterType.DISPLAY_FILTERS, { layout: layout });
+ },
+ [workspaceSlug, projectId, updateFilters]
+ );
- const handleFiltersUpdate = useCallback(
- (key: keyof IIssueFilterOptions, value: string | string[]) => {
- if (!workspaceSlug || !projectId) return;
- const newValues = issueFilters?.filters?.[key] ?? [];
+ const handleFiltersUpdate = useCallback(
+ (key: keyof IIssueFilterOptions, value: string | string[]) => {
+ if (!workspaceSlug || !projectId) return;
+ const newValues = issueFilters?.filters?.[key] ?? [];
- if (Array.isArray(value)) {
- value.forEach((val) => {
- if (!newValues.includes(val)) newValues.push(val);
- });
- } else {
- if (issueFilters?.filters?.[key]?.includes(value)) newValues.splice(newValues.indexOf(value), 1);
- else newValues.push(value);
+ if (Array.isArray(value)) {
+ value.forEach((val) => {
+ if (!newValues.includes(val)) newValues.push(val);
+ });
+ } else {
+ if (issueFilters?.filters?.[key]?.includes(value)) newValues.splice(newValues.indexOf(value), 1);
+ else newValues.push(value);
+ }
+
+ updateFilters(workspaceSlug, projectId, EIssueFilterType.FILTERS, { [key]: newValues });
+ },
+ [workspaceSlug, projectId, issueFilters, updateFilters]
+ );
+
+ const handleDisplayFilters = useCallback(
+ (updatedDisplayFilter: Partial) => {
+ if (!workspaceSlug || !projectId) return;
+ updateFilters(workspaceSlug, projectId, EIssueFilterType.DISPLAY_FILTERS, updatedDisplayFilter);
+ },
+ [workspaceSlug, projectId, updateFilters]
+ );
+
+ const handleDisplayProperties = useCallback(
+ (property: Partial) => {
+ if (!workspaceSlug || !projectId) return;
+ updateFilters(workspaceSlug, projectId, EIssueFilterType.DISPLAY_PROPERTIES, property);
+ },
+ [workspaceSlug, projectId, updateFilters]
+ );
+
+ return (
+ <>
+ setAnalyticsModal(false)}
+ projectDetails={currentProjectDetails ?? undefined}
+ />
+
+ Layout}
+ customButtonClassName="flex flex-grow justify-center text-custom-text-200 text-sm"
+ closeOnSelect
+ >
+ {layouts.map((layout, index) => (
+ {
+ handleLayoutChange(ISSUE_LAYOUTS[index].key);
+ }}
+ className="flex items-center gap-2"
+ >
+
+ {layout.title}
+
+ ))}
+
+
+
+ Filters
+
+
}
-
- updateFilters(workspaceSlug, projectId, EIssueFilterType.FILTERS, { [key]: newValues });
- },
- [workspaceSlug, projectId, issueFilters, updateFilters]
- );
-
- const handleDisplayFilters = useCallback(
- (updatedDisplayFilter: Partial) => {
- if (!workspaceSlug || !projectId) return;
- updateFilters(workspaceSlug, projectId, EIssueFilterType.DISPLAY_FILTERS, updatedDisplayFilter);
- },
- [workspaceSlug, projectId, updateFilters]
- );
-
- const handleDisplayProperties = useCallback(
- (property: Partial) => {
- if (!workspaceSlug || !projectId) return;
- updateFilters(workspaceSlug, projectId, EIssueFilterType.DISPLAY_PROPERTIES, property);
- },
- [workspaceSlug, projectId, updateFilters]
- );
-
- return (
- <>
- setAnalyticsModal(false)}
- projectDetails={currentProjectDetails ?? undefined}
+ >
+
-
- Layout}
- customButtonClassName="flex flex-grow justify-center text-custom-text-200 text-sm"
- closeOnSelect
- >
- {layouts.map((layout, index) => (
- {
- handleLayoutChange(ISSUE_LAYOUTS[index].key);
- }}
- className="flex items-center gap-2"
- >
-
- {layout.title}
-
- ))}
-
-
-
- Filters
-
-
- }
- >
-
-
-
-
-
- Display
-
-
- }
- >
-
-
-
+
+
+
+
+ Display
+
+
+ }
+ >
+
+
+
-
-
- >
- );
+
+
+ >
+ );
};
diff --git a/web/components/issues/sub-issues/root.tsx b/web/components/issues/sub-issues/root.tsx
index 99ff6255e..9c2e175d2 100644
--- a/web/components/issues/sub-issues/root.tsx
+++ b/web/components/issues/sub-issues/root.tsx
@@ -307,7 +307,7 @@ export const SubIssuesRoot: FC = observer((props) => {
{!disabled && (
{
setTrackElement("Issue detail add sub-issue");
handleIssueCrudState("create", parentIssueId, null);
@@ -316,7 +316,7 @@ export const SubIssuesRoot: FC = observer((props) => {
Add sub-issue
{
setTrackElement("Issue detail add sub-issue");
handleIssueCrudState("existing", parentIssueId, null);
diff --git a/web/components/modules/module-mobile-header.tsx b/web/components/modules/module-mobile-header.tsx
index e9ed56a8d..8deb7ba1f 100644
--- a/web/components/modules/module-mobile-header.tsx
+++ b/web/components/modules/module-mobile-header.tsx
@@ -9,154 +9,154 @@ import router from "next/router";
import { useCallback, useState } from "react";
export const ModuleMobileHeader = () => {
- const [analyticsModal, setAnalyticsModal] = useState(false);
- const { getModuleById } = useModule();
- const layouts = [
- { key: "list", title: "List", icon: List },
- { key: "kanban", title: "Kanban", icon: Kanban },
- { key: "calendar", title: "Calendar", icon: Calendar },
- ];
- const { workspaceSlug, projectId, moduleId } = router.query as {
- workspaceSlug: string;
- projectId: string;
- moduleId: string;
- };
- const moduleDetails = moduleId ? getModuleById(moduleId.toString()) : undefined;
+ const [analyticsModal, setAnalyticsModal] = useState(false);
+ const { getModuleById } = useModule();
+ const layouts = [
+ { key: "list", title: "List", icon: List },
+ { key: "kanban", title: "Kanban", icon: Kanban },
+ { key: "calendar", title: "Calendar", icon: Calendar },
+ ];
+ const { workspaceSlug, projectId, moduleId } = router.query as {
+ workspaceSlug: string;
+ projectId: string;
+ moduleId: string;
+ };
+ const moduleDetails = moduleId ? getModuleById(moduleId.toString()) : undefined;
- const {
- issuesFilter: { issueFilters, updateFilters },
- } = useIssues(EIssuesStoreType.MODULE);
- const activeLayout = issueFilters?.displayFilters?.layout;
- const { projectStates } = useProjectState();
- const { projectLabels } = useLabel();
- const {
- project: { projectMemberIds },
- } = useMember();
+ const {
+ issuesFilter: { issueFilters, updateFilters },
+ } = useIssues(EIssuesStoreType.MODULE);
+ const activeLayout = issueFilters?.displayFilters?.layout;
+ const { projectStates } = useProjectState();
+ const { projectLabels } = useLabel();
+ const {
+ project: { projectMemberIds },
+ } = useMember();
- const handleLayoutChange = useCallback(
- (layout: TIssueLayouts) => {
- if (!workspaceSlug || !projectId) return;
- updateFilters(workspaceSlug, projectId, EIssueFilterType.DISPLAY_FILTERS, { layout: layout }, moduleId);
- },
- [workspaceSlug, projectId, moduleId, updateFilters]
- );
+ const handleLayoutChange = useCallback(
+ (layout: TIssueLayouts) => {
+ if (!workspaceSlug || !projectId) return;
+ updateFilters(workspaceSlug, projectId, EIssueFilterType.DISPLAY_FILTERS, { layout: layout }, moduleId);
+ },
+ [workspaceSlug, projectId, moduleId, updateFilters]
+ );
- const handleFiltersUpdate = useCallback(
- (key: keyof IIssueFilterOptions, value: string | string[]) => {
- if (!workspaceSlug || !projectId) return;
- const newValues = issueFilters?.filters?.[key] ?? [];
+ const handleFiltersUpdate = useCallback(
+ (key: keyof IIssueFilterOptions, value: string | string[]) => {
+ if (!workspaceSlug || !projectId) return;
+ const newValues = issueFilters?.filters?.[key] ?? [];
- if (Array.isArray(value)) {
- value.forEach((val) => {
- if (!newValues.includes(val)) newValues.push(val);
- });
- } else {
- if (issueFilters?.filters?.[key]?.includes(value)) newValues.splice(newValues.indexOf(value), 1);
- else newValues.push(value);
+ if (Array.isArray(value)) {
+ value.forEach((val) => {
+ if (!newValues.includes(val)) newValues.push(val);
+ });
+ } else {
+ if (issueFilters?.filters?.[key]?.includes(value)) newValues.splice(newValues.indexOf(value), 1);
+ else newValues.push(value);
+ }
+
+ updateFilters(workspaceSlug, projectId, EIssueFilterType.FILTERS, { [key]: newValues }, moduleId);
+ },
+ [workspaceSlug, projectId, moduleId, issueFilters, updateFilters]
+ );
+
+ const handleDisplayFilters = useCallback(
+ (updatedDisplayFilter: Partial ) => {
+ if (!workspaceSlug || !projectId) return;
+ updateFilters(workspaceSlug, projectId, EIssueFilterType.DISPLAY_FILTERS, updatedDisplayFilter, moduleId);
+ },
+ [workspaceSlug, projectId, moduleId, updateFilters]
+ );
+
+ const handleDisplayProperties = useCallback(
+ (property: Partial) => {
+ if (!workspaceSlug || !projectId) return;
+ updateFilters(workspaceSlug, projectId, EIssueFilterType.DISPLAY_PROPERTIES, property, moduleId);
+ },
+ [workspaceSlug, projectId, moduleId, updateFilters]
+ );
+
+ return (
+
+ setAnalyticsModal(false)}
+ moduleDetails={moduleDetails ?? undefined}
+ />
+
+ Layout}
+ customButtonClassName="flex flex-grow justify-center text-custom-text-200 text-sm"
+ closeOnSelect
+ >
+ {layouts.map((layout, index) => (
+ {
+ handleLayoutChange(ISSUE_LAYOUTS[index].key);
+ }}
+ className="flex items-center gap-2"
+ >
+
+ {layout.title}
+
+ ))}
+
+
+
+ Filters
+
+
}
-
- updateFilters(workspaceSlug, projectId, EIssueFilterType.FILTERS, { [key]: newValues }, moduleId);
- },
- [workspaceSlug, projectId, moduleId, issueFilters, updateFilters]
- );
-
- const handleDisplayFilters = useCallback(
- (updatedDisplayFilter: Partial) => {
- if (!workspaceSlug || !projectId) return;
- updateFilters(workspaceSlug, projectId, EIssueFilterType.DISPLAY_FILTERS, updatedDisplayFilter, moduleId);
- },
- [workspaceSlug, projectId, moduleId, updateFilters]
- );
-
- const handleDisplayProperties = useCallback(
- (property: Partial) => {
- if (!workspaceSlug || !projectId) return;
- updateFilters(workspaceSlug, projectId, EIssueFilterType.DISPLAY_PROPERTIES, property, moduleId);
- },
- [workspaceSlug, projectId, moduleId, updateFilters]
- );
-
- return (
-
- setAnalyticsModal(false)}
- moduleDetails={moduleDetails ?? undefined}
+ >
+
-
- Layout}
- customButtonClassName="flex flex-grow justify-center text-custom-text-200 text-sm"
- closeOnSelect
- >
- {layouts.map((layout, index) => (
- {
- handleLayoutChange(ISSUE_LAYOUTS[index].key);
- }}
- className="flex items-center gap-2"
- >
-
- {layout.title}
-
- ))}
-
-
-
- Filters
-
-
- }
- >
-
-
-
-
-
- Display
-
-
- }
- >
-
-
-
-
-
-
+
- );
+
+
+ Display
+
+
+ }
+ >
+
+
+
+
+
+
+
+ );
};
diff --git a/web/components/workspace/sidebar-dropdown.tsx b/web/components/workspace/sidebar-dropdown.tsx
index afbc5a9b2..7dcc72b06 100644
--- a/web/components/workspace/sidebar-dropdown.tsx
+++ b/web/components/workspace/sidebar-dropdown.tsx
@@ -291,7 +291,7 @@ export const WorkspaceSidebarDropdown = observer(() => {
>
= observer(() => {
return (
| | |