diff --git a/packages/constants/src/index.ts b/packages/constants/src/index.ts index 69c3e16b45a..e2546a2003a 100644 --- a/packages/constants/src/index.ts +++ b/packages/constants/src/index.ts @@ -15,6 +15,7 @@ export * from "./tab-indices"; export * from "./user"; export * from "./workspace"; export * from "./stickies"; +export * from "./views"; export * from "./inbox"; export * from "./profile"; export * from "./workspace-drafts"; diff --git a/packages/constants/src/views.ts b/packages/constants/src/views.ts new file mode 100644 index 00000000000..8c051790e9b --- /dev/null +++ b/packages/constants/src/views.ts @@ -0,0 +1,23 @@ +export enum EViewAccess { + PRIVATE, + PUBLIC, +} + +export const VIEW_ACCESS_SPECIFIERS: { + key: EViewAccess; + i18n_label: string; +}[] = [ + { key: EViewAccess.PUBLIC, i18n_label: "project_view.access.public" }, + { key: EViewAccess.PRIVATE, i18n_label: "project_view.access.private" }, +]; + +export const VIEW_SORTING_KEY_OPTIONS = [ + { key: "name", i18n_label: "project_view.sort_by.name" }, + { key: "created_at", i18n_label: "project_view.sort_by.created_at" }, + { key: "updated_at", i18n_label: "project_view.sort_by.updated_at" }, +]; + +export const VIEW_SORT_BY_OPTIONS = [ + { key: "asc", i18n_label: "common.order_by.asc" }, + { key: "desc", i18n_label: "common.order_by.desc" }, +]; diff --git a/packages/i18n/src/locales/en/translations.json b/packages/i18n/src/locales/en/translations.json index 7dece057a36..04a23f07b91 100644 --- a/packages/i18n/src/locales/en/translations.json +++ b/packages/i18n/src/locales/en/translations.json @@ -329,6 +329,18 @@ "no_data_yet": "No Data yet", "connections": "Connections", + "project_view": { + "access": { + "public": "Public", + "private": "Private" + }, + "sort_by": { + "created_at": "Created at", + "updated_at": "Updated at", + "name": "Name" + } + }, + "toast": { "success": "Success!", "error": "Error!" @@ -485,7 +497,10 @@ "last_created": "Last created", "last_updated": "Last updated", "start_date": "Start date", - "due_date": "Due date" + "due_date": "Due date", + + "asc": "Ascending", + "desc": "Descending" }, "sort": { "asc": "Ascending", diff --git a/packages/i18n/src/locales/es/translations.json b/packages/i18n/src/locales/es/translations.json index 9f1828a1882..e3a66d10626 100644 --- a/packages/i18n/src/locales/es/translations.json +++ b/packages/i18n/src/locales/es/translations.json @@ -328,6 +328,18 @@ "no_data_yet": "Sin datos aún", "connections": "Conexiones", + "project_view": { + "access": { + "public": "Público", + "private": "Privado" + }, + "sort_by": { + "created_at": "Fecha de creación", + "updated_at": "Fecha de actualización", + "name": "Nombre" + } + }, + "toast": { "success": "¡Éxito!", "error": "¡Error!" @@ -489,7 +501,9 @@ "last_created": "Último creado", "last_updated": "Última actualización", "start_date": "Fecha de inicio", - "due_date": "Fecha de vencimiento" + "due_date": "Fecha de vencimiento", + "asc": "Ascendente", + "desc": "Descendente" }, "sort": { "asc": "Ascendente", diff --git a/packages/i18n/src/locales/fr/translations.json b/packages/i18n/src/locales/fr/translations.json index 61da187ccf9..c1b951cb747 100644 --- a/packages/i18n/src/locales/fr/translations.json +++ b/packages/i18n/src/locales/fr/translations.json @@ -330,6 +330,18 @@ "no_data_yet": "Pas encore de données", "connections": "Connexions", + "project_view": { + "access": { + "public": "Public", + "private": "Privé" + }, + "sort_by": { + "created_at": "Date de création", + "updated_at": "Date de modification", + "name": "Nom" + } + }, + "toast": { "success": "Succès !", "error": "Erreur !" @@ -488,7 +500,9 @@ "last_created": "Dernière création", "last_updated": "Dernière mise à jour", "start_date": "Date de début", - "due_date": "Date d'échéance" + "due_date": "Date d'échéance", + "asc": "Croissant", + "desc": "Décroissant" }, "sort": { "asc": "Croissant", diff --git a/packages/i18n/src/locales/ja/translations.json b/packages/i18n/src/locales/ja/translations.json index 781aeb7d484..8e6d6e8c7a0 100644 --- a/packages/i18n/src/locales/ja/translations.json +++ b/packages/i18n/src/locales/ja/translations.json @@ -312,7 +312,7 @@ "change_parent_issue": "親問題を変更", "remove_parent_issue": "親問題を削除", "add_parent": "親問題を追加", - "loading_members": "メンバーを読み込んでいます...", + "loading_members": "メンバーを読み込んでいます...", "view_link_copied_to_clipboard": "表示リンクがクリップボードにコピーされました。", "required": "必須", "optional": "任意", @@ -329,6 +329,18 @@ "no_data_yet": "まだデータがありません", "connections": "接続", + "project_view": { + "access": { + "public": "公開", + "private": "非公開" + }, + "sort_by": { + "created_at": "作成日時", + "updated_at": "更新日時", + "name": "名前" + } + }, + "toast": { "success": "成功!", "error": "エラー!" @@ -487,7 +499,9 @@ "last_created": "最後に作成", "last_updated": "最後に更新", "start_date": "開始日", - "due_date": "期限日" + "due_date": "期限日", + "asc": "昇順", + "desc": "降順" }, "sort": { "asc": "昇順", diff --git a/packages/i18n/src/locales/zh-CN/translations.json b/packages/i18n/src/locales/zh-CN/translations.json index 9fb3d9dd84d..dd99d22a90d 100644 --- a/packages/i18n/src/locales/zh-CN/translations.json +++ b/packages/i18n/src/locales/zh-CN/translations.json @@ -359,6 +359,18 @@ "show_less": "显示较少", "no_data_yet": "暂无数据", + "project_view": { + "access": { + "public": "公开", + "private": "私密" + }, + "sort_by": { + "created_at": "创建时间", + "updated_at": "更新时间", + "name": "名称" + } + }, + "toast": { "success": "成功!", "error": "错误!" @@ -510,7 +522,9 @@ "last_created": "最近创建", "last_updated": "最近更新", "start_date": "开始日期", - "due_date": "截止日期" + "due_date": "截止日期", + "asc": "升序", + "desc": "降序" }, "sort": { "asc": "升序", diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx index 764412d1bb4..58a07cbe5d1 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(detail)/[viewId]/header.tsx @@ -6,7 +6,13 @@ import Link from "next/link"; import { useParams } from "next/navigation"; import { Layers, Lock } from "lucide-react"; // plane constants -import { EIssueLayoutTypes, EIssueFilterType, EIssuesStoreType, ISSUE_DISPLAY_FILTERS_BY_PAGE } from "@plane/constants"; +import { + EIssueLayoutTypes, + EIssueFilterType, + EIssuesStoreType, + ISSUE_DISPLAY_FILTERS_BY_PAGE, + EViewAccess, +} from "@plane/constants"; // types import { IIssueDisplayFilterOptions, IIssueDisplayProperties, IIssueFilterOptions } from "@plane/types"; // ui @@ -16,7 +22,6 @@ import { BreadcrumbLink, Logo } from "@/components/common"; import { DisplayFiltersSelection, FiltersDropdown, FilterSelection, LayoutSelection } from "@/components/issues"; // constants import { ViewQuickActions } from "@/components/views"; -import { EViewAccess } from "@/constants/views"; // helpers import { isIssueFilterActive } from "@/helpers/filter.helper"; import { truncateText } from "@/helpers/string.helper"; diff --git a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/page.tsx b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/page.tsx index 73e7e0d85e4..d4a3051ec94 100644 --- a/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/page.tsx +++ b/web/app/[workspaceSlug]/(projects)/projects/(detail)/[projectId]/views/(list)/page.tsx @@ -4,7 +4,7 @@ import { useCallback } from "react"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // components -import { EUserPermissionsLevel, EUserProjectRoles } from "@plane/constants"; +import { EUserPermissionsLevel, EUserProjectRoles, EViewAccess } from "@plane/constants"; import { useTranslation } from "@plane/i18n"; import { TViewFilterProps } from "@plane/types"; import { Header, EHeaderVariant } from "@plane/ui"; @@ -13,7 +13,6 @@ import { DetailedEmptyState } from "@/components/empty-state"; import { ProjectViewsList } from "@/components/views"; import { ViewAppliedFiltersList } from "@/components/views/applied-filters"; // constants -import { EViewAccess } from "@/constants/views"; // helpers import { calculateTotalFilters } from "@/helpers/filter.helper"; // hooks diff --git a/web/ce/services/project/view.service.ts b/web/ce/services/project/view.service.ts index 6cb76222add..9a6ee12a226 100644 --- a/web/ce/services/project/view.service.ts +++ b/web/ce/services/project/view.service.ts @@ -1,5 +1,5 @@ +import { EViewAccess } from "@plane/constants"; import { TPublishViewSettings } from "@plane/types"; -import { EViewAccess } from "@/constants/views"; import { API_BASE_URL } from "@/helpers/common.helper"; import { ViewService as CoreViewService } from "@/services/view.service"; diff --git a/web/ce/services/workspace.service.ts b/web/ce/services/workspace.service.ts index 59fe39c69ce..9dcfb7f6c5e 100644 --- a/web/ce/services/workspace.service.ts +++ b/web/ce/services/workspace.service.ts @@ -1,4 +1,4 @@ -import { EViewAccess } from "@/constants/views"; +import { EViewAccess } from "@plane/constants"; import { API_BASE_URL } from "@/helpers/common.helper"; import { WorkspaceService as CoreWorkspaceService } from "@/services/workspace.service"; 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 fffd98d4718..a5b49e90cbb 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 @@ -6,7 +6,7 @@ import isEmpty from "lodash/isEmpty"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // types -import { DEFAULT_GLOBAL_VIEWS_LIST,EIssueFilterType, EIssuesStoreType } from "@plane/constants"; +import { DEFAULT_GLOBAL_VIEWS_LIST, EIssueFilterType, EIssuesStoreType, EViewAccess } from "@plane/constants"; import { IIssueFilterOptions, TStaticViewTypes } from "@plane/types"; //ui // components @@ -16,7 +16,6 @@ import { UpdateViewComponent } from "@/components/views/update-view-component"; import { CreateUpdateWorkspaceViewModal } from "@/components/workspace"; // constants import { GLOBAL_VIEW_UPDATED } from "@/constants/event-tracker"; -import { EViewAccess } from "@/constants/views"; // helpers import { cn } from "@/helpers/common.helper"; // hooks 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 152ebcc2d3f..7945426ece3 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 @@ -6,7 +6,7 @@ import isEmpty from "lodash/isEmpty"; import { observer } from "mobx-react"; import { useParams } from "next/navigation"; // types -import { EIssueFilterType, EIssuesStoreType } from "@plane/constants"; +import { EIssueFilterType, EIssuesStoreType, EViewAccess } from "@plane/constants"; import { IIssueFilterOptions } from "@plane/types"; // components import { Header, EHeaderVariant } from "@plane/ui"; @@ -14,7 +14,6 @@ import { AppliedFiltersList } from "@/components/issues"; import { CreateUpdateProjectViewModal } from "@/components/views"; import { UpdateViewComponent } from "@/components/views/update-view-component"; // constants -import { EViewAccess } from "@/constants/views"; // hooks import { useIssues, useLabel, useProjectState, useProjectView, useUser, useUserPermissions } from "@/hooks/store"; import { EUserPermissions, EUserPermissionsLevel } from "@/plane-web/constants/user-permissions"; diff --git a/web/core/components/views/applied-filters/access.tsx b/web/core/components/views/applied-filters/access.tsx index 8e418daecf9..ce46a800ab6 100644 --- a/web/core/components/views/applied-filters/access.tsx +++ b/web/core/components/views/applied-filters/access.tsx @@ -2,8 +2,10 @@ import { observer } from "mobx-react"; // icons import { X } from "lucide-react"; // constants -import { EViewAccess, VIEW_ACCESS_SPECIFIERS } from "@/constants/views"; +import { EViewAccess } from "@plane/constants"; // helpers +import { useTranslation } from "@plane/i18n"; +import { VIEW_ACCESS_SPECIFIERS } from "@/helpers/views.helper"; type Props = { editable: boolean | undefined; @@ -13,10 +15,11 @@ type Props = { export const AppliedAccessFilters: React.FC = observer((props) => { const { editable, handleRemove, values } = props; + const { t } = useTranslation(); const getAccessLabel = (val: EViewAccess) => { const value = VIEW_ACCESS_SPECIFIERS.find((option) => option.key === val); - return value?.label; + return value?.i18n_label; }; return ( @@ -28,7 +31,7 @@ export const AppliedAccessFilters: React.FC = observer((props) => { return (
- {label} + {t(label)} {editable && (