From 8d5d0422e9da29bc5ccce84685514010465c7f22 Mon Sep 17 00:00:00 2001
From: rahulramesha <71900764+rahulramesha@users.noreply.github.com>
Date: Fri, 28 Jun 2024 16:44:15 +0530
Subject: [PATCH] chore, make core changes for Advanced views (#4962)
---
web/ce/components/views/access-controller.tsx | 2 +
.../views/filters/access-filter.tsx | 2 +
web/core/components/common/access-field.tsx | 44 +++++++++++++++++++
.../roots/global-view-root.tsx | 2 +
.../roots/project-view-root.tsx | 2 +
.../components/pages/modals/page-form.tsx | 35 ++++-----------
.../views/filters/filter-selection.tsx | 12 +++++
web/core/components/views/form.tsx | 5 +++
web/core/components/workspace/views/form.tsx | 6 ++-
web/ee/components/views/access-controller.tsx | 1 +
.../views/filters/access-filter.tsx | 1 +
11 files changed, 85 insertions(+), 27 deletions(-)
create mode 100644 web/ce/components/views/access-controller.tsx
create mode 100644 web/ce/components/views/filters/access-filter.tsx
create mode 100644 web/core/components/common/access-field.tsx
create mode 100644 web/ee/components/views/access-controller.tsx
create mode 100644 web/ee/components/views/filters/access-filter.tsx
diff --git a/web/ce/components/views/access-controller.tsx b/web/ce/components/views/access-controller.tsx
new file mode 100644
index 000000000..8eefff027
--- /dev/null
+++ b/web/ce/components/views/access-controller.tsx
@@ -0,0 +1,2 @@
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+export const AccessController = (props: any) => <>>;
diff --git a/web/ce/components/views/filters/access-filter.tsx b/web/ce/components/views/filters/access-filter.tsx
new file mode 100644
index 000000000..8c3232d47
--- /dev/null
+++ b/web/ce/components/views/filters/access-filter.tsx
@@ -0,0 +1,2 @@
+// eslint-disable-next-line @typescript-eslint/no-unused-vars
+export const FilterByAccess = (props: any) => <>>;
diff --git a/web/core/components/common/access-field.tsx b/web/core/components/common/access-field.tsx
new file mode 100644
index 000000000..dd7606a3a
--- /dev/null
+++ b/web/core/components/common/access-field.tsx
@@ -0,0 +1,44 @@
+import { LucideIcon } from "lucide-react";
+import { cn } from "@plane/editor";
+import { Tooltip } from "@plane/ui";
+
+type Props = {
+ onChange: (value: number) => void;
+ value: number;
+ accessSpecifiers: {
+ key: number;
+ label: string;
+ icon: LucideIcon;
+ }[];
+ isMobile?: boolean;
+};
+
+export const AccessField = (props: Props) => {
+ const { onChange, value, accessSpecifiers, isMobile = false } = props;
+
+ return (
+
+ {accessSpecifiers.map((access, index) => (
+
+
+
+ ))}
+
+ );
+};
diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx
index 71beecdc5..b8dfede35 100644
--- a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx
+++ b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/global-view-root.tsx
@@ -16,6 +16,7 @@ import { CreateUpdateWorkspaceViewModal } from "@/components/workspace";
// constants
import { GLOBAL_VIEW_UPDATED } from "@/constants/event-tracker";
import { EIssueFilterType, EIssuesStoreType } from "@/constants/issue";
+import { EViewAccess } from "@/constants/views";
import { DEFAULT_GLOBAL_VIEWS_LIST, EUserWorkspaceRoles } from "@/constants/workspace";
// hooks
import { useEventTracker, useGlobalView, useIssues, useLabel, useUser } from "@/hooks/store";
@@ -138,6 +139,7 @@ export const GlobalViewsAppliedFiltersRoot = observer((props: Props) => {
preLoadedData={{
name: `${viewDetails?.name} 2`,
description: viewDetails?.description,
+ access: viewDetails?.access ?? EViewAccess.PUBLIC,
...viewFilters,
}}
/>
diff --git a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx
index 71928239a..cb35cae84 100644
--- a/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx
+++ b/web/core/components/issues/issue-layouts/filters/applied-filters/roots/project-view-root.tsx
@@ -13,6 +13,7 @@ import { CreateUpdateProjectViewModal } from "@/components/views";
import { UpdateViewComponent } from "@/components/views/update-view-component";
// constants
import { EIssueFilterType, EIssuesStoreType } from "@/constants/issue";
+import { EViewAccess } from "@/constants/views";
import { EUserWorkspaceRoles } from "@/constants/workspace";
// hooks
import { useIssues, useLabel, useProjectState, useProjectView, useUser } from "@/hooks/store";
@@ -121,6 +122,7 @@ export const ProjectViewAppliedFiltersRoot: React.FC = observer(() => {
name: `${viewDetails?.name} 2`,
description: viewDetails?.description,
logo_props: viewDetails?.logo_props,
+ access: viewDetails?.access ?? EViewAccess.PUBLIC,
...viewFilters,
}}
/>
diff --git a/web/core/components/pages/modals/page-form.tsx b/web/core/components/pages/modals/page-form.tsx
index f945945f5..594c85c1a 100644
--- a/web/core/components/pages/modals/page-form.tsx
+++ b/web/core/components/pages/modals/page-form.tsx
@@ -5,12 +5,12 @@ import { FormEvent, useState } from "react";
import { FileText } from "lucide-react";
import { TPage } from "@plane/types";
// ui
-import { Button, EmojiIconPicker, EmojiIconPickerTypes, Input, Tooltip } from "@plane/ui";
+import { Button, EmojiIconPicker, EmojiIconPickerTypes, Input } from "@plane/ui";
import { Logo } from "@/components/common";
// constants
-import { PAGE_ACCESS_SPECIFIERS } from "@/constants/page";
+import { AccessField } from "@/components/common/access-field";
+import { EPageAccess, PAGE_ACCESS_SPECIFIERS } from "@/constants/page";
// helpers
-import { cn } from "@/helpers/common.helper";
import { convertHexEmojiToDecimal } from "@/helpers/emoji.helper";
// hooks
import { usePlatformOS } from "@/hooks/use-platform-os";
@@ -111,29 +111,12 @@ export const PageForm: React.FC = (props) => {
-
- {PAGE_ACCESS_SPECIFIERS.map((access, index) => (
-
-
-
- ))}
-
+
handleFormData("access", access)}
+ value={formData?.access ?? EPageAccess.PUBLIC}
+ accessSpecifiers={PAGE_ACCESS_SPECIFIERS}
+ isMobile={isMobile}
+ />
{PAGE_ACCESS_SPECIFIERS.find((access) => access.key === formData.access)?.label}
diff --git a/web/core/components/views/filters/filter-selection.tsx b/web/core/components/views/filters/filter-selection.tsx
index 9278ec410..89877ee9f 100644
--- a/web/core/components/views/filters/filter-selection.tsx
+++ b/web/core/components/views/filters/filter-selection.tsx
@@ -7,6 +7,7 @@ import { FilterCreatedBy, FilterCreatedDate } from "@/components/common/filters"
import { FilterOption } from "@/components/issues";
// constants
import { EViewAccess } from "@/constants/views";
+import { FilterByAccess } from "@/plane-web/components/views/filters/access-filter";
type Props = {
filters: TViewFilters;
@@ -77,6 +78,17 @@ export const ViewFiltersSelection: React.FC = observer((props) => {
/>
+ {/* access / view type */}
+
handleFilters("view_type", val)}
+ searchQuery={filtersSearchQuery}
+ accessFilters={[
+ { key: EViewAccess.PRIVATE, value: "Private" },
+ { key: EViewAccess.PUBLIC, value: "Public" },
+ ]}
+ />
+
{/* created date */}
= {
name: "",
description: "",
+ access: EViewAccess.PUBLIC,
display_properties: getComputedDisplayProperties(),
display_filters: getComputedDisplayFilters(),
};
@@ -102,6 +105,7 @@ export const ProjectViewForm: React.FC = observer((props) => {
filters: formData.filters,
display_filters: formData.display_filters,
display_properties: formData.display_properties,
+ access: formData.access,
} as IProjectView);
reset({
@@ -216,6 +220,7 @@ export const ProjectViewForm: React.FC = observer((props) => {
/>
+
) => Promise;
@@ -26,6 +28,7 @@ type Props = {
const defaultValues: Partial = {
name: "",
description: "",
+ access: EViewAccess.PUBLIC,
display_properties: getComputedDisplayProperties(),
display_filters: getComputedDisplayFilters(),
};
@@ -150,7 +153,8 @@ export const WorkspaceViewForm: React.FC = observer((props) => {
)}
/>
-