@@ -1732,51 +1762,50 @@ function ChatScreen({inputRef}) {
`;
}
-function Message({m,i}) {
+function Message({message}) {
const {
state, setState,
addReaction, confirmReaction, removeReaction
} = useContext(AppContext);
return html`
-
{
- event.preventDefault();
- setState(s => ({ ...s, contextMenu: { visible: true, messageIndex: i, x: event.clientX, y: event.clientY } }));
- }}
- onTouchStart=${event => {
- event.preventDefault();
- const target = event.touches[0];
- setState(s => ({ ...s, contextMenu: { visible: true, messageIndex: i, x: target.clientX, y: target.clientY } }));
- }}>
- ${m.replyTo&&html`
+
{
+ event.preventDefault();
+ setState(s => ({ ...s, contextMenu: { visible: true, messageId: message.id, x: event.clientX, y: event.clientY } }));
+ }}
+ onTouchStart=${event => {
+ event.preventDefault();
+ const target = event.touches[0];
+ setState(s => ({ ...s, contextMenu: { visible: true, messageId: message.id, x: target.clientX, y: target.clientY } }));
+ }}>
+ ${message.replyTo && html`
setState(s=>({
...state,
- selectedNotebook: m.replyTo.notebookId,
- scrollToMessage: m.replyTo.id,
+ selectedNotebook: message.replyTo.notebookId,
+ scrollToMessage: message.replyTo.id,
}))}>
- Reply to "${(state.messages[m.replyTo.notebookId] || []).find(x => x.id===m.replyTo.id)?.text || ''}"
+ Reply to "${(state.messages[message.replyTo.notebookId] || []).find(x => x.id===message.replyTo.id)?.text || ''}"
`}
-
+
${(() => {
- const text = m.text.toLowerCase();
- if (!text.includes(' ') && (text.startsWith('http://') || text.startsWith('https://'))) {
+ if (isSimpleUrl(message.text)) {
return html`
-
+
`;
}
})()}
- ${m.reactions.map(r => html`
-
+ ${message.reactions.map(r => html`
+
`)}
- ${state.reactionInputFor===i
+ ${state.reactionInputFor===message.id
? html`e.key==='Enter'&&(confirmReaction(i,e.target.value), e.target.value='')} />`
- : html``
+ onKeyPress=${e=>e.key==='Enter'&&(confirmReaction(message.id, e.target.value), e.target.value='')} />`
+ : html``
}
-
${new Date(m.timestamp).toLocaleString()}${m.edited ? ' (edited)' : ''}
+
${new Date(message.timestamp).toLocaleString()}${message.edited ? ' (edited)' : ''}
`
}
@@ -1813,8 +1842,8 @@ function CrossReplyModal() {
}
function ContextMenu() {
- const {state, setState, persistMessages} = useContext(AppContext);
- const idx = state.contextMenu.messageIndex;
+ const {state, setState, deleteMessage, persistMessages} = useContext(AppContext);
+ const idx = state.contextMenu.messageId;
const nbId = state.selectedNotebook;
const arr = state.messages[nbId] || [];
const msg = arr[idx];
@@ -1838,9 +1867,10 @@ function ContextMenu() {
setState(s => ({ ...s, dateTimeModal: idx, ...closedContextMenu(s) }));
return;
case 'delete':
- newArr=arr.filter((_,i)=>i!==idx);
- persistMessages(nbId, newArr);
- setState(s => ({ ...s, messages: { ...s.messages, [nbId]: newArr }, ...closedContextMenu(s) }));
+ deleteMessage(nbId, idx);
+ // newArr=arr.filter((_,i)=>i!==idx);
+ // persistMessages(nbId, newArr);
+ setState(s => ({ ...s, /* messages: { ...s.messages, [nbId]: newArr }, */ ...closedContextMenu(s) }));
return;
}
};
@@ -1881,8 +1911,8 @@ function DateTimeModal() {
}
function SettingsModal() {
- const {state, setState} = useContext(AppContext);
- const notebook = getNotebook(state.notebooks, state.selectedNotebook);
+ const {state, setState, getNotebook} = useContext(AppContext);
+ const notebook = getNotebook(state.selectedNotebook);
const [form, setForm] = useState({ ...notebook });
const save = () => setState(s => ({ ...s, notebooks: s.notebooks.map(n => (n.id===notebook.id ? form : n)), showSettings: false }));
const del = () => {
@@ -1916,11 +1946,11 @@ function SettingsModal() {
}
function SearchModal() {
- const {state, setState} = useContext(AppContext);
+ const {state, setState, getNotebook} = useContext(AppContext);
const {query, global} = state.searchModal;
const results = (global
? state.notebooks.flatMap(notebook => (state.messages[notebook.id] || []).map(message => ({ ...message, notebook })))
- : (state.messages[state.selectedNotebook] || []).map(message => ({ ...message, notebook: getNotebook(state.notebooks, state.selectedNotebook) }))
+ : (state.messages[state.selectedNotebook] || []).map(message => ({ ...message, notebook: getNotebook(state.selectedNotebook) }))
).filter(message => message.text.toLowerCase().includes(query.toLowerCase()));
const select = (nbId, mId) => setState(s => ({ ...s, selectedNotebook: nbId, searchModal: { ...s.searchModal, visible: false }, scrollToMessage: mId }));
return html`