-
- {
- statusHtml ? (
-
- ) : (
- cardFields?.state && draftField && draftField.name &&
- )
- }
-
- {
- dateHtml ? (
-
- ) : (
- cardFields?.date &&
- )
- }
-
+ {
+ (statusPlaceholder || datePlaceholder) && (
+
+ {statusPlaceholder}
+ {datePlaceholder}
+
+ )
+ }
+
+
-
+ {
+ (escapedDescription || descriptionHtml) && (
+
+ )
+ }
{
tagsHtml ? (
diff --git a/src/dashboardWebView/components/Filters/LanguageFilter.tsx b/src/dashboardWebView/components/Filters/LanguageFilter.tsx
new file mode 100644
index 00000000..1c678f3d
--- /dev/null
+++ b/src/dashboardWebView/components/Filters/LanguageFilter.tsx
@@ -0,0 +1,66 @@
+import * as React from 'react';
+import { DropdownMenu, DropdownMenuContent, DropdownMenuSeparator } from '../../../components/shadcn/Dropdown';
+import { LanguageIcon } from '@heroicons/react/24/outline';
+import { MenuButton, MenuItem } from '../Menu';
+import { useRecoilState, useRecoilValue } from 'recoil';
+import { DEFAULT_LOCALE_STATE, LocaleAtom, LocalesAtom } from '../../state';
+import * as l10n from '@vscode/l10n';
+import { LocalizationKey } from '../../../localization';
+
+export interface ILanguageFilterProps { }
+
+export const LanguageFilter: React.FunctionComponent
= ({ }: React.PropsWithChildren) => {
+ const locales = useRecoilValue(LocalesAtom);
+ const [crntLocale, setCrntLocale] = useRecoilState(LocaleAtom);
+
+ const crntLocaleName = React.useMemo(() => {
+ if (!crntLocale || !locales || locales.length === 0) {
+ return null;
+ }
+
+ const locale = locales.find(locale => locale.locale === crntLocale);
+
+ return locale?.title || locale?.locale;
+ }, [crntLocale, locales]);
+
+ if (!locales || locales.length <= 1) {
+ return null;
+ }
+
+ return (
+
+
+
+ {l10n.t(LocalizationKey.dashboardFiltersLanguageFilterLabel)}
+ >
+ }
+ title={crntLocaleName || l10n.t(LocalizationKey.dashboardFiltersLanguageFilterAll)}
+ />
+
+
+
+
+ );
+};
\ No newline at end of file
diff --git a/src/dashboardWebView/components/Header/ClearFilters.tsx b/src/dashboardWebView/components/Header/ClearFilters.tsx
index 4837af1c..7abfa074 100644
--- a/src/dashboardWebView/components/Header/ClearFilters.tsx
+++ b/src/dashboardWebView/components/Header/ClearFilters.tsx
@@ -12,7 +12,9 @@ import {
CategoryAtom,
DEFAULT_TAG_STATE,
DEFAULT_CATEGORY_STATE,
- FiltersAtom
+ FiltersAtom,
+ LocaleAtom,
+ DEFAULT_LOCALE_STATE
} from '../../state';
import { DefaultValue } from 'recoil';
import { useEffect, useMemo } from 'react';
@@ -34,12 +36,14 @@ export const ClearFilters: React.FunctionComponent = (
const folder = useRecoilValue(FolderSelector);
const tag = useRecoilValue(TagSelector);
const category = useRecoilValue(CategorySelector);
+ const locale = useRecoilValue(LocaleAtom);
const filters = useRecoilValue(FiltersAtom);
const resetSorting = useResetRecoilState(SortingAtom);
const resetFolder = useResetRecoilState(FolderAtom);
const resetTag = useResetRecoilState(TagAtom);
const resetCategory = useResetRecoilState(CategoryAtom);
+ const resetLocale = useResetRecoilState(LocaleAtom);
const resetFilters = useResetRecoilState(FiltersAtom);
const reset = () => {
@@ -48,6 +52,7 @@ export const ClearFilters: React.FunctionComponent = (
resetFolder();
resetTag();
resetCategory();
+ resetLocale();
resetFilters();
};
@@ -61,19 +66,20 @@ export const ClearFilters: React.FunctionComponent = (
folder !== DEFAULT_FOLDER_STATE ||
tag !== DEFAULT_TAG_STATE ||
category !== DEFAULT_CATEGORY_STATE ||
+ locale !== DEFAULT_LOCALE_STATE ||
hasCustomFilters
) {
setShow(true);
} else {
setShow(false);
}
- }, [folder, tag, category, hasCustomFilters]);
+ }, [folder, tag, category, locale, hasCustomFilters]);
if (!show) return null;
return (
diff --git a/src/dashboardWebView/components/Menu/MenuItem.tsx b/src/dashboardWebView/components/Menu/MenuItem.tsx
index a6020ab9..948c9e85 100644
--- a/src/dashboardWebView/components/Menu/MenuItem.tsx
+++ b/src/dashboardWebView/components/Menu/MenuItem.tsx
@@ -5,6 +5,7 @@ export interface IMenuItemProps {
title: JSX.Element | string;
value?: any;
isCurrent?: boolean;
+ className?: string;
disabled?: boolean;
onClick: (value: any, e: React.MouseEvent