1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-11-26 22:41:17 +02:00

Desktop: Fix datetime values not appearing on note properties when the picker is open (#11748)

This commit is contained in:
pedr
2025-02-06 15:10:59 -03:00
committed by GitHub
parent 1975ebd438
commit e36a30eb1a

View File

@@ -1,7 +1,6 @@
import * as React from 'react'; import * as React from 'react';
import { _ } from '@joplin/lib/locale'; import { _ } from '@joplin/lib/locale';
import { themeStyle } from '@joplin/lib/theme'; import { themeStyle } from '@joplin/lib/theme';
import time from '@joplin/lib/time';
import DialogButtonRow from './DialogButtonRow'; import DialogButtonRow from './DialogButtonRow';
import Note from '@joplin/lib/models/Note'; import Note from '@joplin/lib/models/Note';
import bridge from '../services/bridge'; import bridge from '../services/bridge';
@@ -9,6 +8,7 @@ import shim from '@joplin/lib/shim';
import { NoteEntity } from '@joplin/lib/services/database/types'; import { NoteEntity } from '@joplin/lib/services/database/types';
import { focus } from '@joplin/lib/utils/focusHandler'; import { focus } from '@joplin/lib/utils/focusHandler';
import Dialog from './Dialog'; import Dialog from './Dialog';
import { formatDateTimeLocalToMs, formatMsToDateTimeLocal, formatMsToLocal } from '@joplin/utils/time';
const { clipboard } = require('electron'); const { clipboard } = require('electron');
const formatcoords = require('formatcoords'); const formatcoords = require('formatcoords');
@@ -22,14 +22,14 @@ interface Props {
interface FormNote { interface FormNote {
id: string; id: string;
deleted_time: string; deleted_time: number;
location: string; location: string;
markup_language: string; markup_language: string;
revisionsLink: string; revisionsLink: string;
source_url: string; source_url: string;
todo_completed?: string; todo_completed?: number;
user_created_time: string; user_created_time: number;
user_updated_time: string; user_updated_time: number;
} }
interface State { interface State {
@@ -41,6 +41,10 @@ interface State {
const uniqueId = (key: string) => `note-properties-dialog-${key}`; const uniqueId = (key: string) => `note-properties-dialog-${key}`;
const isPropertyDatetimeRelated = (key: string) => {
return key === 'user_created_time' || key === 'user_updated_time' || key === 'deleted_time';
};
class NotePropertiesDialog extends React.Component<Props, State> { class NotePropertiesDialog extends React.Component<Props, State> {
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
@@ -119,17 +123,17 @@ class NotePropertiesDialog extends React.Component<Props, State> {
public noteToFormNote(note: NoteEntity) { public noteToFormNote(note: NoteEntity) {
const formNote: FormNote = { const formNote: FormNote = {
id: note.id, id: note.id,
user_updated_time: time.formatMsToLocal(note.user_updated_time), user_updated_time: note.user_updated_time,
user_created_time: time.formatMsToLocal(note.user_created_time), user_created_time: note.user_created_time,
source_url: note.source_url, source_url: note.source_url,
location: '', location: '',
revisionsLink: note.id, revisionsLink: note.id,
markup_language: Note.markupLanguageToLabel(note.markup_language), markup_language: Note.markupLanguageToLabel(note.markup_language),
deleted_time: note.deleted_time ? time.formatMsToLocal(note.deleted_time) : '', deleted_time: note.deleted_time,
}; };
if (note.todo_completed) { if (note.todo_completed) {
formNote.todo_completed = time.formatMsToLocal(note.todo_completed); formNote.todo_completed = note.todo_completed;
} }
if (Number(note.latitude) || Number(note.longitude)) { if (Number(note.latitude) || Number(note.longitude)) {
@@ -141,11 +145,11 @@ class NotePropertiesDialog extends React.Component<Props, State> {
public formNoteToNote(formNote: FormNote) { public formNoteToNote(formNote: FormNote) {
const note: NoteEntity = { id: formNote.id, ...this.latLongFromLocation(formNote.location) }; const note: NoteEntity = { id: formNote.id, ...this.latLongFromLocation(formNote.location) };
note.user_created_time = time.formatLocalToMs(formNote.user_created_time); note.user_created_time = formNote.user_created_time;
note.user_updated_time = time.formatLocalToMs(formNote.user_updated_time); note.user_updated_time = formNote.user_updated_time;
if (formNote.todo_completed) { if (formNote.todo_completed) {
note.todo_completed = time.formatLocalToMs(formNote.todo_completed); note.todo_completed = formNote.todo_completed;
} }
note.source_url = formNote.source_url; note.source_url = formNote.source_url;
@@ -243,14 +247,8 @@ class NotePropertiesDialog extends React.Component<Props, State> {
return new Promise((resolve: Function) => { return new Promise((resolve: Function) => {
const newFormNote = { ...this.state.formNote }; const newFormNote = { ...this.state.formNote };
if (this.state.editedKey.indexOf('_time') >= 0) {
const dt = time.anythingToDateTime(this.state.editedValue, new Date());
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
(newFormNote as any)[this.state.editedKey] = time.formatMsToLocal(dt.getTime());
} else {
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied // eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
(newFormNote as any)[this.state.editedKey] = this.state.editedValue; (newFormNote as any)[this.state.editedKey] = this.state.editedValue;
}
this.setState( this.setState(
{ {
@@ -300,12 +298,12 @@ class NotePropertiesDialog extends React.Component<Props, State> {
}; };
if (this.state.editedKey === key) { if (this.state.editedKey === key) {
if (key.indexOf('_time') >= 0) { if (isPropertyDatetimeRelated(key)) {
controlComp = <input controlComp = <input
type="datetime-local" type="datetime-local"
defaultValue={value} defaultValue={formatMsToDateTimeLocal(value)}
ref={this.inputRef} ref={this.inputRef}
onChange={event => this.setState({ editedValue: event.target.value })} onChange={event => this.setState({ editedValue: formatDateTimeLocalToMs(event.target.value) })}
onKeyDown={event => onKeyDown(event)} onKeyDown={event => onKeyDown(event)}
style={styles.input} style={styles.input}
id={uniqueId(key)} id={uniqueId(key)}
@@ -343,6 +341,8 @@ class NotePropertiesDialog extends React.Component<Props, State> {
} catch (error) { } catch (error) {
displayedValue = ''; displayedValue = '';
} }
} else if (isPropertyDatetimeRelated(key)) {
displayedValue = formatMsToLocal(value);
} }
if (['source_url', 'location'].indexOf(key) >= 0) { if (['source_url', 'location'].indexOf(key) >= 0) {
@@ -411,22 +411,6 @@ class NotePropertiesDialog extends React.Component<Props, State> {
return key; return key;
} }
public formatValue(key: string, note: NoteEntity) {
if (key === 'location') {
if (!Number(note.latitude) && !Number(note.longitude)) return null;
const dms = formatcoords(Number(note.latitude), Number(note.longitude));
return dms.format('DDMMss', { decimalPlaces: 0 });
}
if (['user_updated_time', 'user_created_time', 'todo_completed'].indexOf(key) >= 0) {
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
return time.formatMsToLocal((note as any)[key]);
}
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Old code before rule was applied
return (note as any)[key];
}
public render() { public render() {
const theme = themeStyle(this.props.themeId); const theme = themeStyle(this.props.themeId);
const formNote = this.state.formNote; const formNote = this.state.formNote;