import * as React from 'react'; import Checkbox from './checkbox'; import Note from '@joplin/lib/models/Note'; import { View, TouchableOpacity, Text, StyleSheet } from 'react-native'; import { Style } from './global-style'; import { State } from '@joplin/lib/reducer'; const { connect } = require('react-redux'); const { _ } = require('@joplin/lib/locale'); import shim from '@joplin/lib/shim'; import { themeStyle } from './global-style'; interface NoteListProps { note: any; themeId: number; todoCheckbox_change: (checked: boolean)=> void; dispatch: Function; selectedNoteId: string; } const NotesBarListItemComponent = function(props: NoteListProps) { const note = props.note ?? {}; const isTodo = !!Number(note.is_todo); const styles = (): Style => { const themeId = props.themeId; const theme = themeStyle(themeId); const styles: Style = { horizontalFlex: { flexDirection: 'row', }, padding: { paddingLeft: theme.marginLeft, paddingRight: theme.marginRight, paddingTop: 12, paddingBottom: 12, }, button: { height: 42, width: 42, backgroundColor: theme.color4, alignItems: 'center', justifyContent: 'center', borderRadius: 4, flex: 0.5, marginLeft: 8, }, itemText: { fontSize: theme.fontSize, color: theme.color, paddingTop: 12, paddingBottom: 12, }, checkbox: { paddingRight: 10, paddingLeft: theme.marginLeft, paddingTop: 12, paddingBottom: 12, color: theme.color, }, selectedItem: props.selectedNoteId === note.id ? { backgroundColor: theme.dividerColor, } : null, item: { borderBottomWidth: 1, borderColor: theme.dividerColor, }, }; return StyleSheet.create(styles); }; const onTodoCheckboxChange = async (checked: boolean) => { await props.todoCheckbox_change(checked); }; const onPress = async () => { if (!note) return; if (note.encryption_applied) return; props.dispatch({ type: 'NAV_BACK', }); shim.setTimeout(() => { props.dispatch({ type: 'NAV_GO', routeName: 'Note', noteId: note.id, }); }, 5); }; const noteTitle = Note.displayTitle(note); let item; if (isTodo) { item = ( onTodoCheckboxChange(checked)} accessibilityLabel={_('to-do: %s', noteTitle)} /> {noteTitle} ); } else { item = ( {noteTitle} ); } return item; }; const NotesBarListItem = connect((state: State) => { return { themeId: state.settings.theme, selectedNoteId: state.selectedNoteIds[0], }; })(NotesBarListItemComponent); export default NotesBarListItem;