diff --git a/src/locales/pt_br.json b/src/locales/pt-br.json similarity index 100% rename from src/locales/pt_br.json rename to src/locales/pt-br.json diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index 7f898d13..399aa378 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -41,7 +41,6 @@ const App = (): JSX.Element => { const [attributes, setAttributes] = useState(null) const [isSettingsOpen, setIsSettingsOpen] = useState(false) const [contextMenu, setContextMenu] = useState(null) - const [textFieldValue, setTextFieldValue] = useState('') const [promptItem, setPromptItem] = useState(null) const [triggerArchiving, setTriggerArchiving] = useState(false) const [theme, setTheme] = useState( @@ -195,8 +194,6 @@ const App = (): JSX.Element => { setAttributeFields={setAttributeFields} setSnackBarSeverity={setSnackBarSeverity} setSnackBarContent={setSnackBarContent} - textFieldValue={textFieldValue} - setTextFieldValue={setTextFieldValue} settings={settings} /> ) : null} diff --git a/src/renderer/Dialog/AutoSuggest.tsx b/src/renderer/Dialog/AutoSuggest.tsx index e4a8112c..6cef8530 100644 --- a/src/renderer/Dialog/AutoSuggest.tsx +++ b/src/renderer/Dialog/AutoSuggest.tsx @@ -134,6 +134,7 @@ const AutoSuggestComponent: React.FC = ({ onKeyDown: handleKeyDown, 'test-id': 'dialog-autosuggest-textfield' } + useEffect(() => { textFieldRef.current?.focus() }, [textFieldRef]) diff --git a/src/renderer/Dialog/DatePicker.scss b/src/renderer/Dialog/DatePicker.scss index 30b0d21d..1a879352 100644 --- a/src/renderer/Dialog/DatePicker.scss +++ b/src/renderer/Dialog/DatePicker.scss @@ -42,9 +42,6 @@ } } - // .MuiPickersSlideTransition-root { - // max-height: 13em; - // } button { border-radius: Variables.$radius; &.MuiPickersDay-today { @@ -52,4 +49,9 @@ background: Variables.$mid-grey; } } + .darkTheme { + button.MuiPickersDay-today { + color: black; + } + } } \ No newline at end of file diff --git a/src/renderer/Dialog/Dialog.tsx b/src/renderer/Dialog/Dialog.tsx index dce273b4..614258a6 100644 --- a/src/renderer/Dialog/Dialog.tsx +++ b/src/renderer/Dialog/Dialog.tsx @@ -25,8 +25,6 @@ interface DialogComponentProps extends WithTranslation { setAttributeFields: React.Dispatch> setSnackBarSeverity: React.Dispatch> setSnackBarContent: React.Dispatch> - textFieldValue: string - setTextFieldValue: React.Dispatch> settings: Settings t: typeof i18n.t } @@ -42,19 +40,18 @@ const DialogComponent: React.FC = memo( setAttributeFields, setSnackBarSeverity, setSnackBarContent, - textFieldValue, - setTextFieldValue, settings, t }) => { - const numRowsWithContent = textFieldValue - ?.split('\n') - .filter((line) => line.trim() !== '').length const [priority, setPriority] = useState('-') const [dueDate, setDueDate] = useState(null) const [thresholdDate, setThresholdDate] = useState(null) const [recurrence, setRecurrence] = useState(null) const [pomodoro, setPomodoro] = useState(0) + const [textFieldValue, setTextFieldValue] = useState('') + const numRowsWithContent = textFieldValue + ?.split('\n') + .filter((line) => line.trim() !== '').length const handleAdd = (): void => { try { diff --git a/src/renderer/Grid/Row.scss b/src/renderer/Grid/Row.scss index 1e115040..59f8546f 100644 --- a/src/renderer/Grid/Row.scss +++ b/src/renderer/Grid/Row.scss @@ -8,9 +8,10 @@ display: flex; flex-wrap: wrap; gap: 0.25em; - padding: 0.4em; + padding: 0.75em 0.4em; .MuiCheckbox-root { padding: 0; + margin: 0 0.25em; } &[data-complete='true'], &[data-hidden='true'] { @@ -29,10 +30,6 @@ .darkTheme { .row { - border-left: solid 0.2em Variables.$dark-grey; - border-bottom: solid 1px Variables.$dark-grey; - &.group { - border: none; - } + border-color: Variables.$dark-grey; } } diff --git a/src/renderer/Header/Search/Search.tsx b/src/renderer/Header/Search/Search.tsx index 0783d177..b31f8cb0 100644 --- a/src/renderer/Header/Search/Search.tsx +++ b/src/renderer/Header/Search/Search.tsx @@ -6,6 +6,7 @@ import Autocomplete, { import OptionComponent from './Option' import InputComponent from './Input' import { withTranslation, WithTranslation } from 'react-i18next' +import LanguageSelector, { i18n } from '../Settings/LanguageSelector' import './Search.scss' const { ipcRenderer, store } = window.api @@ -38,23 +39,6 @@ const getOptionLabel = (option: string | SearchFilter): string => { return '' } -const filterOptions = ( - options: string | SearchFilter[], - params: { inputValue: string } -): SearchFilter[] => { - const filter = createFilterOptions() - const filtered: SearchFilter[] = filter(options as SearchFilter[], params) - const { inputValue } = params - const isExisting = filtered.some((filter) => filter.label && filter.label.includes(inputValue)) - if (inputValue !== '' && !isExisting) { - filtered.push({ - inputValue, - title: `Create new filter: ${inputValue}` - }) - } - return filtered -} - interface SearchComponentProps extends WithTranslation { headers: HeadersObject | null settings: Settings @@ -62,10 +46,11 @@ interface SearchComponentProps extends WithTranslation { setSearchString: React.Dispatch> searchFieldRef: React.RefObject setPromptItem: React.Dispatch> + t: typeof i18n.t } const SearchComponent: React.FC = memo( - ({ headers, settings, searchString, setSearchString, searchFieldRef, setPromptItem }) => { + ({ headers, settings, searchString, setSearchString, searchFieldRef, setPromptItem, t }) => { const [searchFilters, setSearchFilters] = useState(store.getFilters('search')) const [isAutocompleteOpen, setIsAutocompleteOpen] = useState(false) @@ -105,6 +90,23 @@ const SearchComponent: React.FC = memo( [searchFieldRef, isAutocompleteOpen] ) + const filterOptions = ( + options: string | SearchFilter[], + params: { inputValue: string }, + ): SearchFilter[] => { + const filter = createFilterOptions() + const filtered: SearchFilter[] = filter(options as SearchFilter[], params) + const { inputValue } = params + const isExisting = filtered.some((filter) => filter.label && filter.label.includes(inputValue)) + if (inputValue !== '' && !isExisting) { + filtered.push({ + inputValue, + title: `${t('search.filters.create')}: ${inputValue}` + }) + } + return filtered + } + useEffect(() => { document.addEventListener('keydown', handleKeyDown) return (): void => { diff --git a/src/renderer/Settings/LanguageSelector.tsx b/src/renderer/Settings/LanguageSelector.tsx index 99c4e810..720aee65 100644 --- a/src/renderer/Settings/LanguageSelector.tsx +++ b/src/renderer/Settings/LanguageSelector.tsx @@ -12,6 +12,7 @@ import es from '../../locales/es.json' import fr from '../../locales/fr.json' import zh from '../../locales/zh.json' import pt from '../../locales/pt.json' +import pt_br from '../../locales/pt-br.json' import jp from '../../locales/jp.json' import tr from '../../locales/tr.json' import hu from '../../locales/hu.json' @@ -27,11 +28,14 @@ import 'dayjs/locale/es' import 'dayjs/locale/fr' import 'dayjs/locale/zh' import 'dayjs/locale/pt' +import 'dayjs/locale/pt-br' import 'dayjs/locale/tr' import 'dayjs/locale/hu' import 'dayjs/locale/cs' import 'dayjs/locale/pl' import 'dayjs/locale/ru' +import 'dayjs/locale/ko' +import 'dayjs/locale/hi' const { store } = window.api @@ -44,6 +48,7 @@ const options: i18n.InitOptions = { fr: { translation: fr }, zh: { translation: zh }, pt: { translation: pt }, + 'pt-br': { translation: pt_br }, jp: { translation: jp }, tr: { translation: tr }, hu: { translation: hu }, @@ -62,6 +67,7 @@ const options: i18n.InitOptions = { 'fr', 'zh', 'pt', + 'pt-br', 'jp', 'tr', 'hu', @@ -99,7 +105,8 @@ const friendlyLanguageName: Record = { es: 'Español', fr: 'Français', zh: '简体中文', - pt: 'Português', + pt: 'Português (Portugal)', + 'pt-br': 'Português (Brasil)', jp: '日本語', tr: 'Türkçe', hu: 'Magyar',