From 4901c0c5c0251d86161573a8c67075801f844421 Mon Sep 17 00:00:00 2001 From: marlon-erler Date: Wed, 23 Sep 2026 14:44:34 +0200 Subject: [PATCH] implement showing only replies --- 1.vim | 965 +++++++++++++++++++- src/View/ChatPages/messagePage.css | 16 +- src/View/Components/chatMessage.tsx | 2 + src/View/Components/replyLink.tsx | 22 + src/View/translations.ts | 8 + src/ViewModel/Chat/chatMessageViewModel.ts | 23 +- src/ViewModel/Pages/messagePageViewModel.ts | 6 + 7 files changed, 1003 insertions(+), 39 deletions(-) create mode 100644 src/View/Components/replyLink.tsx diff --git a/1.vim b/1.vim index 3fab9b60..f53d6bf7 100644 --- a/1.vim +++ b/1.vim @@ -132,6 +132,8 @@ set shiftwidth=4 set smarttab set suffixes=.bak,~,.swp,.o,.info,.aux,.log,.dvi,.bbl,.blg,.brf,.cb,.ind,.idx,.ilg,.inx,.out,.toc set updatetime=500 +set winminheight=0 +set winminwidth=0 let s:so_save = &g:so | let s:siso_save = &g:siso | setg so=0 siso=0 | setl so=-1 siso=-1 let v:this_session=expand(":p") silent only @@ -145,13 +147,19 @@ if &shortmess =~ 'A' else set shortmess=aoO endif -badd +15 src/ViewModel/Pages/messagePageViewModel.ts -badd +0 src/ViewModel/Chat/chatMessageViewModel.ts -badd +0 src/Model/Chat/chatModel.ts +badd +1 src/ViewModel/Pages/messagePageViewModel.ts +badd +1 src/ViewModel/Chat/chatMessageViewModel.ts +badd +1 src/Model/Chat/chatModel.ts +badd +37 src/View/Components/chatMessage.tsx +badd +19 src/View/Components/inlineReply.tsx +badd +0 src/View/Components/replyLink.tsx +badd +0 src/View/translations.ts argglobal %argdel set stal=2 tabnew +setlocal\ bufhidden=wipe +tabnew +setlocal\ bufhidden=wipe +tabnew +setlocal\ bufhidden=wipe tabrewind edit src/ViewModel/Pages/messagePageViewModel.ts let s:save_splitbelow = &splitbelow @@ -179,7 +187,6 @@ exe 'vert 3resize ' . ((&columns * 95 + 111) / 223) argglobal enew file NERD_tree_tab_1 -balt src/ViewModel/Pages/messagePageViewModel.ts let s:cpo_save=&cpo set cpo&vim nnoremap :call nerdtree#ui_glue#invokeKeyMap("") @@ -202,6 +209,14 @@ nnoremap R :call nerdtree#ui_glue#invokeKeyMap("R") nnoremap T :call nerdtree#ui_glue#invokeKeyMap("T") nnoremap U :call nerdtree#ui_glue#invokeKeyMap("U") nnoremap X :call nerdtree#ui_glue#invokeKeyMap("X") +nmap [c (GitGutterPrevHunk) +nmap \hp (GitGutterPreviewHunk) +nmap \hu (GitGutterUndoHunk) +nmap \hs (GitGutterStageHunk) +xmap \hs (GitGutterStageHunk) +nmap ]c (GitGutterNextHunk) +xmap ac (GitGutterTextObjectOuterVisual) +omap ac (GitGutterTextObjectOuterPending) nnoremap cd :call nerdtree#ui_glue#invokeKeyMap("cd") nnoremap e :call nerdtree#ui_glue#invokeKeyMap("e") nnoremap f :call nerdtree#ui_glue#invokeKeyMap("f") @@ -209,6 +224,8 @@ nnoremap go :call nerdtree#ui_glue#invokeKeyMap("go") nnoremap gb :call nerdtree#ui_glue#invokeKeyMap("gb") nnoremap gi :call nerdtree#ui_glue#invokeKeyMap("gi") nnoremap gs :call nerdtree#ui_glue#invokeKeyMap("gs") +xmap ic (GitGutterTextObjectInnerVisual) +omap ic (GitGutterTextObjectInnerPending) nnoremap i :call nerdtree#ui_glue#invokeKeyMap("i") nnoremap m :call nerdtree#ui_glue#invokeKeyMap("m") nnoremap o :call nerdtree#ui_glue#invokeKeyMap("o") @@ -359,7 +376,6 @@ setlocal nowrap setlocal wrapmargin=0 wincmd w argglobal -balt src/ViewModel/Pages/messagePageViewModel.ts let s:cpo_save=&cpo set cpo&vim nmap [c (GitGutterPrevHunk) @@ -507,12 +523,12 @@ setlocal wrap setlocal wrapmargin=0 silent! normal! zE let &fdl = &fdl -let s:l = 17 - ((16 * winheight(0) + 17) / 34) +let s:l = 13 - ((12 * winheight(0) + 16) / 33) if s:l < 1 | let s:l = 1 | endif keepjumps exe s:l normal! zt -keepjumps 17 -normal! $ +keepjumps 13 +normal! 054| wincmd w argglobal if bufexists(fnamemodify("src/ViewModel/Chat/chatMessageViewModel.ts", ":p")) | buffer src/ViewModel/Chat/chatMessageViewModel.ts | else | edit src/ViewModel/Chat/chatMessageViewModel.ts | endif @@ -664,12 +680,12 @@ setlocal wrap setlocal wrapmargin=0 silent! normal! zE let &fdl = &fdl -let s:l = 145 - ((15 * winheight(0) + 17) / 34) +let s:l = 137 - ((20 * winheight(0) + 16) / 33) if s:l < 1 | let s:l = 1 | endif keepjumps exe s:l normal! zt -keepjumps 145 -normal! 0 +keepjumps 137 +normal! 048| wincmd w exe 'vert 1resize ' . ((&columns * 31 + 111) / 223) exe 'vert 2resize ' . ((&columns * 95 + 111) / 223) @@ -700,7 +716,7 @@ exe 'vert 2resize ' . ((&columns * 95 + 111) / 223) exe 'vert 3resize ' . ((&columns * 95 + 111) / 223) argglobal enew -file NERD_tree_tab_2 +file NERD_tree_tab_3 balt src/Model/Chat/chatModel.ts let s:cpo_save=&cpo set cpo&vim @@ -724,14 +740,6 @@ nnoremap R :call nerdtree#ui_glue#invokeKeyMap("R") nnoremap T :call nerdtree#ui_glue#invokeKeyMap("T") nnoremap U :call nerdtree#ui_glue#invokeKeyMap("U") nnoremap X :call nerdtree#ui_glue#invokeKeyMap("X") -nmap [c (GitGutterPrevHunk) -nmap \hp (GitGutterPreviewHunk) -nmap \hu (GitGutterUndoHunk) -nmap \hs (GitGutterStageHunk) -xmap \hs (GitGutterStageHunk) -nmap ]c (GitGutterNextHunk) -xmap ac (GitGutterTextObjectOuterVisual) -omap ac (GitGutterTextObjectOuterPending) nnoremap cd :call nerdtree#ui_glue#invokeKeyMap("cd") nnoremap e :call nerdtree#ui_glue#invokeKeyMap("e") nnoremap f :call nerdtree#ui_glue#invokeKeyMap("f") @@ -740,8 +748,6 @@ nnoremap gb :call nerdtree#ui_glue#invokeKeyMap("gb") nnoremap gi :call nerdtree#ui_glue#invokeKeyMap("gi") nnoremap gs :call nerdtree#ui_glue#invokeKeyMap("gs") nnoremap i :call nerdtree#ui_glue#invokeKeyMap("i") -xmap ic (GitGutterTextObjectInnerVisual) -omap ic (GitGutterTextObjectInnerPending) nnoremap m :call nerdtree#ui_glue#invokeKeyMap("m") nnoremap o :call nerdtree#ui_glue#invokeKeyMap("o") nnoremap p :call nerdtree#ui_glue#invokeKeyMap("p") @@ -1039,12 +1045,12 @@ setlocal wrap setlocal wrapmargin=0 silent! normal! zE let &fdl = &fdl -let s:l = 496 - ((18 * winheight(0) + 16) / 33) +let s:l = 483 - ((5 * winheight(0) + 16) / 33) if s:l < 1 | let s:l = 1 | endif keepjumps exe s:l normal! zt -keepjumps 496 -normal! 036| +keepjumps 483 +normal! $ wincmd w argglobal if bufexists(fnamemodify("src/Model/Chat/chatModel.ts", ":p")) | buffer src/Model/Chat/chatModel.ts | else | edit src/Model/Chat/chatModel.ts | endif @@ -1196,18 +1202,920 @@ setlocal wrap setlocal wrapmargin=0 silent! normal! zE let &fdl = &fdl -let s:l = 491 - ((13 * winheight(0) + 16) / 33) +let s:l = 491 - ((0 * winheight(0) + 16) / 33) if s:l < 1 | let s:l = 1 | endif keepjumps exe s:l normal! zt keepjumps 491 normal! $ wincmd w -2wincmd w exe 'vert 1resize ' . ((&columns * 31 + 111) / 223) exe 'vert 2resize ' . ((&columns * 95 + 111) / 223) exe 'vert 3resize ' . ((&columns * 95 + 111) / 223) -tabnext 2 +tabnext +edit src/View/Components/chatMessage.tsx +let s:save_splitbelow = &splitbelow +let s:save_splitright = &splitright +set splitbelow splitright +wincmd _ | wincmd | +vsplit +wincmd _ | wincmd | +vsplit +2wincmd h +wincmd w +wincmd w +let &splitbelow = s:save_splitbelow +let &splitright = s:save_splitright +wincmd t +let s:save_winminheight = &winminheight +let s:save_winminwidth = &winminwidth +set winminheight=0 +set winheight=1 +set winminwidth=0 +set winwidth=1 +exe 'vert 1resize ' . ((&columns * 31 + 111) / 223) +exe 'vert 2resize ' . ((&columns * 95 + 111) / 223) +exe 'vert 3resize ' . ((&columns * 95 + 111) / 223) +argglobal +enew +file NERD_tree_tab_4 +balt src/View/Components/chatMessage.tsx +let s:cpo_save=&cpo +set cpo&vim +nnoremap :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap  :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap  :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap ? :call nerdtree#ui_glue#invokeKeyMap("?") +nnoremap A :call nerdtree#ui_glue#invokeKeyMap("A") +nnoremap B :call nerdtree#ui_glue#invokeKeyMap("B") +nnoremap C :call nerdtree#ui_glue#invokeKeyMap("C") +nnoremap CD :call nerdtree#ui_glue#invokeKeyMap("CD") +nnoremap D :call nerdtree#ui_glue#invokeKeyMap("D") +nnoremap FL :call nerdtree#ui_glue#invokeKeyMap("FL") +nnoremap F :call nerdtree#ui_glue#invokeKeyMap("F") +nnoremap I :call nerdtree#ui_glue#invokeKeyMap("I") +nnoremap J :call nerdtree#ui_glue#invokeKeyMap("J") +nnoremap K :call nerdtree#ui_glue#invokeKeyMap("K") +nnoremap O :call nerdtree#ui_glue#invokeKeyMap("O") +nnoremap P :call nerdtree#ui_glue#invokeKeyMap("P") +nnoremap R :call nerdtree#ui_glue#invokeKeyMap("R") +nnoremap T :call nerdtree#ui_glue#invokeKeyMap("T") +nnoremap U :call nerdtree#ui_glue#invokeKeyMap("U") +nnoremap X :call nerdtree#ui_glue#invokeKeyMap("X") +nmap [c (GitGutterPrevHunk) +nmap \hp (GitGutterPreviewHunk) +nmap \hu (GitGutterUndoHunk) +nmap \hs (GitGutterStageHunk) +xmap \hs (GitGutterStageHunk) +nmap ]c (GitGutterNextHunk) +xmap ac (GitGutterTextObjectOuterVisual) +omap ac (GitGutterTextObjectOuterPending) +nnoremap cd :call nerdtree#ui_glue#invokeKeyMap("cd") +nnoremap e :call nerdtree#ui_glue#invokeKeyMap("e") +nnoremap f :call nerdtree#ui_glue#invokeKeyMap("f") +nnoremap go :call nerdtree#ui_glue#invokeKeyMap("go") +nnoremap gb :call nerdtree#ui_glue#invokeKeyMap("gb") +nnoremap gi :call nerdtree#ui_glue#invokeKeyMap("gi") +nnoremap gs :call nerdtree#ui_glue#invokeKeyMap("gs") +nnoremap i :call nerdtree#ui_glue#invokeKeyMap("i") +xmap ic (GitGutterTextObjectInnerVisual) +omap ic (GitGutterTextObjectInnerPending) +nnoremap m :call nerdtree#ui_glue#invokeKeyMap("m") +nnoremap o :call nerdtree#ui_glue#invokeKeyMap("o") +nnoremap p :call nerdtree#ui_glue#invokeKeyMap("p") +nnoremap q :call nerdtree#ui_glue#invokeKeyMap("q") +nnoremap r :call nerdtree#ui_glue#invokeKeyMap("r") +nnoremap s :call nerdtree#ui_glue#invokeKeyMap("s") +nnoremap t :call nerdtree#ui_glue#invokeKeyMap("t") +nnoremap u :call nerdtree#ui_glue#invokeKeyMap("u") +nnoremap x :call nerdtree#ui_glue#invokeKeyMap("x") +nnoremap :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap <2-LeftMouse> :call nerdtree#ui_glue#invokeKeyMap("<2-LeftMouse>") +nnoremap :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap :call nerdtree#ui_glue#invokeKeyMap("") +let &cpo=s:cpo_save +unlet s:cpo_save +setlocal keymap= +setlocal noarabic +setlocal noautoindent +setlocal backupcopy= +setlocal balloonexpr= +setlocal nobinary +setlocal nobreakindent +setlocal breakindentopt= +setlocal bufhidden=hide +setlocal nobuflisted +setlocal buftype=nofile +setlocal nocindent +setlocal cinkeys=0{,0},0),0],:,0#,!^F,o,O,e +setlocal cinoptions= +setlocal cinscopedecls=public,protected,private +setlocal cinwords=if,else,while,do,for,switch +setlocal colorcolumn= +setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- +setlocal commentstring=/*%s*/ +setlocal complete=.,w,b,u,t,i +setlocal concealcursor=nvic +setlocal conceallevel=2 +setlocal completefunc= +setlocal nocopyindent +setlocal cryptmethod= +setlocal nocursorbind +setlocal nocursorcolumn +setlocal cursorline +setlocal cursorlineopt=both +setlocal define= +setlocal dictionary= +setlocal nodiff +setlocal equalprg= +setlocal errorformat= +setlocal noexpandtab +if &filetype != 'nerdtree' +setlocal filetype=nerdtree +endif +setlocal fillchars= +setlocal fixendofline +setlocal foldcolumn=0 +setlocal nofoldenable +setlocal foldexpr=0 +setlocal foldignore=# +setlocal foldlevel=0 +setlocal foldmarker={{{,}}} +setlocal foldmethod=manual +setlocal foldminlines=1 +setlocal foldnestmax=20 +setlocal foldtext=foldtext() +setlocal formatexpr= +setlocal formatoptions=tcq +setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* +setlocal formatprg= +setlocal grepprg= +setlocal iminsert=0 +setlocal imsearch=-1 +setlocal include= +setlocal includeexpr= +setlocal indentexpr= +setlocal indentkeys=0{,0},0),0],:,0#,!^F,o,O,e +setlocal noinfercase +setlocal iskeyword=@,48-57,_,192-255 +setlocal keywordprg= +setlocal nolinebreak +setlocal nolisp +setlocal lispoptions= +setlocal lispwords= +setlocal nolist +setlocal listchars= +setlocal makeencoding= +setlocal makeprg= +setlocal matchpairs=(:),{:},[:] +setlocal nomodeline +setlocal nomodifiable +setlocal nrformats=bin,octal,hex +set number +setlocal nonumber +setlocal numberwidth=4 +setlocal omnifunc= +setlocal path= +setlocal nopreserveindent +setlocal nopreviewwindow +setlocal quoteescape=\\ +setlocal readonly +setlocal norelativenumber +setlocal norightleft +setlocal rightleftcmd=search +setlocal noscrollbind +setlocal scrolloff=-1 +setlocal shiftwidth=4 +setlocal noshortname +setlocal showbreak= +setlocal sidescrolloff=-1 +set signcolumn=yes +setlocal signcolumn=yes +setlocal nosmartindent +setlocal nosmoothscroll +setlocal softtabstop=0 +setlocal nospell +setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ +setlocal spellfile= +setlocal spelllang=en +setlocal spelloptions= +setlocal statusline=%{exists('b:NERDTree')?b:NERDTree.root.path.str():''} +setlocal suffixesadd= +setlocal noswapfile +setlocal synmaxcol=3000 +if &syntax != 'nerdtree' +setlocal syntax=nerdtree +endif +setlocal tabstop=8 +setlocal tagcase= +setlocal tagfunc= +setlocal tags= +setlocal termwinkey= +setlocal termwinscroll=10000 +setlocal termwinsize= +setlocal textwidth=0 +setlocal thesaurus= +setlocal thesaurusfunc= +setlocal noundofile +setlocal undolevels=-123456 +setlocal varsofttabstop= +setlocal vartabstop= +setlocal virtualedit= +setlocal wincolor= +setlocal nowinfixheight +setlocal winfixwidth +setlocal nowrap +setlocal wrapmargin=0 +wincmd w +argglobal +balt src/Model/Chat/chatModel.ts +let s:cpo_save=&cpo +set cpo&vim +nmap [c (GitGutterPrevHunk) +nmap \hp (GitGutterPreviewHunk) +nmap \hu (GitGutterUndoHunk) +nmap \hs (GitGutterStageHunk) +xmap \hs (GitGutterStageHunk) +nmap ]c (GitGutterNextHunk) +xmap ac (GitGutterTextObjectOuterVisual) +omap ac (GitGutterTextObjectOuterPending) +xmap ic (GitGutterTextObjectInnerVisual) +omap ic (GitGutterTextObjectInnerPending) +let &cpo=s:cpo_save +unlet s:cpo_save +setlocal keymap= +setlocal noarabic +setlocal autoindent +setlocal backupcopy= +setlocal balloonexpr= +setlocal nobinary +setlocal nobreakindent +setlocal breakindentopt= +setlocal bufhidden= +setlocal buflisted +setlocal buftype= +setlocal nocindent +setlocal cinkeys=0{,0},0),0],:,0#,!^F,o,O,e +setlocal cinoptions= +setlocal cinscopedecls=public,protected,private +setlocal cinwords=if,else,while,do,for,switch +setlocal colorcolumn= +setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- +setlocal commentstring=//\ %s +setlocal complete=.,w,b,u,t,i +setlocal concealcursor= +setlocal conceallevel=0 +setlocal completefunc= +setlocal nocopyindent +setlocal cryptmethod= +setlocal nocursorbind +setlocal nocursorcolumn +setlocal nocursorline +setlocal cursorlineopt=both +setlocal define= +setlocal dictionary= +setlocal nodiff +setlocal equalprg= +setlocal errorformat=%+A\ %#%f\ %#(%l\\,%c):\ %m,%C%m +setlocal noexpandtab +if &filetype != 'typescriptreact' +setlocal filetype=typescriptreact +endif +setlocal fillchars= +setlocal fixendofline +setlocal foldcolumn=0 +setlocal foldenable +setlocal foldexpr=0 +setlocal foldignore=# +setlocal foldlevel=0 +setlocal foldmarker={{{,}}} +setlocal foldmethod=manual +setlocal foldminlines=1 +setlocal foldnestmax=20 +setlocal foldtext=foldtext() +setlocal formatexpr= +setlocal formatoptions=croql +setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* +setlocal formatprg= +setlocal grepprg= +setlocal iminsert=0 +setlocal imsearch=-1 +setlocal include= +setlocal includeexpr= +setlocal indentexpr=GetTsxIndent() +setlocal indentkeys=0{,0},0),0],0,,!^F,o,O,e,*,<>>,<<>,/ +setlocal noinfercase +setlocal iskeyword=@,48-57,_,192-255,$ +setlocal keywordprg= +setlocal nolinebreak +setlocal nolisp +setlocal lispoptions= +setlocal lispwords= +setlocal nolist +setlocal listchars= +setlocal makeencoding= +setlocal makeprg=tsc\ \ $*\ % +setlocal matchpairs=(:),{:},[:] +setlocal nomodeline +setlocal modifiable +setlocal nrformats=bin,octal,hex +set number +setlocal number +setlocal numberwidth=4 +setlocal omnifunc= +setlocal path= +setlocal nopreserveindent +setlocal nopreviewwindow +setlocal quoteescape=\\ +setlocal noreadonly +setlocal norelativenumber +setlocal norightleft +setlocal rightleftcmd=search +setlocal noscrollbind +setlocal scrolloff=-1 +setlocal shiftwidth=4 +setlocal noshortname +setlocal showbreak= +setlocal sidescrolloff=-1 +set signcolumn=yes +setlocal signcolumn=yes +setlocal nosmartindent +setlocal nosmoothscroll +setlocal softtabstop=0 +setlocal nospell +setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ +setlocal spellfile= +setlocal spelllang=en +setlocal spelloptions= +setlocal statusline= +setlocal suffixesadd=.ts,.tsx +setlocal swapfile +setlocal synmaxcol=3000 +if &syntax != 'typescriptreact' +setlocal syntax=typescriptreact +endif +setlocal tabstop=8 +setlocal tagcase= +setlocal tagfunc= +setlocal tags= +setlocal termwinkey= +setlocal termwinscroll=10000 +setlocal termwinsize= +setlocal textwidth=0 +setlocal thesaurus= +setlocal thesaurusfunc= +setlocal noundofile +setlocal undolevels=-123456 +setlocal varsofttabstop= +setlocal vartabstop= +setlocal virtualedit= +setlocal wincolor= +setlocal nowinfixheight +setlocal nowinfixwidth +setlocal wrap +setlocal wrapmargin=0 +silent! normal! zE +let &fdl = &fdl +let s:l = 39 - ((14 * winheight(0) + 16) / 33) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 39 +normal! $ +wincmd w +argglobal +if bufexists(fnamemodify("src/View/Components/replyLink.tsx", ":p")) | buffer src/View/Components/replyLink.tsx | else | edit src/View/Components/replyLink.tsx | endif +balt src/View/Components/inlineReply.tsx +let s:cpo_save=&cpo +set cpo&vim +nmap [c (GitGutterPrevHunk) +nmap \hp (GitGutterPreviewHunk) +nmap \hu (GitGutterUndoHunk) +nmap \hs (GitGutterStageHunk) +xmap \hs (GitGutterStageHunk) +nmap ]c (GitGutterNextHunk) +xmap ac (GitGutterTextObjectOuterVisual) +omap ac (GitGutterTextObjectOuterPending) +xmap ic (GitGutterTextObjectInnerVisual) +omap ic (GitGutterTextObjectInnerPending) +let &cpo=s:cpo_save +unlet s:cpo_save +setlocal keymap= +setlocal noarabic +setlocal autoindent +setlocal backupcopy= +setlocal balloonexpr= +setlocal nobinary +setlocal nobreakindent +setlocal breakindentopt= +setlocal bufhidden= +setlocal buflisted +setlocal buftype= +setlocal nocindent +setlocal cinkeys=0{,0},0),0],:,0#,!^F,o,O,e +setlocal cinoptions= +setlocal cinscopedecls=public,protected,private +setlocal cinwords=if,else,while,do,for,switch +setlocal colorcolumn= +setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- +setlocal commentstring=//\ %s +setlocal complete=.,w,b,u,t,i +setlocal concealcursor= +setlocal conceallevel=0 +setlocal completefunc= +setlocal nocopyindent +setlocal cryptmethod= +setlocal nocursorbind +setlocal nocursorcolumn +setlocal nocursorline +setlocal cursorlineopt=both +setlocal define= +setlocal dictionary= +setlocal nodiff +setlocal equalprg= +setlocal errorformat=%+A\ %#%f\ %#(%l\\,%c):\ %m,%C%m +setlocal noexpandtab +if &filetype != 'typescriptreact' +setlocal filetype=typescriptreact +endif +setlocal fillchars= +setlocal fixendofline +setlocal foldcolumn=0 +setlocal foldenable +setlocal foldexpr=0 +setlocal foldignore=# +setlocal foldlevel=0 +setlocal foldmarker={{{,}}} +setlocal foldmethod=manual +setlocal foldminlines=1 +setlocal foldnestmax=20 +setlocal foldtext=foldtext() +setlocal formatexpr= +setlocal formatoptions=croql +setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* +setlocal formatprg= +setlocal grepprg= +setlocal iminsert=0 +setlocal imsearch=-1 +setlocal include= +setlocal includeexpr= +setlocal indentexpr=GetTsxIndent() +setlocal indentkeys=0{,0},0),0],0,,!^F,o,O,e,*,<>>,<<>,/ +setlocal noinfercase +setlocal iskeyword=@,48-57,_,192-255,$ +setlocal keywordprg= +setlocal nolinebreak +setlocal nolisp +setlocal lispoptions= +setlocal lispwords= +setlocal nolist +setlocal listchars= +setlocal makeencoding= +setlocal makeprg=tsc\ \ $*\ % +setlocal matchpairs=(:),{:},[:] +setlocal nomodeline +setlocal modifiable +setlocal nrformats=bin,octal,hex +set number +setlocal number +setlocal numberwidth=4 +setlocal omnifunc= +setlocal path= +setlocal nopreserveindent +setlocal nopreviewwindow +setlocal quoteescape=\\ +setlocal noreadonly +setlocal norelativenumber +setlocal norightleft +setlocal rightleftcmd=search +setlocal noscrollbind +setlocal scrolloff=-1 +setlocal shiftwidth=4 +setlocal noshortname +setlocal showbreak= +setlocal sidescrolloff=-1 +set signcolumn=yes +setlocal signcolumn=yes +setlocal nosmartindent +setlocal nosmoothscroll +setlocal softtabstop=0 +setlocal nospell +setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ +setlocal spellfile= +setlocal spelllang=en +setlocal spelloptions= +setlocal statusline= +setlocal suffixesadd=.ts,.tsx +setlocal swapfile +setlocal synmaxcol=3000 +if &syntax != 'typescriptreact' +setlocal syntax=typescriptreact +endif +setlocal tabstop=8 +setlocal tagcase= +setlocal tagfunc= +setlocal tags= +setlocal termwinkey= +setlocal termwinscroll=10000 +setlocal termwinsize= +setlocal textwidth=0 +setlocal thesaurus= +setlocal thesaurusfunc= +setlocal noundofile +setlocal undolevels=-123456 +setlocal varsofttabstop= +setlocal vartabstop= +setlocal virtualedit= +setlocal wincolor= +setlocal nowinfixheight +setlocal nowinfixwidth +setlocal wrap +setlocal wrapmargin=0 +silent! normal! zE +let &fdl = &fdl +let s:l = 6 - ((5 * winheight(0) + 16) / 33) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 6 +normal! 055| +wincmd w +exe 'vert 1resize ' . ((&columns * 31 + 111) / 223) +exe 'vert 2resize ' . ((&columns * 95 + 111) / 223) +exe 'vert 3resize ' . ((&columns * 95 + 111) / 223) +tabnext +edit src/View/translations.ts +let s:save_splitbelow = &splitbelow +let s:save_splitright = &splitright +set splitbelow splitright +wincmd _ | wincmd | +vsplit +1wincmd h +wincmd w +let &splitbelow = s:save_splitbelow +let &splitright = s:save_splitright +wincmd t +let s:save_winminheight = &winminheight +let s:save_winminwidth = &winminwidth +set winminheight=0 +set winheight=1 +set winminwidth=0 +set winwidth=1 +exe 'vert 1resize ' . ((&columns * 31 + 111) / 223) +exe 'vert 2resize ' . ((&columns * 191 + 111) / 223) +argglobal +enew +file NERD_tree_tab_5 +balt src/View/translations.ts +let s:cpo_save=&cpo +set cpo&vim +nnoremap :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap  :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap  :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap ? :call nerdtree#ui_glue#invokeKeyMap("?") +nnoremap A :call nerdtree#ui_glue#invokeKeyMap("A") +nnoremap B :call nerdtree#ui_glue#invokeKeyMap("B") +nnoremap C :call nerdtree#ui_glue#invokeKeyMap("C") +nnoremap CD :call nerdtree#ui_glue#invokeKeyMap("CD") +nnoremap D :call nerdtree#ui_glue#invokeKeyMap("D") +nnoremap FL :call nerdtree#ui_glue#invokeKeyMap("FL") +nnoremap F :call nerdtree#ui_glue#invokeKeyMap("F") +nnoremap I :call nerdtree#ui_glue#invokeKeyMap("I") +nnoremap J :call nerdtree#ui_glue#invokeKeyMap("J") +nnoremap K :call nerdtree#ui_glue#invokeKeyMap("K") +nnoremap O :call nerdtree#ui_glue#invokeKeyMap("O") +nnoremap P :call nerdtree#ui_glue#invokeKeyMap("P") +nnoremap R :call nerdtree#ui_glue#invokeKeyMap("R") +nnoremap T :call nerdtree#ui_glue#invokeKeyMap("T") +nnoremap U :call nerdtree#ui_glue#invokeKeyMap("U") +nnoremap X :call nerdtree#ui_glue#invokeKeyMap("X") +nmap [c (GitGutterPrevHunk) +nmap \hp (GitGutterPreviewHunk) +nmap \hu (GitGutterUndoHunk) +nmap \hs (GitGutterStageHunk) +xmap \hs (GitGutterStageHunk) +nmap ]c (GitGutterNextHunk) +xmap ac (GitGutterTextObjectOuterVisual) +omap ac (GitGutterTextObjectOuterPending) +nnoremap cd :call nerdtree#ui_glue#invokeKeyMap("cd") +nnoremap e :call nerdtree#ui_glue#invokeKeyMap("e") +nnoremap f :call nerdtree#ui_glue#invokeKeyMap("f") +nnoremap go :call nerdtree#ui_glue#invokeKeyMap("go") +nnoremap gb :call nerdtree#ui_glue#invokeKeyMap("gb") +nnoremap gi :call nerdtree#ui_glue#invokeKeyMap("gi") +nnoremap gs :call nerdtree#ui_glue#invokeKeyMap("gs") +nnoremap i :call nerdtree#ui_glue#invokeKeyMap("i") +xmap ic (GitGutterTextObjectInnerVisual) +omap ic (GitGutterTextObjectInnerPending) +nnoremap m :call nerdtree#ui_glue#invokeKeyMap("m") +nnoremap o :call nerdtree#ui_glue#invokeKeyMap("o") +nnoremap p :call nerdtree#ui_glue#invokeKeyMap("p") +nnoremap q :call nerdtree#ui_glue#invokeKeyMap("q") +nnoremap r :call nerdtree#ui_glue#invokeKeyMap("r") +nnoremap s :call nerdtree#ui_glue#invokeKeyMap("s") +nnoremap t :call nerdtree#ui_glue#invokeKeyMap("t") +nnoremap u :call nerdtree#ui_glue#invokeKeyMap("u") +nnoremap x :call nerdtree#ui_glue#invokeKeyMap("x") +nnoremap :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap <2-LeftMouse> :call nerdtree#ui_glue#invokeKeyMap("<2-LeftMouse>") +nnoremap :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap :call nerdtree#ui_glue#invokeKeyMap("") +nnoremap :call nerdtree#ui_glue#invokeKeyMap("") +let &cpo=s:cpo_save +unlet s:cpo_save +setlocal keymap= +setlocal noarabic +setlocal noautoindent +setlocal backupcopy= +setlocal balloonexpr= +setlocal nobinary +setlocal nobreakindent +setlocal breakindentopt= +setlocal bufhidden=hide +setlocal nobuflisted +setlocal buftype=nofile +setlocal nocindent +setlocal cinkeys=0{,0},0),0],:,0#,!^F,o,O,e +setlocal cinoptions= +setlocal cinscopedecls=public,protected,private +setlocal cinwords=if,else,while,do,for,switch +setlocal colorcolumn= +setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- +setlocal commentstring=/*%s*/ +setlocal complete=.,w,b,u,t,i +setlocal concealcursor=nvic +setlocal conceallevel=2 +setlocal completefunc= +setlocal nocopyindent +setlocal cryptmethod= +setlocal nocursorbind +setlocal nocursorcolumn +setlocal cursorline +setlocal cursorlineopt=both +setlocal define= +setlocal dictionary= +setlocal nodiff +setlocal equalprg= +setlocal errorformat= +setlocal noexpandtab +if &filetype != 'nerdtree' +setlocal filetype=nerdtree +endif +setlocal fillchars= +setlocal fixendofline +setlocal foldcolumn=0 +setlocal nofoldenable +setlocal foldexpr=0 +setlocal foldignore=# +setlocal foldlevel=0 +setlocal foldmarker={{{,}}} +setlocal foldmethod=manual +setlocal foldminlines=1 +setlocal foldnestmax=20 +setlocal foldtext=foldtext() +setlocal formatexpr= +setlocal formatoptions=tcq +setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* +setlocal formatprg= +setlocal grepprg= +setlocal iminsert=0 +setlocal imsearch=-1 +setlocal include= +setlocal includeexpr= +setlocal indentexpr= +setlocal indentkeys=0{,0},0),0],:,0#,!^F,o,O,e +setlocal noinfercase +setlocal iskeyword=@,48-57,_,192-255 +setlocal keywordprg= +setlocal nolinebreak +setlocal nolisp +setlocal lispoptions= +setlocal lispwords= +setlocal nolist +setlocal listchars= +setlocal makeencoding= +setlocal makeprg= +setlocal matchpairs=(:),{:},[:] +setlocal nomodeline +setlocal nomodifiable +setlocal nrformats=bin,octal,hex +set number +setlocal nonumber +setlocal numberwidth=4 +setlocal omnifunc= +setlocal path= +setlocal nopreserveindent +setlocal nopreviewwindow +setlocal quoteescape=\\ +setlocal readonly +setlocal norelativenumber +setlocal norightleft +setlocal rightleftcmd=search +setlocal noscrollbind +setlocal scrolloff=-1 +setlocal shiftwidth=4 +setlocal noshortname +setlocal showbreak= +setlocal sidescrolloff=-1 +set signcolumn=yes +setlocal signcolumn=yes +setlocal nosmartindent +setlocal nosmoothscroll +setlocal softtabstop=0 +setlocal nospell +setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ +setlocal spellfile= +setlocal spelllang=en +setlocal spelloptions= +setlocal statusline=%{exists('b:NERDTree')?b:NERDTree.root.path.str():''} +setlocal suffixesadd= +setlocal noswapfile +setlocal synmaxcol=3000 +if &syntax != 'nerdtree' +setlocal syntax=nerdtree +endif +setlocal tabstop=8 +setlocal tagcase= +setlocal tagfunc= +setlocal tags= +setlocal termwinkey= +setlocal termwinscroll=10000 +setlocal termwinsize= +setlocal textwidth=0 +setlocal thesaurus= +setlocal thesaurusfunc= +setlocal noundofile +setlocal undolevels=-123456 +setlocal varsofttabstop= +setlocal vartabstop= +setlocal virtualedit= +setlocal wincolor= +setlocal nowinfixheight +setlocal winfixwidth +setlocal nowrap +setlocal wrapmargin=0 +wincmd w +argglobal +balt src/View/Components/replyLink.tsx +let s:cpo_save=&cpo +set cpo&vim +nmap [c (GitGutterPrevHunk) +nmap \hp (GitGutterPreviewHunk) +nmap \hu (GitGutterUndoHunk) +nmap \hs (GitGutterStageHunk) +xmap \hs (GitGutterStageHunk) +nmap ]c (GitGutterNextHunk) +xmap ac (GitGutterTextObjectOuterVisual) +omap ac (GitGutterTextObjectOuterPending) +xmap ic (GitGutterTextObjectInnerVisual) +omap ic (GitGutterTextObjectInnerPending) +let &cpo=s:cpo_save +unlet s:cpo_save +setlocal keymap= +setlocal noarabic +setlocal autoindent +setlocal backupcopy= +setlocal balloonexpr= +setlocal nobinary +setlocal nobreakindent +setlocal breakindentopt= +setlocal bufhidden= +setlocal buflisted +setlocal buftype= +setlocal nocindent +setlocal cinkeys=0{,0},0),0],:,0#,!^F,o,O,e +setlocal cinoptions= +setlocal cinscopedecls=public,protected,private +setlocal cinwords=if,else,while,do,for,switch +setlocal colorcolumn= +setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- +setlocal commentstring=//\ %s +setlocal complete=.,w,b,u,t,i +setlocal concealcursor= +setlocal conceallevel=0 +setlocal completefunc= +setlocal nocopyindent +setlocal cryptmethod= +setlocal nocursorbind +setlocal nocursorcolumn +setlocal nocursorline +setlocal cursorlineopt=both +setlocal define= +setlocal dictionary= +setlocal nodiff +setlocal equalprg= +setlocal errorformat=%+A\ %#%f\ %#(%l\\,%c):\ %m,%C%m +setlocal noexpandtab +if &filetype != 'typescript' +setlocal filetype=typescript +endif +setlocal fillchars= +setlocal fixendofline +setlocal foldcolumn=0 +setlocal foldenable +setlocal foldexpr=0 +setlocal foldignore=# +setlocal foldlevel=0 +setlocal foldmarker={{{,}}} +setlocal foldmethod=manual +setlocal foldminlines=1 +setlocal foldnestmax=20 +setlocal foldtext=foldtext() +setlocal formatexpr= +setlocal formatoptions=croql +setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* +setlocal formatprg= +setlocal grepprg= +setlocal iminsert=0 +setlocal imsearch=-1 +setlocal include= +setlocal includeexpr= +setlocal indentexpr=GetTypescriptIndent() +setlocal indentkeys=0{,0},0),0],:,0#,!^F,o,O,e,0],0) +setlocal noinfercase +setlocal iskeyword=@,48-57,_,192-255,$ +setlocal keywordprg= +setlocal nolinebreak +setlocal nolisp +setlocal lispoptions= +setlocal lispwords= +setlocal nolist +setlocal listchars= +setlocal makeencoding= +setlocal makeprg=tsc\ \ $*\ % +setlocal matchpairs=(:),{:},[:] +setlocal nomodeline +setlocal modifiable +setlocal nrformats=bin,octal,hex +set number +setlocal number +setlocal numberwidth=4 +setlocal omnifunc= +setlocal path= +setlocal nopreserveindent +setlocal nopreviewwindow +setlocal quoteescape=\\ +setlocal noreadonly +setlocal norelativenumber +setlocal norightleft +setlocal rightleftcmd=search +setlocal noscrollbind +setlocal scrolloff=-1 +setlocal shiftwidth=4 +setlocal noshortname +setlocal showbreak= +setlocal sidescrolloff=-1 +set signcolumn=yes +setlocal signcolumn=yes +setlocal nosmartindent +setlocal nosmoothscroll +setlocal softtabstop=0 +setlocal nospell +setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ +setlocal spellfile= +setlocal spelllang=en +setlocal spelloptions= +setlocal statusline= +setlocal suffixesadd=.ts,.tsx +setlocal swapfile +setlocal synmaxcol=3000 +if &syntax != 'typescript' +setlocal syntax=typescript +endif +setlocal tabstop=8 +setlocal tagcase= +setlocal tagfunc= +setlocal tags= +setlocal termwinkey= +setlocal termwinscroll=10000 +setlocal termwinsize= +setlocal textwidth=0 +setlocal thesaurus= +setlocal thesaurusfunc= +setlocal noundofile +setlocal undolevels=-123456 +setlocal varsofttabstop= +setlocal vartabstop= +setlocal virtualedit= +setlocal wincolor= +setlocal nowinfixheight +setlocal nowinfixwidth +setlocal wrap +setlocal wrapmargin=0 +silent! normal! zE +let &fdl = &fdl +let s:l = 183 - ((12 * winheight(0) + 16) / 33) +if s:l < 1 | let s:l = 1 | endif +keepjumps exe s:l +normal! zt +keepjumps 183 +normal! $ +wincmd w +2wincmd w +exe 'vert 1resize ' . ((&columns * 31 + 111) / 223) +exe 'vert 2resize ' . ((&columns * 191 + 111) / 223) +tabnext 4 set stal=1 if exists('s:wipebuf') && len(win_findbuf(s:wipebuf)) == 0 silent exe 'bwipe ' . s:wipebuf @@ -1222,7 +2130,6 @@ if filereadable(s:sx) exe "source " . fnameescape(s:sx) endif let &g:so = s:so_save | let &g:siso = s:siso_save -nohlsearch doautoall SessionLoadPost unlet SessionLoad " vim: set ft=vim : diff --git a/src/View/ChatPages/messagePage.css b/src/View/ChatPages/messagePage.css index 7b82cd5e..21b6ba70 100644 --- a/src/View/ChatPages/messagePage.css +++ b/src/View/ChatPages/messagePage.css @@ -234,7 +234,7 @@ text-align: right; } -.message-bubble > .inline-reply { +.message-bubble > :is(.inline-reply, .reply-link, .message-reaction-row) { cursor: pointer; display: flex; @@ -248,20 +248,20 @@ overflow: hidden; padding: 0px var(--control-padding); - gap: var(--text-gap); +} +.message-bubble > .inline-reply { border-left: var(--outline-width) solid var(--primary); + gap: var(--text-gap); +} + +.message-bubble > .reply-link { + gap: 5px; } .message-bubble > .message-reaction-row { - max-width: var(--max-input-width); - width: 100%; - padding: var(--gap-between-tiles); - background: var(--surface-alt); - display: none !important; - overflow: hidden; } .message-bubble > .message-reaction-row:has(button:not([count="0"])) { diff --git a/src/View/Components/chatMessage.tsx b/src/View/Components/chatMessage.tsx index 42f50888..5d8829a1 100644 --- a/src/View/Components/chatMessage.tsx +++ b/src/View/Components/chatMessage.tsx @@ -5,6 +5,7 @@ import * as React from "../../react"; import CoreViewModel from "../../ViewModel/Global/coreViewModel"; import ChatMessageViewModel from "../../ViewModel/Chat/chatMessageViewModel"; import { ChatMessageStatuses } from "../../Model/Chat/chatModel"; +import {ReplyLink} from "./replyLink"; export function ChatMessage( coreViewModel: CoreViewModel, @@ -75,6 +76,7 @@ export function ChatMessage( {MessageReactionButtonRow(coreViewModel, chatMessageViewModel)} + {ReplyLink(coreViewModel, chatMessageViewModel)} {ChatMessageInfoModal(coreViewModel, chatMessageViewModel)} ); diff --git a/src/View/Components/replyLink.tsx b/src/View/Components/replyLink.tsx new file mode 100644 index 00000000..0ae79c64 --- /dev/null +++ b/src/View/Components/replyLink.tsx @@ -0,0 +1,22 @@ +import * as React from "../../react"; +import ChatMessageViewModel from "../../ViewModel/Chat/chatMessageViewModel"; +import CoreViewModel from "../../ViewModel/Global/coreViewModel"; + +export function ReplyLink(coreViewModel: CoreViewModel, chatMessageViewModel: ChatMessageViewModel) { + const isHidden = React.createProxyState([chatMessageViewModel.replyCount], ()=>chatMessageViewModel.replyCount.value == 0); + + function select() { + chatMessageViewModel.messagePageViewModel.replyViewSelectedMessage.value = chatMessageViewModel; + } + + return ( + + ); +} diff --git a/src/View/translations.ts b/src/View/translations.ts index 9793717b..8f94eaaa 100644 --- a/src/View/translations.ts +++ b/src/View/translations.ts @@ -248,6 +248,10 @@ const englishTranslations = { attentionReaction: "Reaction: exclamation mark", doubleAttentionReaction: "Reaction: double exclamation mark", questionReaction: "Reaction: question mark", + + // + + replyPrefixLabel: "Replies: ", }, task: { @@ -569,6 +573,8 @@ export const allTranslations: { attentionReaction: "Reaktion: Ausrufezeichen", doubleAttentionReaction: "Reaktion: doppeltes Ausrufezeichen", questionReaction: "Reaktion: Fragezeichen", + + replyPrefixLabel: "Antworten: ", }, task: { @@ -871,6 +877,8 @@ export const allTranslations: { attentionReaction: "Reaccion: signo de atención", doubleAttentionReaction: "Reaccion: signo de atención doble", questionReaction: "Reaccion: signo de interrogación", + + replyPrefixLabel: "Respuestas: ", }, task: { diff --git a/src/ViewModel/Chat/chatMessageViewModel.ts b/src/ViewModel/Chat/chatMessageViewModel.ts index 54542567..587ac4f5 100644 --- a/src/ViewModel/Chat/chatMessageViewModel.ts +++ b/src/ViewModel/Chat/chatMessageViewModel.ts @@ -16,6 +16,8 @@ export default class ChatMessageViewModel { dateSent: string = ""; body: React.State = new React.State(""); inlineReply: ChatMessageViewModel | undefined = undefined; + replies: React.MapState = new React.MapState(); + replyCount: React.State = React.createProxyState([this.replies], ()=>this.replies.value.size); status: React.State = new React.State( undefined, ); @@ -133,6 +135,7 @@ export default class ChatMessageViewModel { this.messagePageViewModel.chatMessageViewModels.value.get( this.chatMessage.inlineReplyId, ); + this.inlineReply.replies.set(this.chatMessage.id, this); } }; @@ -147,9 +150,16 @@ export default class ChatMessageViewModel { this.sentByUser = sentByUser; this.loadData(); + let hideForReactions: boolean = false; + let hideForReplyView: boolean = false; + + const updateHiding = () => { + this.isHidden.value = hideForReactions || hideForReplyView; + } + this.messagePageViewModel.reactionFilter.subscribe((content) => { if (content == undefined) { - this.isHidden.value = false; + hideForReactions = false; return; } @@ -181,7 +191,16 @@ export default class ChatMessageViewModel { } } - this.isHidden.value = count == 0; + hideForReactions = count == 0; + updateHiding(); }); + + this.messagePageViewModel.replyViewSelectedMessage.subscribe(selectedMessage => { + if (selectedMessage == undefined) hideForReplyView = false; + else if (selectedMessage == this) hideForReplyView = false; + else if (selectedMessage == this.inlineReply) hideForReplyView = false; + else hideForReplyView = true; + updateHiding(); + }) } } diff --git a/src/ViewModel/Pages/messagePageViewModel.ts b/src/ViewModel/Pages/messagePageViewModel.ts index 32720a6a..51d570ed 100644 --- a/src/ViewModel/Pages/messagePageViewModel.ts +++ b/src/ViewModel/Pages/messagePageViewModel.ts @@ -16,6 +16,7 @@ export default class MessagePageViewModel extends Context { new React.MapState(); filteredMessageViewModels: React.ListState = new React.ListState(); + replyViewSelectedMessage: React.State = new React.State(undefined); searchViewModel: SearchViewModel; isFilterModalOpen = new React.State(false); reactionFilter = new React.State(undefined); @@ -25,6 +26,7 @@ export default class MessagePageViewModel extends Context { undefined, ); composingMessage = new React.State(""); + focusSetter = new React.State(null); // guards @@ -131,6 +133,10 @@ export default class MessagePageViewModel extends Context { this.searchViewModel.search(""); }; + resetReplyView = (): void => { + this.replyViewSelectedMessage.value = undefined; + } + setFocus = (): void => { this.focusSetter.callSubscriptions(); };