{"version":3,"sources":["utils/history.ts","store/Actions.ts","store/reducer.ts","store/StoreState.ts","ServerApi.ts","models/models.ts","components/WordSearchComponent.tsx","components/RecentWordsComponent.tsx","pages/MainPage.tsx","components/IndexWordListComponent.tsx","components/WordEditorComponent.tsx","components/DictionaryManagerComponent.tsx","components/UserManagerComponent.tsx","components/PrintListComponent.tsx","components/ImportExportComponent.tsx","components/SearchResultComponent.tsx","pages/SearchResultPage.tsx","components/WordDetailComponen.tsx","pages/WordDetailPage.tsx","components/ReplaceComponent.tsx","components/App.tsx","index.tsx"],"names":["createBrowserHistory","Actions","setAuthInfoAction","createStandardAction","setSelectedSearchDictionaryGroups","setIndexWordsAction","setIndexWordsCountAction","addIndexWordAction","updateIndexWordAction","deleteIndexWordAction","checkDeleteIndexWordAction","deleteDeleteCheckedIndexWordsAction","reducer","createReducer","authInfo","indexWords","indexWordsCount","printWords","selectedSearchDictionaryGroups","handleAction","state","action","produce","draft","payload","i","stopIndex","startIndex","loadedIndexWords","setTimeout","window","document","getElementsByClassName","scrollTop","indexWordIndex","deleteChecked","axios","interceptors","response","use","error","config","url","includes","status","alert","data","Promise","reject","SearchLocationType","SearchPositionType","ServerApi","getAuthInfo","a","get","getUsers","pageNumber","pageSize","getManagers","updateRole","userId","role","patch","deleteUser","delete","getIndexWordIndex","wordId","dictionaryGroupIds","post","getIndexWordsCount","getIndexWords","getRecentWords","search","groupIds","filterKeyword","inTerm","inDescription","searchPosition","createWord","dictionaryId","term","description","getWord","updateWord","version","put","deleteWord","id","deleteManyWords","wordIds","createDictionaryGroup","dictionaryGroupName","getDictionaryGroups","includeCount","updateDictionaryGroup","dictionaryGroupId","createDictionary","dictionaryName","updateDictionary","queryString","require","WordSearchComponent","dispatch","useDispatch","history","useHistory","useState","allDictionaryGroups","setAllDictionaryGroups","searchKeyword","setSearchKeyword","Term","searchLocationType","setSearchLocationType","StartsWith","searchPositionType","setSearchPositionType","selectedDictionaryGroups","useSelector","useLocalStorage","dictionaryGroupsFromLocalStorage","setSelectedDictionaryGroupsFromLocalStorage","useEffect","then","dgs","map","dg","value","label","name","selectedDgsExistingInLocalStorage","filter","length","_arr1","_arr2","Array","isArray","arr1","concat","sort","arr2","arraysEqual","x","Contains","className","onSubmit","e","preventDefault","searchQuery","searchQueryString","stringify","arrayFormat","push","options","onChange","disableSearch","labelledBy","overrideStrings","TextField","target","size","Select","MenuItem","Description","Both","Button","type","variant","color","RecentWordsComponent","recentWords","setRecentWords","words","style","paddingLeft","w","key","to","display","textDecoration","marginBottom","MainPage","IndexWordListComponent","wordIdParam","useParams","user","undefined","selectedWordIndex","setSelectedWordIndex","o","Number","getRowsFromServer","isRowLoaded","index","position","float","top","background","borderRight","zIndex","defaultSize","width","height","enable","right","bottom","left","topRight","bottomRight","bottomLeft","topLeft","grid","minWidth","maxWidth","onKeyDown","confirm","wordIdsToDelete","Object","values","iw","deletedCount","loadMoreRows","rowCount","onRowsRendered","registerChild","ref","rowHeight","scrollToIndex","scrollToAlignment","rowRenderer","row","textOverflow","whiteSpace","overflow","checked","title","activeStyle","fontWeight","WordEditorComponent","dictionaryGroups","setDictionaryGroups","setWordId","setDictionaryId","setTerm","setDescription","setVersion","word","updatedWhen","FormControl","InputLabel","labelId","parseInt","flatMap","dictionaries","d","apiKey","init","language","menubar","image_description","plugins","toolbar","setup","editor","ui","registry","addButton","text","onAction","foo","selection","getContent","split","line","DOMParser","parseFromString","a1","a2","body","innerText","localeCompare","l","innerHTML","setContent","join","charmap","images_upload_handler","blobInfo","success","failure","progress","file","blob","formData","FormData","append","Axios","res","catch","err","message","onEditorChange","content","useStyles","makeStyles","theme","createStyles","input","DictionaryManagerComponent","classes","setDictionaryGroupName","selectedDictionaryGroupId","setSelectedDictionaryGroupId","setDictionaryName","InputProps","onClick","handleCreateDictionaryGroup","newDictionaryGroups","count","find","handleCreateDictionary","flexWrap","border","padding","marginRight","backgroundColor","reduce","acc","current","dictionaryGroup","newDictionaryGroupName","prompt","handleUpdateDictionaryGroup","method","dictionary","newDictionaryName","handleUpdateDictionary","root","flexShrink","marginLeft","spacing","TablePaginationActions","props","useTheme","page","rowsPerPage","onChangePage","IconButton","event","disabled","aria-label","direction","Math","ceil","max","UserManagerComponent","setPageNumber","totalUsersCount","setTotalNormalUsersCount","normalUsers","setNormalUsers","managers","setManagers","pagedUsers","users","totalCount","handleUpdateRole","normalUser","u","manager","handleDeleteUser","normalUserRows","email","managerRows","TableContainer","component","Paper","Table","TableBody","TableRow","TableCell","scope","align","TableFooter","TablePagination","rowsPerPageOptions","newPageNumber","pagedNormalUsers","ActionsComponent","ComponentToPrint","this","showDeleteButton","handleDelete","textAlign","React","createElement","dangerouslySetInnerHTML","__html","Component","PrintListComponent","componentRef","useRef","setPrintWords","setShowDeleteButton","onBeforeGetContent","onAfterPrint","trigger","pw","ImportExportComponent","importDictionaryId","setImportDictionaryId","exportDictionaryId","setExportDictionaryId","fileInputRef","encType","files","accept","margin","Link","href","SearchResultComponent","location","useLocation","searchedWords","setSearchedWords","parse","parseNumbers","parseBooleans","toString","SearchResultPage","WordDetailComponent","wordDetail","setWordDetail","tooltipWords","setTooltipWords","handleDescriptionClick","HTMLAnchorElement","getAttribute","tempElement","anchors","getElementsByTagName","from","forEach","el","setAttribute","htmlRenderedDescription","autoClose","hideProgressBar","newestOnTop","closeOnClick","rtl","pauseOnFocusLoss","draggable","pauseOnHover","toast","info","fontSize","registrant","Date","toLocaleString","marginTop","Google","client","format","effect","textColor","borderColor","overridePosition","currentEvent","currentTarget","node","documentElement","min","clientWidth","clientHeight","delayShow","delayUpdate","delayHide","WordDetailPage","isEmptyOrSpaces","str","match","ReplaceComponent","original","setOriginal","destination","setDestination","replaceLocation","setReplaceLocation","App","path","cursor","exact","store","createStore","compose","applyMiddleware","ReduxThunk","ReactDOM","render","getElementById"],"mappings":"gXACeA,gB,gBCKJC,EAAU,CACpBC,kBAAmBC,+BAAqB,gBAArBA,GAEnBC,kCAAmCD,+BAAqB,oCAArBA,GAEnCE,oBAAqBF,+BAAqB,iBAArBA,GACrBG,yBAA0BH,+BAAqB,2BAArBA,GAC1BI,mBAAoBJ,+BAAqB,gBAArBA,GACpBK,sBAAuBL,+BAAqB,wBAArBA,GACvBM,sBAAuBN,+BAAqB,mBAArBA,GACvBO,2BAA4BP,+BAAqB,6BAArBA,GAC5BQ,oCAAqCR,+BAAqB,sCAArBA,IC8EvBS,EAxFCC,wBCQwB,CACvCC,SAAU,KACVC,WAAY,GACZC,gBAAiB,EACjBC,WAAY,GACZC,+BAAgC,KDZ/BC,aAAalB,EAAQC,mBAAmB,SAACkB,EAAOC,GAAR,OACxCC,YAAQF,GAAO,SAAAG,GACdA,EAAMT,SAAWO,EAAOG,cAMzBL,aAAalB,EAAQG,mCAAmC,SAACgB,EAAOC,GAAR,OACxDC,YAAQF,GAAO,SAAAG,GACdA,EAAML,+BAAiCG,EAAOG,cAM/CL,aAAalB,EAAQI,qBAAqB,SAACe,EAAOC,GAAR,OAC1CC,YAAQF,GAAO,SAAAG,GACd,IAAK,IAAIE,EAAI,EAAGA,EAAIJ,EAAOG,QAAQE,UAAYL,EAAOG,QAAQG,WAAa,EAAGF,IAC7EF,EAAMR,WAAWM,EAAOG,QAAQG,WAAaF,GAAKJ,EAAOG,QAAQI,iBAAiBH,SAKpFN,aAAalB,EAAQK,0BAA0B,SAACc,EAAOC,GAAR,OAC/CC,YAAQF,GAAO,SAAAG,GACdA,EAAMP,gBAAkBK,EAAOG,cAIhCL,aAAalB,EAAQM,oBAAoB,SAACa,EAAOC,GAAR,OACzCC,YAAQF,GAAO,SAAAG,GACdA,EAAMP,gBAAkB,EACxBO,EAAMR,WAAa,GAEnBc,YAAW,WACAC,OAAOC,SAASC,uBAAuB,mBAAmB,GAClEC,WAAa,KACb,WAIJd,aAAalB,EAAQO,uBAAuB,SAACY,EAAOC,GAAR,OAC5CC,YAAQF,GAAO,SAAAG,GACdA,EAAMP,gBAAkB,EACxBO,EAAMR,WAAa,GAEnBc,YAAW,WACAC,OAAOC,SAASC,uBAAuB,mBAAmB,GAClEC,WAAa,KACb,WAIJd,aAAalB,EAAQQ,uBAAuB,SAACW,EAAOC,GAAR,OAC5CC,YAAQF,GAAO,SAAAG,GACdA,EAAMP,gBAAkB,EACxBO,EAAMR,WAAa,GAEnBc,YAAW,WACAC,OAAOC,SAASC,uBAAuB,mBAAmB,GAClEC,WAAa,KACb,WAIJd,aAAalB,EAAQS,4BAA4B,SAACU,EAAOC,GAAR,OACjDC,YAAQF,GAAO,SAAAG,GACiBA,EAAMR,WAAWM,EAAOG,QAAQU,gBACxCC,cAAgBd,EAAOG,QAAQW,oBAIvDhB,aAAalB,EAAQU,qCAAqC,SAACS,EAAOC,GAAR,OAC1DC,YAAQF,GAAO,SAAAG,GACdA,EAAMP,gBAAkB,EACxBO,EAAMR,WAAa,GAEnBc,YAAW,WACAC,OAAOC,SAASC,uBAAuB,mBAAmB,GAClEC,WAAa,KACb,W,kDEpFNG,IAAMC,aAAaC,SAASC,KAC3B,SAAUD,GAET,OAAOA,KAER,SAAUE,GACT,OAAIA,EAAMF,SAASG,OAAOC,IAAIC,SAAS,eACR,MAA1BH,EAAMF,SAASM,QAIpBC,MAAML,EAAMF,SAASQ,MAHZC,QAAQC,OAAOR,MAUnB,ICoCKS,EAMAC,ED1CCC,EAAY,CACxBC,YAAY,WAAD,4BAAE,4BAAAC,EAAA,sEACWjB,IAAMkB,IAAc,yBAD/B,cACNhB,EADM,yBAELA,EAASQ,MAFJ,2CAAF,kDAAC,GAOZS,SAAS,WAAD,4BAAE,WAAOC,EAAoBC,GAA3B,eAAAJ,EAAA,sEACcjB,IAAMkB,IAAN,wCAAkFE,EAAlF,qBAAyGC,IADvH,cACHnB,EADG,yBAEFA,EAASQ,MAFP,2CAAF,qDAAC,GAKTY,YAAY,WAAD,4BAAE,4BAAAL,EAAA,sEACWjB,IAAMkB,IAAY,yBAD7B,cACNhB,EADM,yBAELA,EAASQ,MAFJ,2CAAF,kDAAC,GAKZa,WAAW,WAAD,4BAAE,WAAOC,EAAgBC,GAAvB,SAAAR,EAAA,sEACLjB,IAAM0B,MAAN,+BAAoCF,GAAU,CAACC,SAD1C,2CAAF,qDAAC,GAIXE,WAAW,WAAD,4BAAE,WAAOH,GAAP,SAAAP,EAAA,sEACLjB,IAAM4B,OAAN,oBAA0BJ,IADrB,2CAAF,mDAAC,GAMXK,kBAAkB,WAAD,4BAAE,WAAOC,EAAgBC,GAAvB,eAAAd,EAAA,sEACKjB,IAAMgC,KAAN,+BAAmD,CAACF,SAAQC,uBADjE,cACZ7B,EADY,yBAEXA,EAASQ,MAFE,2CAAF,qDAAC,GAKlBuB,mBAAmB,WAAD,4BAAE,WAAOF,GAAP,eAAAd,EAAA,sEACIjB,IAAMgC,KAAN,gCAAoD,CAACD,uBADzD,cACb7B,EADa,yBAEZA,EAASQ,MAFG,2CAAF,mDAAC,GAKnBwB,cAAc,WAAD,4BAAE,WAAO3C,EAAoBD,EAAmByC,GAA9C,eAAAd,EAAA,sEACSjB,IAAMgC,KAAN,0BAAmD,CAACzC,aAAYD,YAAWyC,uBADpF,cACR7B,EADQ,yBAEPA,EAASQ,MAFF,2CAAF,uDAAC,GAKdyB,eAAe,WAAD,4BAAE,4BAAAlB,EAAA,sEACQjB,IAAMkB,IAAiB,4BAD/B,cACThB,EADS,yBAERA,EAASQ,MAFD,2CAAF,kDAAC,GAKf0B,OAAO,WAAD,4BAAE,WAAOC,EAAoBC,EAAuBC,EAAiBC,EAAwBC,GAA3F,eAAAxB,EAAA,sEACgBjB,IAAMgC,KAAN,mBAA4C,CAACK,WAAUC,gBAAeC,SAAQC,gBAAeC,mBAD7G,cACDvC,EADC,yBAEAA,EAASQ,MAFT,2CAAF,2DAAC,GAKPgC,WAAW,WAAD,4BAAE,WAAOC,EAAsBC,EAAcC,GAA3C,eAAA5B,EAAA,sEACYjB,IAAMgC,KAAW,aAAc,CAACW,eAAcC,OAAMC,gBADhE,cACL3C,EADK,yBAEJA,EAASQ,MAFL,2CAAF,uDAAC,GAKXoC,QAAQ,WAAD,4BAAE,WAAOhB,GAAP,eAAAb,EAAA,+EAEgBjB,IAAMkB,IAAN,oBAA6BY,IAF7C,cAED5B,EAFC,yBAGAA,EAASQ,MAHT,mCAKmB,MAAtB,KAAER,SAASM,OALR,0CAMC,MAND,yDAAF,mDAAC,GAWRuC,WAAW,WAAD,4BAAE,WAAOjB,EAAgBkB,EAAiBL,EAAsBC,EAAcC,GAA5E,eAAA5B,EAAA,sEACYjB,IAAMiD,IAAU,aAAc,CAACnB,SAAQkB,UAASL,eAAcC,OAAMC,gBADhF,cACL3C,EADK,yBAEJA,EAASQ,MAFL,2CAAF,2DAAC,GAKXwC,WAAW,WAAD,4BAAE,WAAOC,GAAP,eAAAlC,EAAA,sEACYjB,IAAM4B,OAAN,oBAAgCuB,IAD5C,cACLjD,EADK,yBAEJA,EAASQ,MAFL,2CAAF,mDAAC,GAKX0C,gBAAgB,WAAD,4BAAE,WAAOC,GAAP,eAAApC,EAAA,sEACOjB,IAAMgC,KAAN,uBAA2C,CAACqB,YADnD,cACVnD,EADU,yBAETA,EAASQ,MAFA,2CAAF,mDAAC,GAOhB4C,sBAAsB,WAAD,4BAAE,WAAOC,GAAP,eAAAtC,EAAA,sEACCjB,IAAMgC,KAAsB,uBAAwB,CAACuB,wBADtD,cAChBrD,EADgB,yBAEfA,EAASQ,MAFM,2CAAF,mDAAC,GAKtB8C,oBAAoB,WAAD,4BAAE,0CAAAvC,EAAA,6DAAOwC,EAAP,yCACGzD,IAAMkB,IAAN,+BAAqDuC,IADxD,cACdvD,EADc,yBAEbA,EAASQ,MAFI,2CAAF,kDAAC,GAKpBgD,sBAAsB,WAAD,4BAAE,WAAOC,EAA2BJ,GAAlC,eAAAtC,EAAA,sEACCjB,IAAM0B,MAAN,+BAAqDiC,GAAqB,CAACJ,wBAD5E,cAChBrD,EADgB,yBAEfA,EAASQ,MAFM,2CAAF,qDAAC,GAKtBkD,iBAAiB,WAAD,4BAAE,WAAOC,EAAwBF,GAA/B,eAAA1C,EAAA,sEACMjB,IAAMgC,KAAiB,kBAAmB,CAAC2B,oBAAmBE,mBADpE,cACX3D,EADW,yBAEVA,EAASQ,MAFC,2CAAF,qDAAC,GAKjBoD,iBAAiB,WAAD,4BAAE,WAAOnB,EAAsBkB,GAA7B,eAAA5C,EAAA,sEACMjB,IAAM0B,MAAN,0BAA2CiB,GAAgB,CAACkB,mBADlE,cACX3D,EADW,yBAEVA,EAASQ,MAFC,2CAAF,qDAAC,I,uECtENG,O,eAAAA,I,6BAAAA,I,gBAAAA,M,cAMAC,O,2BAAAA,I,wBAAAA,M,gCCnDNiD,EAAcC,EAAQ,KAsBrB,IAAMC,EAAqC,WACjD,IAAMC,EAAWC,cACXC,EAAUC,cAFuC,EAIDC,mBAAmB,IAJlB,mBAIhDC,EAJgD,KAI3BC,EAJ2B,OAKbF,mBAAS,IALI,mBAKhDG,EALgD,KAKjCC,EALiC,OAMHJ,mBAASzD,EAAmB8D,MANzB,mBAMhDC,EANgD,KAM5BC,EAN4B,OAOHP,mBAASxD,EAAmBgE,YAPzB,mBAOhDC,EAPgD,KAO5BC,EAP4B,KAQjDC,EAA2BC,aAAY,SAAClG,GAAD,OAAuBA,EAAMF,kCARnB,EASyEqG,0BAA0B,mCAAoC,IATvI,mBAShDC,EATgD,KASdC,EATc,UAYvDC,qBAAU,WACTvE,EACEyC,sBACA+B,MAAK,SAAAC,GACL,IAAMjB,EAAsBiB,EAAIC,KAAI,SAAAC,GAAE,MAAK,CAACC,MAAOD,EAAGvC,GAAIyC,MAAOF,EAAGG,SAEpErB,EAAuBD,GAEvB,IAAMuB,EAAoCvB,EAAoBwB,QAAO,SAAAL,GAAE,OAAIN,EAAiC7E,SAASmF,EAAGC,UAEhF,IAApCV,EAAyBe,QAxCjC,SAAqBC,EAAOC,GAC3B,IAAKC,MAAMC,QAAQH,KAAWE,MAAMC,QAAQF,IAAUD,EAAMD,SAAWE,EAAMF,OAC5E,OAAO,EAKR,IAHA,IAAMK,EAAOJ,EAAMK,SAASC,OACtBC,EAAON,EAAMI,SAASC,OAEnBlH,EAAI,EAAGA,EAAIgH,EAAKL,OAAQ3G,IAEhC,GAAIgH,EAAKhH,KAAOmH,EAAKnH,GACpB,OAAO,EAIT,OAAO,EA0B0CoH,CAAYxB,EAAyBQ,KAAI,SAAAiB,GAAC,OAAIA,EAAEf,SAAQG,EAAkCL,KAAI,SAAAiB,GAAC,OAAIA,EAAEf,WAClJzB,EAASrG,EAAQG,kCAAkC8H,SAEpD,IAGHR,qBAAU,WACTD,EAA4CJ,EAAyBQ,KAAI,SAAAC,GAAE,OAAIA,EAAGC,YAChF,CAACV,IAGJK,qBAAU,WACLV,IAAuB/D,EAAmB8D,MAC7CK,EAAsBlE,EAAmB6F,YAExC,CAAC/B,IAmBJ,OACC,yBAAKgC,UAAU,mBAEd,yBAAKA,UAAU,cACd,0BAAMC,SApBY,SAACC,GACrBA,EAAEC,iBAEF,IAAMC,EAAc,CACnBjF,mBAAoBkD,EAAyBQ,KAAI,SAAAC,GAAE,OAAIA,EAAGC,SAC1DlB,gBACAG,qBACAG,sBAGKkC,EAAoBlD,EAAYmD,UAAUF,EAAa,CAACG,YAAa,YAE3E/C,EAAQgD,KAAR,kBAAwBH,MAUrB,kBAAC,IAAD,CACCI,QAAS9C,EACToB,MAAOV,EACPqC,SAAU,SAACD,GAAD,OAAuBnD,EAASrG,EAAQG,kCAAkCqJ,KACpFE,eAAe,EACfC,WAAY,yCACZC,gBACC,CACC,gBAAmB,+BACnB,oBAAuB,4BACvB,UAAa,4BACb,OAAU,kBAKb,6BAEA,yBAAKb,UAAU,kBACd,kBAACc,EAAA,EAAD,CAAW/B,MAAOlB,EACP6C,SAAU,SAACR,GAAD,OAAOpC,EAAiBoC,EAAEa,OAAOhC,QAC3CC,MAAM,qBACNgC,KAAK,QACLhB,UAAU,UAErB,kBAACiB,EAAA,EAAD,CAAQlC,MAAOf,EACP0C,SAAU,SAACR,GAAD,OAAOjC,EAAsBiC,EAAEa,OAAOhC,QAChDiB,UAAU,SACjB,kBAACkB,EAAA,EAAD,CAAUnC,MAAO9E,EAAmB8D,MAApC,gBACA,kBAACmD,EAAA,EAAD,CAAUnC,MAAO9E,EAAmBkH,aAApC,gBACA,kBAACD,EAAA,EAAD,CAAUnC,MAAO9E,EAAmBmH,MAApC,8BAGD,kBAACH,EAAA,EAAD,CAAQlC,MAAOZ,EACPuC,SAAU,SAACR,GAAD,OAAO9B,EAAsB8B,EAAEa,OAAOhC,QAChDiB,UAAU,SAChBhC,IAAuB/D,EAAmB8D,MAAQ,kBAACmD,EAAA,EAAD,CAAUnC,MAAO7E,EAAmBgE,YAApC,sBACnD,kBAACgD,EAAA,EAAD,CAAUnC,MAAO7E,EAAmB6F,UAApC,uBAGD,kBAACsB,EAAA,EAAD,CAAQrB,UAAU,QAAQsB,KAAK,SAASC,QAAQ,YAAYC,MAAM,WAAlE,qBCjIOC,EAAsC,WAAO,IAAD,EAClB/D,mBAAsB,IADJ,mBACjDgE,EADiD,KACpCC,EADoC,KAWxD,OAPAjD,qBAAU,WACTvE,EACEoB,iBACAoD,MAAK,SAAAiD,GAAK,OAAID,EAAeC,QAC7B,IAIF,6BACC,sEAEA,wBAAIC,MAAO,CAACC,YAAa,SACvBJ,EAAY7C,KAAI,SAAAkD,GAAC,OACjB,wBAAIC,IAAKD,EAAExF,IACV,kBAAC,IAAD,CAAM0F,GAAE,WAAMF,EAAExF,IACVsF,MAAO,CAACK,QAAS,QAASC,eAAgB,OAAQX,MAAO,QAASY,aAAc,SACpFL,EAAE/F,aCvBGqG,EAA0B,WACtC,OACC,oCACC,kBAAC,EAAD,MACA,kBAAC,EAAD,Q,2BCGUC,EAAwC,WACpD,IAAMhF,EAAWC,cAEVgF,EAAeC,cAAfD,YAEDE,EAAOnE,aAAY,SAAClG,GAAD,OAAuBA,EAAMN,YALI,EAOJ4F,mBAAmB,IAPf,mBAO9BE,GAP8B,WAQpD7F,EAAauG,aAAY,SAAClG,GAAD,OAAuBA,EAAML,cACtDC,EAAkBsG,aAAY,SAAClG,GAAD,OAAuBA,EAAMJ,mBAC3DE,EAAiCoG,aAAY,SAAClG,GAAD,OAAuBA,EAAMF,kCAVtB,EAWRwF,wBAA6BgF,GAXrB,mBAWnDC,EAXmD,KAWhCC,EAXgC,KAc1DlE,qBAAU,WACTvE,EACEyC,sBACA+B,MAAK,SAAAC,GACL,IAAMjB,EAAsBiB,EAAIC,KAAI,SAAAC,GAAE,MAAK,CAACC,MAAOD,EAAGvC,GAAIyC,MAAOF,EAAGG,SACpErB,EAAuBD,QAEvB,IAGHe,qBAAU,WAOTvE,EACEkB,mBAAmBnD,EAA+B2G,KAAI,SAAAgE,GAAC,OAAIA,EAAE9D,UAC7DJ,MAAK,SAAA7E,GAAI,OAAIwD,EAASrG,EAAQK,yBAAyBwC,SACvD,CAACwD,EAAUtF,IAGd0G,qBAAU,WACTpB,EAASrG,EAAQQ,sBAAsB,MACrC,CAACS,IAGJwG,qBAAU,WACLoE,OAAOP,IAOVpI,EACEc,kBAAkB6H,OAAOP,GAAcrK,EAA+B2G,KAAI,SAAAgE,GAAC,OAAIA,EAAE9D,UACjFJ,MAAK,SAAA7E,GAAI,OAAI8I,EAAqB9I,EAAO,EAAI,EAAIA,EAAOA,EAAO,MAC/D6E,MAAK,kBAAM9F,YAAW,WACtB+J,OAAqBF,KACnB,UAEH,CAACH,EAAavK,IAGjB,IAAM+K,EAAoB,SAAC,GAAwE,IAAvEpK,EAAsE,EAAtEA,WAAYD,EAA0D,EAA1DA,UAOvC,OAAOyB,EACLmB,cAAc3C,EAAYD,EAAWR,EAA+B2G,KAAI,SAAAgE,GAAC,OAAIA,EAAE9D,UAC/EJ,MAAK,SAAA7E,GAAI,OAAIwD,EAASrG,EAAQI,oBAAoB,CAACsB,aAAYD,YAAWE,iBAAkBkB,SAIzFkJ,EAAc,SAAC,GAAgC,IAA/BC,EAA8B,EAA9BA,MACrB,QAASlL,EAAWkL,IAIrB,OACC,kBAAC,IAAD,CACCpB,MAAO,CAACqB,SAAU,SAAUC,MAAO,OAAQC,IAAK,IAAKC,WAAY,UAAWC,YAAa,iBAAkBC,OAAQ,GACnHC,YAAa,CACZC,MAAO,QACPC,OAAQ,SAETC,OAAQ,CAACP,KAAK,EAAOQ,OAAO,EAAMC,QAAQ,EAAOC,MAAM,EAAOC,UAAU,EAAOC,aAAa,EAAOC,YAAY,EAAOC,SAAS,GAC/HC,KAAM,CAAC,GAAI,IACXC,SAAU,IACVC,SAAU,KAEV,yBAAKxC,MAAO,CAAC4B,MAAO,OAAQC,OAAQ,QAASY,UAAW,SAAApE,GACvD,GAAc,WAAVA,EAAE8B,KACDS,GAAsB,UAAdA,EAAK5H,MACZ/B,OAAOyL,QAAQ,oHAA2B,CAC7C,IAAMC,EAAmBC,OAAOC,OAAO3M,GACrCoH,QAAO,SAAAwF,GAAE,OAAIA,EAAGxL,iBAChB0F,KAAI,SAAA8F,GAAE,OAAIA,EAAGpI,MAEfpC,EACEqC,gBAAgBgI,GAChB7F,MAAK,SAACiG,GACNtH,EAASrG,EAAQU,uCACjBkC,MAAM,GAAD,OAAI+K,EAAJ,uFAMV,kBAAC,IAAD,MACE,gBAAElB,EAAF,EAAEA,OAAQD,EAAV,EAAUA,MAAV,OACA,kBAAC,IAAD,CACCT,YAAaA,EACb6B,aAAc9B,EACd+B,SAAU9M,IAGT,gBAAE+M,EAAF,EAAEA,eAAgBC,EAAlB,EAAkBA,cAAlB,OACA,kBAAC,IAAD,CACChF,UAAU,kBACViF,IAAKD,EACLD,eAAgBA,EAChBtB,MAAOA,EACPC,OAAQA,EACRwB,UAAW,GACXC,cAAexC,EACfyC,kBAAmB,QACnBN,SAAU9M,EACVqN,YAAa,SAACC,GAAS,IAAD,QACrB,OACC,yBAAKtD,IAAKsD,EAAItD,IACTH,MAAK,eACDyD,EAAIzD,MADH,CAEJ0D,aAAc,WACdC,WAAY,SACZC,SAAU,YAGdzC,EAAY,CAACC,MAAOqC,EAAIrC,QAExB,oCACGR,GAAsB,UAAdA,EAAK5H,MAC2B,2BAAOyG,KAAK,WAAWoE,SAAS,UAAA3N,EAAWuN,EAAIrC,cAAf,eAAuB9J,iBAAiB,EACjEuH,SAAU,SAAAR,GAAC,OAAI5C,EAASrG,EAAQS,2BAA2B,CAACwB,eAAgBoM,EAAIrC,MAAO9J,cAAe+G,EAAEa,OAAO2E,cAGhK,kBAAC,IAAD,CAASzD,GAAE,qBAAMlK,EAAWuN,EAAIrC,cAArB,aAAM,EAAuB1G,IAC/BoJ,MAAK,UAAE5N,EAAWuN,EAAIrC,cAAjB,aAAE,EAAuBjH,KAC9B6F,MAAO,CACNL,MAAO,QACPW,eAAgB,QAEjByD,YAAa,CACZpE,MAAO,OACPqE,WAAY,SARtB,UAWE9N,EAAWuN,EAAIrC,cAXjB,aAWE,EAAuBjH,OAI1B,0E,2BChKA8J,G,OAAqC,WACjD,IAAMtI,EAAUC,cACVH,EAAWC,cAGVgF,EAAeC,cAAfD,YALgD,EAMP7E,mBAA4B,IANrB,mBAMhDqI,EANgD,KAM9BC,EAN8B,OAO3BtI,mBAAwB,MAPG,mBAOhDxC,EAPgD,KAOxC+K,EAPwC,OAQfvI,oBAAkB,GARH,mBAQhD3B,EARgD,KAQlCmK,EARkC,OAS/BxI,mBAAS,IATsB,mBAShD1B,EATgD,KAS1CmK,EAT0C,OAUjBzI,mBAAS,IAVQ,mBAUhDzB,EAVgD,KAUnCmK,EAVmC,OAWzB1I,mBAAwB,MAXC,mBAWhDtB,EAXgD,KAWvCiK,EAXuC,KAcvD3H,qBAAU,WAiBT,OAhBAvE,EACEyC,sBACA+B,MAAK,SAAAC,GAAG,OAAIoH,EAAoBpH,MAE9B2D,GACHpI,EACE+B,QAAQ4G,OAAOP,IACf5D,MAAK,SAAA2H,GACLL,EAAUK,EAAM/J,IAChB2J,EAAgBI,EAAMvK,cACtBoK,EAAQG,EAAMtK,MACdoK,EAAeE,EAAMrK,aACrBoK,EAAWC,EAAMlK,YAIb,WACN6J,EAAU,MACVC,GAAiB,GACjBC,EAAQ,IACRC,EAAe,IACfC,EAAW,SAGV,CAAC9D,IAwBJ,OACC,oCACC,0BAAMtC,SAvBa,SAACC,GACrBA,EAAEC,iBAEEoC,EACHpI,EACEgC,WAAWjB,EAASkB,EAAUL,EAAeC,EAAMC,GACnD0C,MAAK,SAAAoD,GACLzE,EAASrG,EAAQO,sBAAsB,CAAC+E,GAAIwF,EAAExF,GAAIP,KAAM+F,EAAE/F,KAAMuK,YAAaxE,EAAEwE,YAAapN,eAAe,KAC3GqE,EAAQgD,KAAR,WAAiBuB,EAAExF,QAGrBpC,EACE2B,WAAWC,EAAcC,EAAMC,GAC/B0C,MAAK,SAAAoD,GACLzE,EAASrG,EAAQM,mBAAmB,CAACgF,GAAIwF,EAAExF,GAAIP,KAAM+F,EAAE/F,KAAMuK,YAAaxE,EAAEwE,YAAapN,eAAe,KACxGqE,EAAQgD,KAAR,WAAiBuB,EAAExF,UASpB,yBAAKyD,UAAU,YACd,kBAACwG,EAAA,EAAD,CAAajF,QAAQ,WAAWM,MAAO,CAAC4B,MAAO,UAC9C,kBAACgD,EAAA,EAAD,CAAYlK,GAAG,qCAAf,gBACA,kBAAC0E,EAAA,EAAD,CAAQlC,MAAOhD,EACP2K,QAAQ,oCACRhG,SAAU,SAACR,GAAD,OAAOgG,EAAgBS,SAASzG,EAAEa,OAAOhC,SACnDwC,QAAQ,WACRvC,MAAM,gBACZ+G,EACCa,SAAQ,SAAA9H,GAAE,OAAIA,EAAG+H,gBACjBhI,KAAI,SAAAiI,GAAC,OACL,kBAAC5F,EAAA,EAAD,CAAUc,IAAK8E,EAAEvK,GAAIwC,MAAO+H,EAAEvK,IAAKuK,EAAE7H,WAMzC,kBAAC6B,EAAA,EAAD,CAAWd,UAAU,aACVhB,MAAM,2DACN6C,MAAO,CAAC4B,MAAO,SACf1E,MAAO/C,EACPuF,QAAQ,WACRb,SAAU,SAACR,GAAD,OAAOiG,EAAQjG,EAAEa,OAAOhC,WAG9C,6BAEA,kBAAC,SAAD,CACCgI,OAAO,mDACPC,KAAM,CACLC,SAAU,QACVvD,OAAQ,IACRwD,SAAS,EACTC,mBAAmB,EACnBC,QAAS,CACR,iEACA,6CACA,gEAEDC,QAEC,6LAKDC,MAAO,SAACC,GAEPA,EAAOC,GAAGC,SAASC,UAAU,YAAa,CACzCC,KAAM,2BACNC,SAAU,WACT,IAAIC,EAAMN,EAAOO,UAAUC,aAAaC,MAAM,MAC5CnJ,KAAI,SAACoJ,GAAD,OAAkB,IAAIC,WAAYC,gBAAgBF,EAAM,gBAC5DtI,MAAM,SAACyI,EAAcC,GAAf,OAAgCD,EAAGE,KAAKC,UAAUC,cAAcH,EAAGC,KAAKC,cAC9E1J,KAAI,SAAC4J,GAAD,OAAiBA,EAAEH,KAAKI,aAE9BnB,EAAOO,UAAUa,WAAWd,EAAIe,KAAK,UAIvCrB,EAAOC,GAAGC,SAASC,UAAU,aAAc,CAC1CC,KAAM,2BACNC,SAAU,WACT,IAAIC,EAAMN,EAAOO,UAAUC,aAAaC,MAAM,MAC5CnJ,KAAI,SAACoJ,GAAD,OAAkB,IAAIC,WAAYC,gBAAgBF,EAAM,gBAC5DtI,MAAM,SAACyI,EAAcC,GAAf,OAAiCD,EAAGE,KAAKC,UAAUC,cAAcH,EAAGC,KAAKC,cAC/E1J,KAAI,SAAC4J,GAAD,OAAiBA,EAAEH,KAAKI,aAE9BnB,EAAOO,UAAUa,WAAWd,EAAIe,KAAK,WAIxCC,QAAS,CACR,CAAC,EAAQ,uBACT,CAAC,KAAQ,6BACT,CAAC,KAAQ,uBACT,CAAC,KAAQ,iBACT,CAAC,KAAQ,0CACT,CAAC,KAAQ,gDACT,CAAC,KAAQ,0CACT,CAAC,KAAQ,gDACT,CAAC,KAAQ,0CACT,CAAC,KAAQ,iDAEVC,sBAAuB,SAAUC,EAAeC,EAAcC,EAAcC,GAC3E,IAAMC,EAAOJ,EAASK,OAEhBC,EAAW,IAAIC,SACrBD,EAASE,OAAO,OAAQJ,EAAMA,EAAKlK,MAEnCuK,IAAMpO,KAAK,4BAA6BiO,GACtC1K,MAAK,SAAA8K,GACLT,EAAQS,EAAI3P,SAEZ4P,OAAM,SAAAC,GACNV,EAAQ,wDAAkBU,EAAIC,cAIlC7K,MAAO9C,EACP4N,eAAgB,SAACC,EAASvC,GAAV,OAAqBnB,EAAe0D,MAGrD,kBAACzI,EAAA,EAAD,CAAQrB,UAAU,gBAAgBsB,KAAK,SAASC,QAAQ,YAAYP,KAAK,QAAQQ,MAAM,WAAvF,oB,kBC7KEuI,EAAYC,aAAW,SAACC,GAAD,OAC5BC,YAAa,CACZC,MAAO,CACN/H,aAAc,OACdsB,OAAQ,SAOE0G,EAA4C,WACxD,IAAMC,EAAUN,IAD8C,EAIdrM,mBAA4B,IAJd,mBAIvDqI,EAJuD,KAIrCC,EAJqC,OAKRtI,mBAAS,IALD,mBAKvDf,EALuD,KAKlC2N,EALkC,OAMI5M,oBAAkB,GANtB,mBAMvD6M,EANuD,KAM5BC,EAN4B,OAOlB9M,mBAAS,IAPS,mBAOvDT,EAPuD,KAOvCwN,EAPuC,KAU9D/L,qBAAU,WACTvE,EACEyC,qBAAoB,GACpB+B,MAAK,SAAAC,GAAG,OAAIoH,EAAoBpH,QAChC,IAsEH,OACC,oCACC,6BACC,kBAACkC,EAAA,EAAD,CAAW9B,MAAM,yCACN6C,MAAO,CAAC4B,MAAO,SACfiH,WAAY,CAAC1K,UAAWqK,EAAQF,OAChCpL,MAAOpC,EACP4E,QAAQ,WACRb,SAAU,SAACR,GAAD,OAAOoK,EAAuBpK,EAAEa,OAAOhC,UAE5D,kBAACsC,EAAA,EAAD,CAAQsJ,QAAS,kBA7EgB,SAAChO,GACpCxC,EACEuC,sBAAsBC,GACtBgC,MAAK,SAACG,GACNA,EAAG+H,aAAe,GAClBb,EAAoBD,EAAiBrG,OAAOZ,IAC5CwL,EAAuB,OAuEAM,CAA4BjO,IAC3C4E,QAAQ,YACRvB,UAAWqK,EAAQF,MACnB3I,MAAM,WAHd,2CAQD,kBAACgF,EAAA,EAAD,CAAajF,QAAQ,WAAWM,MAAO,CAAC4B,MAAO,UAC9C,kBAACgD,EAAA,EAAD,CAAYlK,GAAG,qCAAf,6BACA,kBAAC0E,EAAA,EAAD,CAAQlC,MAAOwL,EACP7D,QAAQ,oCACR1G,UAAWqK,EAAQF,MACnBzJ,SAAU,SAACR,GAAD,OAAOsK,EAA6BtK,EAAEa,OAAOhC,QACvDwC,QAAQ,WACRvC,MAAM,6BACZ+G,EACClH,KAAI,SAAAC,GAAE,OACN,kBAACoC,EAAA,EAAD,CAAUc,IAAKlD,EAAGvC,GAAIwC,MAAOD,EAAGvC,IAAKuC,EAAGG,WAM5C,kBAAC6B,EAAA,EAAD,CAAW9B,MAAM,4BACN6C,MAAO,CAAC4B,MAAO,SACf1E,MAAO9B,EACPyN,WAAY,CAAC1K,UAAWqK,EAAQF,OAChC5I,QAAQ,WACRb,SAAU,SAACR,GAAD,OAAOuK,EAAkBvK,EAAEa,OAAOhC,UAEvD,kBAACsC,EAAA,EAAD,CAAQsJ,QAAS,kBA/EY,SAAC1N,EAAwBF,GACvD5C,EACE6C,iBAAiBC,EAAgBF,GACjC4B,MAAK,SAACmI,GACN,IAAM+D,EAAsBvS,YAAQyN,GAAkB,SAAAxN,GACrDuO,EAAEgE,MAAQ,EACVvS,EAAMwS,MAAK,SAAAjM,GAAE,OAAIA,EAAGvC,KAAOuK,EAAE/J,qBAAoB8J,aAAarG,KAAKsG,MAGpEd,EAAoB6E,GACpBJ,EAAkB,OAqEIO,CAAuB/N,EAAgBsN,IACtDhJ,QAAQ,YACRvB,UAAWqK,EAAQF,MACnB3I,MAAM,WAHd,6BAOA,yBAAKK,MAAO,CAACK,QAAS,OAAQ+I,SAAU,SACtClF,EAAiBlH,KAAI,SAAAC,GAAE,aACvB,yBAAKkD,IAAKlD,EAAGvC,GACRsF,MAAO,CACNqJ,OAAQ,iBACRC,QAAS,OACTC,YAAa,OACbhJ,aAAc,OACdqB,MAAO,QACP4H,gBAAiB,YAEtB,4BACEvM,EAAGG,KADL,KACaH,EAAG+H,aAAaD,SAAQ,SAAAE,GAAC,OAAIA,EAAEgE,SAAOQ,QAAO,SAACC,EAAKC,GAAN,OAAkBD,EAAMC,IAAS,GAD3F,UAGC,kBAACnK,EAAA,EAAD,CAAQG,MAAM,UAAUmJ,QAAS,kBAvHH,SAAC5N,GACpC,IAAM0O,EAAkB1F,EAAiBgF,MAAK,SAAAjM,GAAE,OAAIA,EAAGvC,KAAOQ,KAExD2O,EAAyBC,OAAO,wGAAyBF,EAAgBxM,MAE3EyM,GACHvR,EAAU2C,sBAAsB2O,EAAgBlP,GAAImP,GAClD/M,MAAK,WACL,IAAMkM,EAAsBvS,YAAQyN,GAAkB,SAAAxN,GAC1CA,EAAMwS,MAAK,SAAAjM,GAAE,OAAIA,EAAGvC,KAAOQ,KACnCkC,KAAOyM,KAGX1F,EAAoB6E,MA0GqBe,CAA4B9M,EAAGvC,MAAtE,gBAEA,0BAAMlE,OAAO,8BAA8BwT,OAAO,OAAOhK,MAAO,CAACK,QAAS,UACpEjC,SAAU,SAAAC,GACJpH,OAAOyL,QAAQ,wGACnBrE,EAAEC,mBAGT,2BAAOmB,KAAK,SAASrC,KAAK,oBAAoBF,MAAOD,EAAGvC,KACxD,kBAAC8E,EAAA,EAAD,CAAQC,KAAK,SAASE,MAAM,aAA5B,kBAIF,6BAzBD,UA2BE1C,EAAG+H,oBA3BL,aA2BE,EAAiBhI,KAAI,SAAAiI,GAAC,OACtB,wBAAI9E,IAAK8E,EAAEvK,IACTuK,EAAE7H,KADJ,KACY6H,EAAEgE,MADd,UAGC,kBAACzJ,EAAA,EAAD,CAAQG,MAAM,UAAUmJ,QAAS,kBAzGT,SAAC5O,GAC/B,IAAM+P,EAAa/F,EACjBa,SAAQ,SAAA9H,GAAE,OAAIA,EAAG+H,gBACjBkE,MAAK,SAAAjE,GAAC,OAAIA,EAAEvK,KAAOR,KAEfgQ,EAAoBJ,OAAO,2FAAsBG,EAAW7M,MAE9D8M,GACH5R,EAAU+C,iBAAiB4O,EAAWvP,GAAIwP,GACxCpN,MAAK,WACL,IAAMkM,EAAsBvS,YAAQyN,GAAkB,SAAAxN,GAC3CA,EACRqO,SAAQ,SAAA9H,GAAE,OAAIA,EAAG+H,gBACjBkE,MAAK,SAAAjE,GAAC,OAAIA,EAAEvK,KAAOR,KAEnBkD,KAAO8M,KAGV/F,EAAoB6E,MAuFsBmB,CAAuBlF,EAAEvK,MAAhE,gBAEA,0BAAMlE,OAAO,yBAAyBwT,OAAO,OAAOhK,MAAO,CAACK,QAAS,UAC/DjC,SAAU,SAAAC,GACJpH,OAAOyL,QAAQ,4FACnBrE,EAAEC,mBAGT,2BAAOmB,KAAK,SAASrC,KAAK,eAAeF,MAAO+H,EAAEvK,KAClD,kBAAC8E,EAAA,EAAD,CAAQC,KAAK,SAASE,MAAM,aAA5B,4B,yGC1LHuI,GAAYC,aAAW,SAACC,GAAD,OAC5BC,YAAa,CACZ+B,KAAM,CACLC,WAAY,EACZC,WAAYlC,EAAMmC,QAAQ,WAc7B,SAASC,GAAuBC,GAC/B,IAAMjC,EAAUN,KACVE,EAAQsC,cACPzB,EAA0CwB,EAA1CxB,MAAO0B,EAAmCF,EAAnCE,KAAMC,EAA6BH,EAA7BG,YAAaC,EAAgBJ,EAAhBI,aAkBjC,OACC,yBAAK1M,UAAWqK,EAAQ4B,MACvB,kBAACU,EAAA,EAAD,CACChC,QAnBgC,SAACiC,GACnCF,EAAaE,EAAO,IAmBlBC,SAAmB,IAATL,EACVM,aAAW,cAEU,QAApB7C,EAAM8C,UAAsB,oDAAmB,+CAEjD,kBAACJ,EAAA,EAAD,CAAYhC,QArBgB,SAACiC,GAC9BF,EAAaE,EAAOJ,EAAO,IAoBkBK,SAAmB,IAATL,EAAYM,aAAW,iBACvD,QAApB7C,EAAM8C,UAAsB,wCAAiB,yCAE/C,kBAACJ,EAAA,EAAD,CACChC,QArB2B,SAACiC,GAC9BF,EAAaE,EAAOJ,EAAO,IAqBzBK,SAAUL,GAAQQ,KAAKC,KAAKnC,EAAQ2B,GAAe,EACnDK,aAAW,aAEU,QAApB7C,EAAM8C,UAAsB,wCAAiB,yCAE/C,kBAACJ,EAAA,EAAD,CACChC,QAxB+B,SAACiC,GAClCF,EAAaE,EAAOI,KAAKE,IAAI,EAAGF,KAAKC,KAAKnC,EAAQ2B,GAAe,KAwB/DI,SAAUL,GAAQQ,KAAKC,KAAKnC,EAAQ2B,GAAe,EACnDK,aAAW,aAEU,QAApB7C,EAAM8C,UAAsB,8CAAkB,sDAO5C,IAAMI,GAAsC,WAClD,IADwD,EAEpBzP,mBAAS,GAFW,mBAEjDlD,EAFiD,KAErC4S,EAFqC,OAGJ1P,mBAAS,GAHL,mBAGjD2P,EAHiD,KAGhCC,EAHgC,OAIlB5P,mBAAiB,IAJC,mBAIjD6P,EAJiD,KAIpCC,EAJoC,OAKxB9P,mBAAiB,IALO,mBAKjD+P,EALiD,KAKvCC,EALuC,KAQxDhP,qBAAU,WACTvE,EACEI,SAASC,EAAa,EATR,IAUdmE,MAAK,SAAAgP,GACLH,EAAeG,EAAWC,OAC1BN,EAAyBK,EAAWE,eAGtC1T,EACEO,cACAiE,MAAK,SAAAiP,GACLF,EAAYE,QAEZ,IAGH,IAAME,EAAmB,SAAClT,EAAgBC,GACrC/B,OAAOyL,QAAQ,+GAClBpK,EAAUQ,WAAWC,EAAQC,GAC3B8D,MAAK,WACL,GAAa,UAAT9D,GAA6B,YAATA,EAAoB,CAC3C,IAAMkT,EAAaR,EAAYxC,MAAK,SAAAiD,GAAC,OAAIA,EAAEzR,KAAO3B,KAClD8S,EAAY,GAAD,mBAAKD,GAAL,CAAeM,KAC1BP,EAAeD,EAAYpO,QAAO,SAAA6O,GAAC,OAAIA,EAAEzR,KAAO3B,UAC1C,CACN,IAAMqT,EAAUR,EAAS1C,MAAK,SAAAiD,GAAC,OAAIA,EAAEzR,KAAO3B,KAC5C8S,EAAYD,EAAStO,QAAO,SAAA6O,GAAC,OAAIA,EAAEzR,KAAO3B,MAC1C4S,EAAe,GAAD,mBAAKD,GAAL,CAAkBU,UAM/BC,EAAmB,SAACtT,GACrB9B,OAAOyL,QAAQ,4FAClBpK,EAAUY,WAAWH,GACnB+D,MAAK,WACL6O,EAAeD,EAAYpO,QAAO,SAAA6O,GAAC,OAAIA,EAAEzR,KAAO3B,MAChD8S,EAAYD,EAAStO,QAAO,SAAA6O,GAAC,OAAIA,EAAEzR,KAAO3B,UAexCuT,EAAiBZ,EAAY1O,KAAI,SAAAmP,GAAC,MAAK,CAACzR,GAAIyR,EAAEzR,GAAI6R,MAAOJ,EAAEI,MAAOnP,KAAM+O,EAAE/O,SAC1EoP,EAAcZ,EAAS5O,KAAI,SAAAmP,GAAC,MAAK,CAACzR,GAAIyR,EAAEzR,GAAI6R,MAAOJ,EAAEI,MAAOnP,KAAM+O,EAAE/O,SAG1E,OACC,oCACC,+DACA,kBAACqP,EAAA,EAAD,CAAgBC,UAAWC,MAC1B,kBAACC,GAAA,EAAD,CAAOzN,KAAK,SACX,kCACC,yBAAKa,MAAO,CAAC4B,MAAO,UACpB,yBAAK5B,MAAO,CAAC4B,MAAO,WACpB,yBAAK5B,MAAO,CAAC4B,MAAO,WAErB,kBAACiL,GAAA,EAAD,KACEL,EAAYxP,KAAI,SAACyG,GAAD,OAChB,kBAACqJ,GAAA,EAAD,CAAU3M,IAAKsD,EAAI/I,IAClB,kBAACqS,GAAA,EAAD,CAAWL,UAAU,KAAKM,MAAM,OAC9BvJ,EAAIrG,KADN,KACcqG,EAAI8I,MADlB,KAGA,kBAACQ,GAAA,EAAD,CAAWE,MAAM,SAAQ,kBAACzN,EAAA,EAAD,CAAQG,MAAM,UAAUmJ,QAAS,kBAAMmD,EAAiBxI,EAAI/I,GAAI,YAAhE,oCAEzB,kBAACqS,GAAA,EAAD,CAAWE,MAAM,SAAQ,kBAACzN,EAAA,EAAD,CAAQG,MAAM,YAAYmJ,QAAS,kBAAMuD,EAAiB5I,EAAI/I,MAA9D,wBAO9B,6BACA,6BAEA,yDACA,kBAAC+R,EAAA,EAAD,CAAgBC,UAAWC,MAC1B,kBAACC,GAAA,EAAD,CAAOzN,KAAK,SACX,kCACC,yBAAKa,MAAO,CAAC4B,MAAO,UACpB,yBAAK5B,MAAO,CAAC4B,MAAO,WACpB,yBAAK5B,MAAO,CAAC4B,MAAO,WAGrB,kBAACiL,GAAA,EAAD,KACEP,EAAetP,KAAI,SAACyG,GAAD,OACnB,kBAACqJ,GAAA,EAAD,CAAU3M,IAAKsD,EAAI/I,IAClB,kBAACqS,GAAA,EAAD,CAAWL,UAAU,KAAKM,MAAM,OAC9BvJ,EAAIrG,KADN,KACcqG,EAAI8I,MADlB,KAGA,kBAACQ,GAAA,EAAD,CAAWE,MAAM,SAAQ,kBAACzN,EAAA,EAAD,CAAQG,MAAM,UAAUmJ,QAAS,kBAAMmD,EAAiBxI,EAAI/I,GAAI,aAAhE,oCAEzB,kBAACqS,GAAA,EAAD,CAAWE,MAAM,SAAQ,kBAACzN,EAAA,EAAD,CAAQG,MAAM,YAAYmJ,QAAS,kBAAMuD,EAAiB5I,EAAI/I,MAA9D,sBAK5B,kBAACwS,GAAA,EAAD,KACC,kBAACJ,GAAA,EAAD,KACC,kBAACK,GAAA,EAAD,CACCC,mBAAoB,GACpBnE,MAAOuC,EACPZ,YAvHU,GAwHVD,KAAMhS,EACNkS,aAvEkB,SAACxM,EAA+CgP,GACxE/U,EAAUI,SAAS2U,EAAgB,EAnDnB,IAoDdvQ,MAAK,SAAAwQ,GACL3B,EAAe2B,EAAiBvB,OAChCN,EAAyB6B,EAAiBtB,YAC1CT,EAAc8B,OAmEVE,iBAAkB/C,W,6DChMpBgD,I,kLACK,IAAD,OACR,OACC,6BAEEC,KAAKhD,MAAM1K,MAAM/C,KAAI,SAAAkD,GAAC,OACrB,yBAAKC,IAAKD,EAAExF,GAAIyD,UAAU,aAAa6B,MAAO,CAACqJ,OAAQ,iBAAkBC,QAAS,OAAQ/I,aAAc,SACtG,EAAKkK,MAAMiD,kBACS,kBAAClO,EAAA,EAAD,CAAQG,MAAM,YAAYK,MAAO,CACrDsB,MAAO,SACLwH,QAAS,SAACzK,GAAD,OAAO,EAAKoM,MAAMkD,aAAazN,EAAExF,MAFxB,gBAGrB,kCAAQwF,EAAE0J,gBAAV,QAAgC1J,EAAE+J,WAAlC,KACA,wBAAIjK,MAAO,CAAC4N,UAAW,SAAUrN,aAAc,QAASpC,UAAU,QAAQ+B,EAAE/F,MAC3E0T,IAAMC,cAAc,MAAO,CAACC,wBAAyB,CAACC,OAAQ9N,EAAE9F,wB,GAbzCyT,IAAMI,YAuBxBC,GAAoC,WAChD,IAAMC,EAAeC,mBADiC,EAIA1R,0BAAwB,aAAc,IAJtC,mBAI/CtG,EAJ+C,KAInCiY,EAJmC,aAKNxS,oBAAS,IALH,mBAK/C6R,EAL+C,KAK7BY,EAL6B,KAQtD,OACC,oCACC,kBAAC,KAAD,CACCC,mBAAoB,kBAAMD,GAAoB,IAC9CE,aAAc,kBAAMF,GAAoB,IACxCG,QAAS,kBAAM,kBAACjP,EAAA,EAAD,CAAQE,QAAQ,YAAYC,MAAM,WAAlC,6BAEfsI,QAAS,kBAAMkG,EAAaxE,WAG7B,kBAACnK,EAAA,EAAD,CAAQE,QAAQ,YACRC,MAAM,YACNmJ,QAAS,WACJ7R,OAAOyL,QAAQ,0GAClB2L,EAAc,KAGhBrO,MAAO,CAACsB,MAAO,UAPvB,mCAWA,6BACA,6BACA,6BAEA,kBAAC,GAAD,CACCvB,MAAO3J,EACPsX,iBAAkBA,EAClBC,aAAc,SAACtU,GAAD,OAAYgV,EAAcjY,EAAWkH,QAAO,SAAAoR,GAAE,OAAIA,EAAGhU,KAAOrB,OAE1E+J,IAAK+K,M,UC/DIQ,GAAuC,WAAO,IAAD,EACT9S,mBAA4B,IADnB,mBAClDqI,EADkD,KAChCC,EADgC,OAELtI,oBAAkB,GAFb,mBAElD+S,EAFkD,KAE9BC,EAF8B,OAGLhT,oBAAkB,GAHb,mBAGlDiT,EAHkD,KAG9BC,EAH8B,KAInDC,EAAeZ,iBAAyB,MAU9C,OAPAvR,qBAAU,WACTvE,EACEyC,sBACA+B,MAAK,SAAAC,GAAG,OAAIoH,EAAoBpH,QAChC,IAIF,oCACC,6BACC,wDAEA,0BAAMvG,OAAO,yBAAyBwT,OAAO,OAAOiF,QAAQ,sBACtD7Q,SAAU,SAAAC,GACT,OAAIuQ,EAAqB,GACxBvQ,EAAEC,sBACFtG,MAAM,oGAIFgX,EAAarF,QAASuF,OAASF,EAAarF,QAASuF,MAAM3R,OAAS,GACxEc,EAAEC,sBACFtG,MAAM,iGAFP,IAMN,kBAAC2M,EAAA,EAAD,CAAajF,QAAQ,WAAWM,MAAO,CAAC4B,MAAO,UAC9C,kBAACgD,EAAA,EAAD,qBACA,kBAACxF,EAAA,EAAD,CAAQlC,MAAO0R,EACP/P,SAAU,SAACR,GAAD,OAAOwQ,EAAsB/J,SAASzG,EAAEa,OAAOhC,SACzDwC,QAAQ,WACRtC,KAAK,eACLD,MAAM,gBACZ+G,EACCa,SAAQ,SAAA9H,GAAE,OAAIA,EAAG+H,gBACjBhI,KAAI,SAAAiI,GAAC,OACL,kBAAC5F,EAAA,EAAD,CAAUc,IAAK8E,EAAEvK,GAAIwC,MAAO+H,EAAEvK,IAAKuK,EAAE7H,WAMzC,6BACA,6BAEA,2BAAOqC,KAAK,OAAOrC,KAAK,OAAO+R,OAAO,cAAc/L,IAAK4L,IAEzD,6BACA,6BAEA,2BAAOvP,KAAK,SAASvC,MAAM,yBAI7B,wBAAI8C,MAAO,CAACoP,OAAQ,YAEpB,6BACC,wDAEA,kBAACzK,EAAA,EAAD,CAAajF,QAAQ,WAAWM,MAAO,CAAC4B,MAAO,UAC9C,kBAACgD,EAAA,EAAD,qBACA,kBAACxF,EAAA,EAAD,CAAQlC,MAAO4R,EACPjQ,SAAU,SAACR,GAAD,OAAO0Q,EAAsBjK,SAASzG,EAAEa,OAAOhC,SACzDwC,QAAQ,WACRtC,KAAK,eACLD,MAAM,gBACZ+G,EACCa,SAAQ,SAAA9H,GAAE,OAAIA,EAAG+H,gBACjBhI,KAAI,SAAAiI,GAAC,OACL,kBAAC5F,EAAA,EAAD,CAAUc,IAAK8E,EAAEvK,GAAIwC,MAAO+H,EAAEvK,IAAKuK,EAAE7H,WAMzC,6BACA,6BAEA,kBAACiS,GAAA,EAAD,CAAMC,KAAI,8CAAyCR,GAC7ChG,QAAS,SAACzK,GACLyQ,EAAqB,IACxBzQ,EAAEC,iBACFtG,MAAM,8FAJd,+BCrFEsD,GAAcC,EAAQ,KAIfgU,GAAuC,WACnD,IAAMC,EAAWC,cADwC,EAIf5T,mBAAsB,IAJP,mBAIlD6T,EAJkD,KAInCC,EAJmC,KAoBzD,OAbA9S,qBAAU,WAAO,IAAD,IACT0B,EAAcjD,GAAYsU,MAAMJ,EAAS7V,OAAQ,CAAC+E,YAAa,UAAWmR,cAAc,EAAMC,eAAe,IAE7GhW,EAASyE,EAAYpC,qBAAuB/D,EAAmB8D,KAC/DnC,EAAgBwE,EAAYpC,qBAAuB/D,EAAmBkH,YAE5EhH,EAAUqB,OAAV,UAAiB4E,EAAYjF,0BAA7B,QAAmD,GAAnD,UAAuDiF,EAAYvC,qBAAnE,aAAuD,EAA2B+T,WAAYjW,EAAQC,EAAewE,EAAYjC,oBAC/HQ,MAAK,SAAA7E,GACL0X,EAAiB1X,QAEjB,CAACuX,EAAS7V,SAIZ,yBAAKwE,UAAU,iBACbuR,EAAcnS,OAAS,EAEvB,oCACC,yDAEA,wBAAIyC,MAAO,CAACC,YAAa,SAAzB,OACEyP,QADF,IACEA,OADF,EACEA,EAAe1S,KAAI,SAAAkD,GAAC,OACpB,wBAAIC,IAAKD,EAAExF,IACV,kBAAC,IAAD,CAAM0F,GAAE,WAAMF,EAAExF,IACVsF,MAAO,CAACK,QAAS,QAASC,eAAgB,OAAQX,MAAO,QAASY,aAAc,SACpFL,EAAE/F,YAOR,oCACC,4FC7CQ6V,GAAkC,WAC9C,OACC,oCACC,kBAAC,EAAD,MACA,kBAAC,GAAD,Q,mDCSUC,I,cAAqC,WAAO,IAAD,IACjDtU,EAAUC,cACVH,EAAWC,cAGVgF,EAAeC,cAAfD,YACDE,EAAOnE,aAAY,SAAClG,GAAD,OAAuBA,EAAMN,YANC,EAOnB4F,wBAAkCgF,GAPf,mBAOhDqP,EAPgD,KAOpCC,EAPoC,OAQftU,mBAAiC,IARlB,mBAQhDuU,EARgD,KAQlCC,EARkC,OASD3T,0BAAwB,aAAc,IATrC,mBAShDtG,EATgD,KASpCiY,EAToC,UAYvDxR,qBAAU,WAOT,OANI6D,GACHpI,EACE+B,QAAQ4G,OAAOP,IACf5D,MAAK,SAAA2H,GAAI,OAAI0L,EAAc1L,MAGvB,WACN0L,OAActP,MAEb,CAACH,IAGJ,IAAM4P,EAAsB,uCAAG,WAAOjS,GAAP,iBAAA7F,EAAA,sDAC1B6F,EAAEa,kBAAkBqR,oBACjBjB,EAAOjR,EAAEa,OAAOsR,aAAa,SAC7BnX,EAAS4H,OAAOqO,MAGrBjR,EAAEC,iBACF3C,EAAQgD,KAAR,WAAiBtF,MAPW,2CAAH,sDAwBtBoX,EAAcvZ,SAAS4W,cAAc,OAC3C2C,EAAY5J,UAAZ,iBAAwBqJ,QAAxB,IAAwBA,OAAxB,EAAwBA,EAAY9V,mBAApC,QAAmD,GACnD,IAAMsW,EAAUD,EAAYE,qBAAqB,KACjDjT,MAAMkT,KAAKF,GAASG,SAAQ,SAACC,GAC5B,IAAMzX,EAAS4H,OAAO6P,EAAGN,aAAa,SAClCnX,GACHyX,EAAGC,aAAa,WAAY1X,EAAO0W,eAIrC,IAAMiB,EAA0BnD,IAAMC,cAAc,MAAO,CAC1DC,wBAAyB,CACxBC,OAAQyC,EAAY5J,aAKtB,OACC,yBAAK1I,UAAU,wBAEE0C,IAAfqP,EACE,4BAAQ/R,UAAU,qBAAlB,yBAEe,OAAf+R,EACC,sHAEA,yBAAK/R,UAAU,eAChB,yBAAK6B,MAAO,CAACsB,MAAO,UAEnB,kBAAC,KAAD,CACCD,SAAS,eACT4P,UAAW,IACXC,iBAAe,EACfC,aAAa,EACbC,cAAY,EACZC,KAAK,EACLC,kBAAkB,EAClBC,WAAW,EACXC,cAAY,IAEb,kBAAChS,EAAA,EAAD,CAAQsJ,QAAS,WACZ1S,EAAW0B,SAASoY,GACvBlY,MAAM,6FAENqW,EAAc,GAAD,mBAAKjY,GAAL,CAAiB8Z,KAE9BuB,KAAMC,KAAK,0FAAqB,CAC/BrQ,SAAU,eACV4P,UAAW,IACXC,iBAAiB,EACjBE,cAAc,EACdI,cAAc,EACdD,WAAW,EACXlK,cAAUxG,OAbb,6BAoBiB,WAAX,OAAJD,QAAI,IAAJA,OAAA,EAAAA,EAAM5H,OAAmC,aAAX,OAAJ4H,QAAI,IAAJA,OAAA,EAAAA,EAAM5H,QACb,oCACI,kBAACwG,EAAA,EAAD,CAAQsJ,QAAS,kBAAMnN,EAAQgD,KAAR,wBAA8BuR,EAAWxV,OAAhE,gBACA,kBAAC8E,EAAA,EAAD,CAAQsJ,QAAS,kBA3E1BzP,EA2E6C6W,EAAWxV,QA1EzEzD,OAAOyL,QAAQ,yEAClBpK,EACEmC,WAAWpB,GACXyD,MAAK,WACLrB,EAASrG,EAAQQ,sBAAsByD,IACvCsC,EAAQgD,KAAK,SANI,IAACtF,IA2ES,kBAK1B,yBAAK2G,MAAO,CAAC2R,SAAU,SACtB,sCAAKzB,QAAL,IAAKA,OAAL,EAAKA,EAAYtG,gBAAjB,eAAuCsG,QAAvC,IAAuCA,OAAvC,EAAuCA,EAAYjG,WAAnD,KACA,0DAAUiG,QAAV,IAAUA,OAAV,EAAUA,EAAY0B,YACtB,yDAAW,IAAIC,KAAJ,UAAS3B,SAAT,aAAS,EAAaxL,aAAaoN,eAAe,WAG9D,wBAAI9R,MAAO,CAAC4N,UAAW,SAAUrN,aAAc,QAASpC,UAAU,QAAlE,OAA0E+R,QAA1E,IAA0EA,OAA1E,EAA0EA,EAAY/V,MAEtF,yBAAKgE,UAAU,cAAc2K,QAASwH,GACpCU,GAGF,yBAAKhR,MAAO,CAAC+R,UAAW,SACvB,kBAAC,KAAQC,OAAT,CACCC,OAAO,0BACPjS,MAAO,CAAC4B,MAAO,IAAKC,OAAQ,KAC5BqQ,OAAO,MAGT,kBAAC,KAAD,CACC/T,UAAU,eACVgU,OAAO,QACPC,UAAU,QACV5I,gBAAgB,QAChBH,QAAM,EAACgJ,YAAY,QACnBC,iBAAkB,WAEjBC,EAAcC,EAAeC,GAAU,IADtCxQ,EACqC,EADrCA,KAAMV,EAC+B,EAD/BA,IAED0D,EAAI/N,SAASwb,gBAOnB,OALAzQ,EAAOkJ,KAAKwH,IAAI1N,EAAE2N,YAAcH,EAAKG,YAAa3Q,GAElDV,EAAM4J,KAAKwH,IAAI1N,EAAE4N,aAAeJ,EAAKI,aAActR,GACnDU,EAAOkJ,KAAKE,IAAI,EAAGpJ,GAEZ,CAACV,IADRA,EAAM4J,KAAKE,IAAI,EAAG9J,GACLU,SAEd6Q,UAAW,IACXC,YAAa,IACbC,UAAW,IAIX9M,WAAY,SAAA7M,GACX,OAAKA,GAEA+W,EAAa/W,IACjBf,EACE+B,QAAQyK,SAASzL,IACjByD,MAAK,SAAA2H,GAAS,IAAD,EACb4L,EAAgB,eAAID,EAAL,gBAAoB/W,EAApB,iBAA6BoL,QAA7B,IAA6BA,OAA7B,EAA6BA,EAAMrK,mBAAnC,QAAkD,2FAKnE,oCACEyT,IAAMC,cAAc,MAAO,CAC3BC,wBAAyB,CACxBC,OAAQoC,EAAa/W,QAdL,YC9Kf4Z,GAAgC,WAC5C,OACC,oCACC,kBAAC,EAAD,MACA,kBAAC,GAAD,QCHH,SAASC,GAAgBC,GACxB,OAAe,OAARA,GAAsC,OAAtBA,EAAIC,MAAM,QAK3B,IAAMC,GAAkC,WAAO,IAAD,EACJxX,mBAA4B,IADxB,mBAC7CqI,EAD6C,KAC3BC,EAD2B,OAEZtI,oBAAkB,GAFN,mBAE7C3B,EAF6C,KAE/BmK,EAF+B,OAGpBxI,mBAAS,IAHW,mBAG7CyX,EAH6C,KAGnCC,EAHmC,OAId1X,mBAAS,IAJK,mBAI7C2X,EAJ6C,KAIhCC,EAJgC,OAKN5X,oBAAU,GALJ,mBAK7C6X,EAL6C,KAK5BC,EAL4B,KAepD,OAPA9W,qBAAU,WACTvE,EACEyC,sBACA+B,MAAK,SAAAC,GAAG,OAAIoH,EAAoBpH,QAChC,IAIF,oCACC,0BAAMvG,OAAO,oBAAoBwT,OAAO,OAClC5L,SAAU,SAAAC,GACT,OAAInE,EAAe,GAClBmE,EAAEC,sBACFtG,MAAM,4FAIH0b,EAAkB,GACrBrV,EAAEC,sBACFtG,MAAM,0EAIHkb,GAAgBI,IACnBjV,EAAEC,sBACFtG,MAAM,gFAIHkb,GAAgBM,IACnBnV,EAAEC,sBACFtG,MAAM,qFAIFf,OAAOyL,QAAQ,wGACnBrE,EAAEC,oBAKT,kBAACqG,EAAA,EAAD,CAAajF,QAAQ,WAAWM,MAAO,CAAC4B,MAAO,UAC9C,kBAACgD,EAAA,EAAD,qBACA,kBAACxF,EAAA,EAAD,CAAQhC,KAAK,eACLF,MAAOhD,EACP2E,SAAU,SAACR,GAAD,OAAOgG,EAAgBS,SAASzG,EAAEa,OAAOhC,SACnDwC,QAAQ,WACRvC,MAAM,gBACZ+G,EACCa,SAAQ,SAAA9H,GAAE,OAAIA,EAAG+H,gBACjBhI,KAAI,SAAAiI,GAAC,OACL,kBAAC5F,EAAA,EAAD,CAAUc,IAAK8E,EAAEvK,GAAIwC,MAAO+H,EAAEvK,IAAKuK,EAAE7H,WAMzC,6BACA,6BAEA,kBAACuH,EAAA,EAAD,CAAajF,QAAQ,WAAWM,MAAO,CAAC4B,MAAO,UAC9C,kBAACgD,EAAA,EAAD,kCACA,kBAACxF,EAAA,EAAD,CAAQhC,KAAK,kBACLF,MAAOwW,EACP7U,SAAU,SAACR,GAAD,OAAOsV,EAAmBtV,EAAEa,OAAOhC,QAC7CwC,QAAQ,WACRvC,MAAM,6BACb,kBAACkC,EAAA,EAAD,CAAUnC,MAAO9E,EAAmB8D,MAApC,gBACA,kBAACmD,EAAA,EAAD,CAAUnC,MAAO9E,EAAmBkH,aAApC,gBACA,kBAACD,EAAA,EAAD,CAAUnC,MAAO9E,EAAmBmH,MAApC,+BAIF,6BACA,6BAEA,kBAACN,EAAA,EAAD,CAAW7B,KAAK,eACLD,MAAM,kCACN6C,MAAO,CAAC4B,MAAO,SACf1E,MAAOoW,EACP5T,QAAQ,WACRb,SAAU,SAACR,GAAD,OAAOkV,EAAYlV,EAAEa,OAAOhC,UAEjD,6BACA,6BAEA,kBAAC+B,EAAA,EAAD,CAAW7B,KAAK,kBACLD,MAAM,kCACN6C,MAAO,CAAC4B,MAAO,SACf1E,MAAOsW,EACP9T,QAAQ,WACRb,SAAU,SAACR,GAAD,OAAOoV,EAAepV,EAAEa,OAAOhC,UAEpD,6BACA,6BAEA,2BAAOuC,KAAK,SAASvC,MAAM,gC,OCzEhB,SAAS0W,KACvB,IAAMnY,EAAWC,cAGXkF,EAAOnE,aAAY,SAAClG,GAAD,OAAuBA,EAAMN,YAUtD,OAPA4G,qBAAU,WACTvE,EACEC,cACAuE,MAAK,SAAA8D,GAAI,OAAInF,EAASrG,EAAQC,kBAAkBuL,SAChD,IAIF,oCACC,kBAAC,IAAD,KACC,kBAAC,IAAD,CAAOiT,KAAK,oCAAkC,kBAAC,EAAD,OAC9C,kBAAC,IAAD,CAAOA,KAAK,uBAAqB,kBAAC,EAAD,OACjC,kBAAC,IAAD,CAAOA,KAAK,KAAI,kBAAC,EAAD,QAIjB,yBAAK1V,UAAU,eACd,yBAAKA,UAAU,OACd,gCACC,6BACC,4BACC,4BAAI,kBAAC,IAAD,CAAMiC,GAAG,KAAT,8BAEa,WAAX,OAAJQ,QAAI,IAAJA,OAAA,EAAAA,EAAM5H,OAAmC,aAAX,OAAJ4H,QAAI,IAAJA,OAAA,EAAAA,EAAM5H,QAAuB,4BAAI,kBAAC,IAAD,CAAMoH,GAAG,cAAT,6BAE7D,4BAAI,kBAAC,IAAD,CAAMA,GAAG,cAAT,6BAEY,WAAX,OAAJQ,QAAI,IAAJA,OAAA,EAAAA,EAAM5H,OACiB,oCACI,4BAAI,kBAAC,IAAD,CAAMoH,GAAG,YAAT,6BACJ,4BAAI,kBAAC,IAAD,CAAMA,GAAG,qBAAT,6BACJ,4BAAI,kBAAC,IAAD,CAAMA,GAAG,iBAAT,sDACJ,4BAAI,kBAAC,IAAD,CAAMA,GAAG,eAAT,oCAGhC,yBAAKJ,MAAO,CAACsB,MAAO,UAClBV,EACA,oCACC,0BAAMpK,OAAO,uCAAuCwT,OAAO,QAC1D,4BACgB,UAAdpJ,EAAK5H,KAAmB,qCAAQ,0BAAMgH,MAAO,CAAC2R,SAAU,SAAxB,WAAmC/Q,QAAnC,IAAmCA,OAAnC,EAAmCA,EAAMxD,KAAzC,KACjC,4BAAQqC,KAAK,SAASO,MAAO,CAACwJ,gBAAiB,cAAeH,OAAQ,OAAQyK,OAAQ,YAAtF,+BAKH,oCACC,4BAAI,uBAAGxE,KAAK,8BAAR,6BACJ,4BAAI,uBAAGA,KAAK,2BAAR,4BASV,8BACC,kBAAC,IAAD,KACC,kBAAC,IAAD,CAAOyE,OAAK,EAACF,KAAK,KAAI,kBAAC,EAAD,OACtB,kBAAC,IAAD,CAAOE,OAAK,EAACF,KAAK,WAAU,kBAAC,GAAD,OAC5B,kBAAC,IAAD,CAAOE,OAAK,EAACF,KAAK,cAAa,kBAAC,GAAD,OAC/B,kBAAC,IAAD,CAAOE,OAAK,EAACF,KAAK,eAAc,kBAAC,GAAD,OAChC,kBAAC,IAAD,CAAOE,OAAK,EAACF,KAAK,YAAW,kBAAC,GAAD,OAC7B,kBAAC,IAAD,CAAOE,OAAK,EAACF,KAAK,qBAAoB,kBAAC,EAAD,OACtC,kBAAC,IAAD,CAAOE,OAAK,EAACF,KAAK,iBAAgB,kBAAC,GAAD,OAClC,kBAAC,IAAD,CAAOE,OAAK,EAACF,KAAK,cAAa,kBAAC,EAAD,OAC/B,kBAAC,IAAD,CAAOE,OAAK,EAACF,KAAK,oCAAkC,kBAAC,EAAD,OACpD,kBAAC,IAAD,CAAOE,OAAK,EAACF,KAAK,wBAAsB,kBAAC,GAAD,OACxC,kBAAC,IAAD,KAAO,8GAKT,gCACC,4FAA0B,uBAAGvE,KAAK,8BAAR,uBAC1B,6BACA,2HChHN,IAAM0E,GAAQC,YAAYle,EAASme,YAAQC,YAAgBC,OAI3DC,IAASC,OACR,kBAAC,IAAD,CAAUN,MAAOA,IAChB,kBAAC,IAAD,CAAQrY,QAASA,GAChB,kBAAC,GAAD,QAGFzE,SAASqd,eAAe,W","file":"static/js/main.96c27db9.chunk.js","sourcesContent":["import { createBrowserHistory } from 'history';\r\nexport default createBrowserHistory();","import {ActionType, createStandardAction} from \"typesafe-actions\";\r\nimport {Option} from \"react-multi-select-component/dist/lib/interfaces\";\r\nimport {AuthInfo, IndexWord} from \"../models/models\";\r\n\r\n\r\n\r\nexport let Actions = {\r\n\tsetAuthInfoAction: createStandardAction(\"setUserAction\")(),\r\n\r\n\tsetSelectedSearchDictionaryGroups: createStandardAction(\"setSelectedSearchDictionaryGroups\")(),\r\n\r\n\tsetIndexWordsAction: createStandardAction(\"getWordsAction\")<{ startIndex: number, stopIndex: number, loadedIndexWords: IndexWord[] }>(),\r\n\tsetIndexWordsCountAction: createStandardAction(\"setIndexWordsCountAction\")(),\r\n\taddIndexWordAction: createStandardAction(\"addWordAction\")(),\r\n\tupdateIndexWordAction: createStandardAction(\"updateIndexWordAction\")(),\r\n\tdeleteIndexWordAction: createStandardAction(\"deleteWordAction\")(),\r\n\tcheckDeleteIndexWordAction: createStandardAction(\"checkDeleteIndexWordAction\")<{ indexWordIndex: number, deleteChecked: boolean }>(),\r\n\tdeleteDeleteCheckedIndexWordsAction: createStandardAction(\"DeleteDeleteCheckedIndexWordsAction\")(),\r\n};\r\n\r\n\r\n\r\nexport type ActionStrong = ActionType;","import {produce} from \"immer\";\r\nimport {createReducer} from \"typesafe-actions\";\r\nimport {StoreState, initialState} from \"./StoreState\";\r\nimport {ActionStrong, Actions} from \"./Actions\";\r\n\r\n\r\n\r\nconst reducer = createReducer(initialState)\r\n\t.handleAction(Actions.setAuthInfoAction, (state, action) =>\r\n\t\tproduce(state, draft => {\r\n\t\t\tdraft.authInfo = action.payload;\r\n\t\t})\r\n\t)\r\n\r\n\r\n\r\n\t.handleAction(Actions.setSelectedSearchDictionaryGroups, (state, action) =>\r\n\t\tproduce(state, draft => {\r\n\t\t\tdraft.selectedSearchDictionaryGroups = action.payload;\r\n\t\t})\r\n\t)\r\n\r\n\r\n\r\n\t.handleAction(Actions.setIndexWordsAction, (state, action) =>\r\n\t\tproduce(state, draft => {\r\n\t\t\tfor (let i = 0; i < action.payload.stopIndex - action.payload.startIndex + 1; i++) {\r\n\t\t\t\tdraft.indexWords[action.payload.startIndex + i] = action.payload.loadedIndexWords[i];\r\n\t\t\t}\r\n\t\t})\r\n\t)\r\n\r\n\t.handleAction(Actions.setIndexWordsCountAction, (state, action) =>\r\n\t\tproduce(state, draft => {\r\n\t\t\tdraft.indexWordsCount = action.payload;\r\n\t\t})\r\n\t)\r\n\r\n\t.handleAction(Actions.addIndexWordAction, (state, action) =>\r\n\t\tproduce(state, draft => {\r\n\t\t\tdraft.indexWordsCount = 0;\r\n\t\t\tdraft.indexWords = {};\r\n\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tconst l = window.document.getElementsByClassName(\"index_word_list\")[0];\r\n\t\t\t\tl.scrollTop += 50;\r\n\t\t\t}, 500);\r\n\t\t})\r\n\t)\r\n\r\n\t.handleAction(Actions.updateIndexWordAction, (state, action) =>\r\n\t\tproduce(state, draft => {\r\n\t\t\tdraft.indexWordsCount = 0;\r\n\t\t\tdraft.indexWords = {};\r\n\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tconst l = window.document.getElementsByClassName(\"index_word_list\")[0];\r\n\t\t\t\tl.scrollTop += 50;\r\n\t\t\t}, 500);\r\n\t\t})\r\n\t)\r\n\r\n\t.handleAction(Actions.deleteIndexWordAction, (state, action) =>\r\n\t\tproduce(state, draft => {\r\n\t\t\tdraft.indexWordsCount = 0;\r\n\t\t\tdraft.indexWords = {};\r\n\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tconst l = window.document.getElementsByClassName(\"index_word_list\")[0];\r\n\t\t\t\tl.scrollTop += 50;\r\n\t\t\t}, 500);\r\n\t\t})\r\n\t)\r\n\r\n\t.handleAction(Actions.checkDeleteIndexWordAction, (state, action) =>\r\n\t\tproduce(state, draft => {\r\n\t\t\tconst indexWordToCheckDelete = draft.indexWords[action.payload.indexWordIndex];\r\n\t\t\tindexWordToCheckDelete.deleteChecked = action.payload.deleteChecked;\r\n\t\t})\r\n\t)\r\n\r\n\t.handleAction(Actions.deleteDeleteCheckedIndexWordsAction, (state, action) =>\r\n\t\tproduce(state, draft => {\r\n\t\t\tdraft.indexWordsCount = 0;\r\n\t\t\tdraft.indexWords = {};\r\n\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tconst l = window.document.getElementsByClassName(\"index_word_list\")[0];\r\n\t\t\t\tl.scrollTop += 50;\r\n\t\t\t}, 500);\r\n\t\t})\r\n\t);\r\n\r\n\r\n\r\nexport default reducer;","import {Option} from \"react-multi-select-component/dist/lib/interfaces\";\r\nimport {AuthInfo, IndexWord, Word} from \"../models/models\";\r\n\r\n\r\n\r\nexport interface StoreState {\r\n\tauthInfo: AuthInfo | null\r\n\tindexWords: Record\r\n\tindexWordsCount: number\r\n\tprintWords: Word[]\r\n\tselectedSearchDictionaryGroups: Option[]\r\n}\r\n\r\n\r\n\r\nexport const initialState: StoreState = {\r\n\tauthInfo: null,\r\n\tindexWords: {},\r\n\tindexWordsCount: 0,\r\n\tprintWords: [],\r\n\tselectedSearchDictionaryGroups: []\r\n};","import axios from \"axios\";\r\nimport {AuthInfo, Dictionary, DictionaryGroup, IndexWord, Role, User, Word, SearchPositionType} from \"./models/models\";\r\n\r\n\r\n\r\naxios.interceptors.response.use(\r\n\tfunction (response) {\r\n\t\t// Do something with response data\r\n\t\treturn response;\r\n\t},\r\n\tfunction (error) {\r\n\t\tif (error.response.config.url.includes(\"/Api/Word/\")) {\r\n\t\t\tif (error.response.status === 404) {\r\n\t\t\t\treturn Promise.reject(error);\r\n\t\t\t}\r\n\t\t}\r\n\t\talert(error.response.data);\r\n\t\treturn Promise.reject(error);\r\n\t}\r\n);\r\n\r\n\r\n\r\nexport const ServerApi = {\r\n\tgetAuthInfo: async () => {\r\n\t\tconst response = await axios.get(\"/Api/User/GetAuthInfo\");\r\n\t\treturn response.data;\r\n\t},\r\n\r\n\r\n\r\n\tgetUsers: async (pageNumber: number, pageSize: number) => {\r\n\t\tconst response = await axios.get<{ totalCount: number, users: User[] }>(`/Api/User/GetUsers?pageNumber=${pageNumber}&pageSize=${pageSize}`);\r\n\t\treturn response.data;\r\n\t},\r\n\r\n\tgetManagers: async () => {\r\n\t\tconst response = await axios.get(\"/Api/User/GetManagers\");\r\n\t\treturn response.data;\r\n\t},\r\n\r\n\tupdateRole: async (userId: string, role: Role) => {\r\n\t\tawait axios.patch(`/Api/User/UpdateRole/${userId}`, {role});\r\n\t},\r\n\r\n\tdeleteUser: async (userId: string) => {\r\n\t\tawait axios.delete(`/Api/User/${userId}`);\r\n\t},\r\n\r\n\r\n\r\n\tgetIndexWordIndex: async (wordId: number, dictionaryGroupIds: number[]) => {\r\n\t\tconst response = await axios.post(`/Api/Word/GetIndexWordIndex/`, {wordId, dictionaryGroupIds});\r\n\t\treturn response.data;\r\n\t},\r\n\r\n\tgetIndexWordsCount: async (dictionaryGroupIds: number[]) => {\r\n\t\tconst response = await axios.post(`/Api/Word/GetIndexWordsCount/`, {dictionaryGroupIds});\r\n\t\treturn response.data;\r\n\t},\r\n\r\n\tgetIndexWords: async (startIndex: number, stopIndex: number, dictionaryGroupIds: number[]) => {\r\n\t\tconst response = await axios.post(`/Api/Word/GetIndexWords`, {startIndex, stopIndex, dictionaryGroupIds});\r\n\t\treturn response.data;\r\n\t},\r\n\r\n\tgetRecentWords: async () => {\r\n\t\tconst response = await axios.get(\"/Api/Word/GetRecentWords\");\r\n\t\treturn response.data;\r\n\t},\r\n\r\n\tsearch: async (groupIds: number[], filterKeyword: string, inTerm: boolean, inDescription: boolean, searchPosition: SearchPositionType) => {\r\n\t\tconst response = await axios.post(`/Api/Word/Search`, {groupIds, filterKeyword, inTerm, inDescription, searchPosition});\r\n\t\treturn response.data;\r\n\t},\r\n\r\n\tcreateWord: async (dictionaryId: number, term: string, description: string) => {\r\n\t\tconst response = await axios.post(\"/Api/Word/\", {dictionaryId, term, description});\r\n\t\treturn response.data;\r\n\t},\r\n\r\n\tgetWord: async (wordId: number) => {\r\n\t\ttry {\r\n\t\t\tconst response = await axios.get(`/Api/Word/${wordId}`);\r\n\t\t\treturn response.data;\r\n\t\t} catch (e) {\r\n\t\t\tif (e.response.status === 404) {\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tupdateWord: async (wordId: number, version: number, dictionaryId: number, term: string, description: string) => {\r\n\t\tconst response = await axios.put(\"/Api/Word/\", {wordId, version, dictionaryId, term, description});\r\n\t\treturn response.data;\r\n\t},\r\n\r\n\tdeleteWord: async (id: number) => {\r\n\t\tconst response = await axios.delete(`/Api/Word/${id}`);\r\n\t\treturn response.data;\r\n\t},\r\n\r\n\tdeleteManyWords: async (wordIds: number[]) => {\r\n\t\tconst response = await axios.post(`/Api/Word/DeleteMany`, {wordIds});\r\n\t\treturn response.data;\r\n\t},\r\n\r\n\r\n\r\n\tcreateDictionaryGroup: async (dictionaryGroupName: string) => {\r\n\t\tconst response = await axios.post(\"/Api/DictionaryGroup\", {dictionaryGroupName});\r\n\t\treturn response.data;\r\n\t},\r\n\r\n\tgetDictionaryGroups: async (includeCount: boolean = false) => {\r\n\t\tconst response = await axios.get(`/Api/DictionaryGroup/${includeCount}`);\r\n\t\treturn response.data;\r\n\t},\r\n\r\n\tupdateDictionaryGroup: async (dictionaryGroupId: number, dictionaryGroupName: string) => {\r\n\t\tconst response = await axios.patch(`/Api/DictionaryGroup/${dictionaryGroupId}`, {dictionaryGroupName});\r\n\t\treturn response.data;\r\n\t},\r\n\r\n\tcreateDictionary: async (dictionaryName: string, dictionaryGroupId: number) => {\r\n\t\tconst response = await axios.post(\"/Api/Dictionary\", {dictionaryGroupId, dictionaryName});\r\n\t\treturn response.data;\r\n\t},\r\n\r\n\tupdateDictionary: async (dictionaryId: number, dictionaryName: string) => {\r\n\t\tconst response = await axios.patch(`/Api/Dictionary/${dictionaryId}`, {dictionaryName});\r\n\t\treturn response.data;\r\n\t},\r\n};","export type Role = \"Admin\" | \"Manager\" | \"Normal\";\r\n\r\n\r\n\r\nexport interface AuthInfo {\r\n\tname: string\r\n\trole: Role\r\n}\r\n\r\n\r\n\r\nexport interface User {\r\n\tid: string\r\n\tname: string\r\n\temail: string\r\n\trole: Role\r\n}\r\n\r\n\r\n\r\nexport interface DictionaryGroup {\r\n\tid: number\r\n\tname: string\r\n\tdictionaries: Dictionary[]\r\n}\r\n\r\nexport interface Dictionary {\r\n\tid: number\r\n\tname: string\r\n\tdictionaryGroupId: number\r\n\tcount: number\r\n}\r\n\r\n\r\n\r\nexport interface IndexWord {\r\n\tid: number\r\n\tterm: string\r\n\tupdatedWhen: Date\r\n\tdeleteChecked: boolean\r\n}\r\n\r\n\r\n\r\nexport interface Word {\r\n\tid: number\r\n\tversion: number\r\n\tterm: string\r\n\tdescription: string\r\n\tdictionary: string\r\n\tdictionaryId: number\r\n\tdictionaryGroup: string\r\n\tupdatedWhen: Date\r\n\tregistrant: string\r\n\tupdater: string\r\n}\r\n\r\n\r\n\r\nexport enum SearchLocationType {\r\n\tTerm,\r\n\tDescription,\r\n\tBoth\r\n}\r\n\r\nexport enum SearchPositionType {\r\n\tStartsWith,\r\n\tContains\r\n}\r\n\r\nexport interface SearchQuery {\r\n\tsearchKeyword: string\r\n\tdictionaryGroupIds: number[]\r\n\tsearchLocationType: SearchLocationType\r\n\tsearchPositionType: SearchPositionType\r\n}","import React, {useEffect, useState} from \"react\";\r\nimport {useHistory, useLocation} from \"react-router-dom\";\r\nimport {Button, MenuItem, Select, TextField} from \"@material-ui/core\";\r\nimport MultiSelect from \"react-multi-select-component/dist\";\r\nimport {Option} from \"react-multi-select-component/dist/lib/interfaces\";\r\nimport {ServerApi} from \"../ServerApi\";\r\nimport {SearchLocationType, SearchPositionType, SearchQuery, Word} from \"../models/models\";\r\nimport 'react-virtualized/styles.css';\r\nimport \"./WordSearchComponent.scss\";\r\nimport {Actions} from \"../store/Actions\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {StoreState} from \"../store/StoreState\";\r\nimport {useLocalStorage} from \"@rehooks/local-storage\";\r\n\r\nconst queryString = require('query-string');\r\n\r\n\r\n// @ts-ignore\r\nfunction arraysEqual(_arr1, _arr2) {\r\n\tif (!Array.isArray(_arr1) || !Array.isArray(_arr2) || _arr1.length !== _arr2.length)\r\n\t\treturn false;\r\n\r\n\tconst arr1 = _arr1.concat().sort();\r\n\tconst arr2 = _arr2.concat().sort();\r\n\r\n\tfor (let i = 0; i < arr1.length; i++) {\r\n\r\n\t\tif (arr1[i] !== arr2[i])\r\n\t\t\treturn false;\r\n\r\n\t}\r\n\r\n\treturn true;\r\n}\r\n\r\n\r\nexport const WordSearchComponent: React.FC = () => {\r\n\tconst dispatch = useDispatch();\r\n\tconst history = useHistory();\r\n\r\n\tconst [allDictionaryGroups, setAllDictionaryGroups] = useState([]);\r\n\tconst [searchKeyword, setSearchKeyword] = useState(\"\");\r\n\tconst [searchLocationType, setSearchLocationType] = useState(SearchLocationType.Term);\r\n\tconst [searchPositionType, setSearchPositionType] = useState(SearchPositionType.StartsWith);\r\n\tconst selectedDictionaryGroups = useSelector((state: StoreState) => state.selectedSearchDictionaryGroups);\r\n\tconst [dictionaryGroupsFromLocalStorage, setSelectedDictionaryGroupsFromLocalStorage, deleteDictionaryGroupsFromLocalStorage] = useLocalStorage('DictionaryGroupsFromLocalStorage', []);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tServerApi\r\n\t\t\t.getDictionaryGroups()\r\n\t\t\t.then(dgs => {\r\n\t\t\t\tconst allDictionaryGroups = dgs.map(dg => ({value: dg.id, label: dg.name} as Option));\r\n\r\n\t\t\t\tsetAllDictionaryGroups(allDictionaryGroups);\r\n\r\n\t\t\t\tconst selectedDgsExistingInLocalStorage = allDictionaryGroups.filter(dg => dictionaryGroupsFromLocalStorage.includes(dg.value));\r\n\r\n\t\t\t\tif (selectedDictionaryGroups.length === 0 || !arraysEqual(selectedDictionaryGroups.map(x => x.value), selectedDgsExistingInLocalStorage.map(x => x.value)))\r\n\t\t\t\t\tdispatch(Actions.setSelectedSearchDictionaryGroups(selectedDgsExistingInLocalStorage));\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tsetSelectedDictionaryGroupsFromLocalStorage(selectedDictionaryGroups.map(dg => dg.value));\r\n\t}, [selectedDictionaryGroups]);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tif (searchLocationType !== SearchLocationType.Term) {\r\n\t\t\tsetSearchPositionType(SearchPositionType.Contains);\r\n\t\t}\r\n\t}, [searchLocationType]);\r\n\r\n\r\n\tconst handleSearch = (e: React.FormEvent) => {\r\n\t\te.preventDefault();\r\n\r\n\t\tconst searchQuery = {\r\n\t\t\tdictionaryGroupIds: selectedDictionaryGroups.map(dg => dg.value),\r\n\t\t\tsearchKeyword,\r\n\t\t\tsearchLocationType,\r\n\t\t\tsearchPositionType\r\n\t\t} as SearchQuery;\r\n\r\n\t\tconst searchQueryString = queryString.stringify(searchQuery, {arrayFormat: 'bracket'});\r\n\r\n\t\thistory.push(`/Search?${searchQueryString}`);\r\n\t};\r\n\r\n\r\n\treturn (\r\n\t\t
\r\n\r\n\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t\t dispatch(Actions.setSelectedSearchDictionaryGroups(options))}\r\n\t\t\t\t\t\tdisableSearch={true}\r\n\t\t\t\t\t\tlabelledBy={\"사전 그룹 선택\"}\r\n\t\t\t\t\t\toverrideStrings={\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\"selectSomeItems\": \"사전 선택...\",\r\n\t\t\t\t\t\t\t\t\"allItemsAreSelected\": \"전체 사전\",\r\n\t\t\t\t\t\t\t\t\"selectAll\": \"전체 선택\",\r\n\t\t\t\t\t\t\t\t\"search\": \"검색\"\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t/>\r\n\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t setSearchKeyword(e.target.value)}\r\n\t\t\t\t\t\t label=\"검색어\"\r\n\t\t\t\t\t\t size=\"small\"\r\n\t\t\t\t\t\t className=\"item1\"/>\r\n\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t
\r\n\r\n\t\t
\r\n\t)\r\n};","import React, {useEffect, useState} from \"react\";\r\nimport {Link} from \"react-router-dom\";\r\nimport \"./WordSearchComponent.scss\";\r\nimport {IndexWord} from \"../models/models\";\r\nimport {ServerApi} from \"../ServerApi\";\r\nimport 'react-virtualized/styles.css';\r\n\r\n\r\n\r\nexport const RecentWordsComponent: React.FC = () => {\r\n\tconst [recentWords, setRecentWords] = useState([]);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tServerApi\r\n\t\t\t.getRecentWords()\r\n\t\t\t.then(words => setRecentWords(words));\r\n\t}, []);\r\n\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t

최근 등록 용어

\r\n\r\n\t\t\t
    \r\n\t\t\t\t{recentWords.map(w =>\r\n\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{w.term}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t
  • \r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t
\r\n\t)\r\n};","import React from \"react\";\r\nimport {WordSearchComponent} from \"../components/WordSearchComponent\";\r\nimport {RecentWordsComponent} from \"../components/RecentWordsComponent\";\r\n\r\n\r\n\r\nexport const MainPage: React.FC = () => {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t)\r\n};","import React, {useEffect, useState} from 'react';\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {NavLink, useParams} from \"react-router-dom\";\r\nimport {AutoSizer, InfiniteLoader} from \"react-virtualized\";\r\nimport {StoreState} from \"../store/StoreState\";\r\nimport {Actions} from \"../store/Actions\";\r\nimport {ServerApi} from \"../ServerApi\";\r\nimport {List} from \"react-virtualized\";\r\nimport {IndexWord} from \"../models/models\";\r\nimport {Resizable} from \"re-resizable\";\r\nimport {Option} from \"react-multi-select-component/dist/lib/interfaces\";\r\n\r\n\r\nexport const IndexWordListComponent: React.FC = () => {\r\n\tconst dispatch = useDispatch();\r\n\r\n\tconst {wordIdParam} = useParams();\r\n\r\n\tconst user = useSelector((state: StoreState) => state.authInfo);\r\n\r\n\tconst [allDictionaryGroups, setAllDictionaryGroups] = useState([]);\r\n\tconst indexWords = useSelector((state: StoreState) => state.indexWords);\r\n\tconst indexWordsCount = useSelector((state: StoreState) => state.indexWordsCount);\r\n\tconst selectedSearchDictionaryGroups = useSelector((state: StoreState) => state.selectedSearchDictionaryGroups);\r\n\tconst [selectedWordIndex, setSelectedWordIndex] = useState(undefined);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tServerApi\r\n\t\t\t.getDictionaryGroups()\r\n\t\t\t.then(dgs => {\r\n\t\t\t\tconst allDictionaryGroups = dgs.map(dg => ({value: dg.id, label: dg.name} as Option));\r\n\t\t\t\tsetAllDictionaryGroups(allDictionaryGroups);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\t// let foo = selectedSearchDictionaryGroups.map(o => o.value as number);\r\n\t\t//\r\n\t\t// if (allDictionaryGroups.length === selectedSearchDictionaryGroups.length) {\r\n\t\t// \tfoo = [];\r\n\t\t// }\r\n\r\n\t\tServerApi\r\n\t\t\t.getIndexWordsCount(selectedSearchDictionaryGroups.map(o => o.value as number))\r\n\t\t\t.then(data => dispatch(Actions.setIndexWordsCountAction(data)));\r\n\t}, [dispatch, indexWordsCount]);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tdispatch(Actions.deleteIndexWordAction(0));\r\n\t}, [selectedSearchDictionaryGroups]);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tif (Number(wordIdParam)) {\r\n\t\t\t// let foo = selectedSearchDictionaryGroups.map(o => o.value as number);\r\n\t\t\t//\r\n\t\t\t// if (allDictionaryGroups.length === selectedSearchDictionaryGroups.length) {\r\n\t\t\t// \tfoo = [];\r\n\t\t\t// }\r\n\r\n\t\t\tServerApi\r\n\t\t\t\t.getIndexWordIndex(Number(wordIdParam), selectedSearchDictionaryGroups.map(o => o.value as number))\r\n\t\t\t\t.then(data => setSelectedWordIndex(data - 3 < 0 ? data : data - 3))\r\n\t\t\t\t.then(() => setTimeout(() => {\r\n\t\t\t\t\tsetSelectedWordIndex(undefined);\r\n\t\t\t\t}, 500));\r\n\t\t}\r\n\t}, [wordIdParam, indexWordsCount]);\r\n\r\n\r\n\tconst getRowsFromServer = ({startIndex, stopIndex}: { startIndex: number, stopIndex: number }) => {\r\n\t\t// let foo = selectedSearchDictionaryGroups.map(o => o.value as number);\r\n\t\t//\r\n\t\t// if (allDictionaryGroups.length === selectedSearchDictionaryGroups.length) {\r\n\t\t// \tfoo = [];\r\n\t\t// }\r\n\r\n\t\treturn ServerApi\r\n\t\t\t.getIndexWords(startIndex, stopIndex, selectedSearchDictionaryGroups.map(o => o.value as number))\r\n\t\t\t.then(data => dispatch(Actions.setIndexWordsAction({startIndex, stopIndex, loadedIndexWords: data})));\r\n\t};\r\n\r\n\r\n\tconst isRowLoaded = ({index}: { index: number }) => {\r\n\t\treturn !!indexWords[index];\r\n\t};\r\n\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t
{\r\n\t\t\t\tif (e.key === \"Delete\") {\r\n\t\t\t\t\tif (user && user.role === \"Admin\") {\r\n\t\t\t\t\t\tif (window.confirm(\"정말로 선택된 용어들을 삭제하시겠습니까?\")) {\r\n\t\t\t\t\t\t\tconst wordIdsToDelete = (Object.values(indexWords) as unknown as Array)\r\n\t\t\t\t\t\t\t\t.filter(iw => iw.deleteChecked)\r\n\t\t\t\t\t\t\t\t.map(iw => iw.id);\r\n\r\n\t\t\t\t\t\t\tServerApi\r\n\t\t\t\t\t\t\t\t.deleteManyWords(wordIdsToDelete)\r\n\t\t\t\t\t\t\t\t.then((deletedCount) => {\r\n\t\t\t\t\t\t\t\t\tdispatch(Actions.deleteDeleteCheckedIndexWordsAction());\r\n\t\t\t\t\t\t\t\t\talert(`${deletedCount}개의 용어가 삭제 되었습니다.`);\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}}>\r\n\t\t\t\t\r\n\t\t\t\t\t{({height, width}) => (\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{({onRowsRendered, registerChild}) => (\r\n\t\t\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t{isRowLoaded({index: row.index})\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t?\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{(user && user.role === \"Admin\") &&\r\n dispatch(Actions.checkDeleteIndexWordAction({indexWordIndex: row.index, deleteChecked: e.target.checked}))}/>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{indexWords[row.index]?.term}\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t:\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t<>로딩중...\r\n\t\t\t\t\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t)}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t)}\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\r\n\t)\r\n};","import React, {useEffect, useState} from \"react\";\r\nimport {useDispatch} from \"react-redux\";\r\nimport {useParams, useHistory} from \"react-router-dom\";\r\nimport {MenuItem, TextField, Select, InputLabel, FormControl, Button} from \"@material-ui/core\";\r\nimport {Editor} from \"@tinymce/tinymce-react/lib/cjs/main/ts\";\r\nimport {ServerApi} from \"../ServerApi\";\r\nimport {Actions} from \"../store/Actions\";\r\nimport {DictionaryGroup} from \"../models/models\";\r\nimport \"./WordEditorComponent.scss\"\r\nimport Axios from \"axios\";\r\n\r\n\r\n\r\nexport const WordEditorComponent: React.FC = () => {\r\n\tconst history = useHistory();\r\n\tconst dispatch = useDispatch();\r\n\r\n\r\n\tconst {wordIdParam} = useParams();\r\n\tconst [dictionaryGroups, setDictionaryGroups] = useState([]);\r\n\tconst [wordId, setWordId] = useState(null);\r\n\tconst [dictionaryId, setDictionaryId] = useState(-1);\r\n\tconst [term, setTerm] = useState(\"\");\r\n\tconst [description, setDescription] = useState(\"\");\r\n\tconst [version, setVersion] = useState(null);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tServerApi\r\n\t\t\t.getDictionaryGroups()\r\n\t\t\t.then(dgs => setDictionaryGroups(dgs));\r\n\r\n\t\tif (wordIdParam) {\r\n\t\t\tServerApi\r\n\t\t\t\t.getWord(Number(wordIdParam))\r\n\t\t\t\t.then(word => {\r\n\t\t\t\t\tsetWordId(word!.id);\r\n\t\t\t\t\tsetDictionaryId(word!.dictionaryId);\r\n\t\t\t\t\tsetTerm(word!.term);\r\n\t\t\t\t\tsetDescription(word!.description);\r\n\t\t\t\t\tsetVersion(word!.version);\r\n\t\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tsetWordId(null);\r\n\t\t\tsetDictionaryId(-1);\r\n\t\t\tsetTerm(\"\");\r\n\t\t\tsetDescription(\"\");\r\n\t\t\tsetVersion(null);\r\n\t\t};\r\n\r\n\t}, [wordIdParam]);\r\n\r\n\r\n\tconst handleSubmit = (e: React.FormEvent) => {\r\n\t\te.preventDefault();\r\n\r\n\t\tif (wordIdParam) {\r\n\t\t\tServerApi\r\n\t\t\t\t.updateWord(wordId!, version!, dictionaryId!, term, description)\r\n\t\t\t\t.then(w => {\r\n\t\t\t\t\tdispatch(Actions.updateIndexWordAction({id: w.id, term: w.term, updatedWhen: w.updatedWhen, deleteChecked: false}));\r\n\t\t\t\t\thistory.push(`/${w.id}`)\r\n\t\t\t\t});\r\n\t\t} else {\r\n\t\t\tServerApi\r\n\t\t\t\t.createWord(dictionaryId, term, description)\r\n\t\t\t\t.then(w => {\r\n\t\t\t\t\tdispatch(Actions.addIndexWordAction({id: w.id, term: w.term, updatedWhen: w.updatedWhen, deleteChecked: false}));\r\n\t\t\t\t\thistory.push(`/${w.id}`)\r\n\t\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t
\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t사전\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t setTerm(e.target.value)}/>\r\n\t\t\t\t
\r\n\r\n\t\t\t\t
\r\n\r\n\t\t\t\t {\r\n\r\n\t\t\t\t\t\t\teditor.ui.registry.addButton('ascending', {\r\n\t\t\t\t\t\t\t\ttext: '오름차순',\r\n\t\t\t\t\t\t\t\tonAction: () => {\r\n\t\t\t\t\t\t\t\t\tlet foo = editor.selection.getContent().split('\\n')\r\n\t\t\t\t\t\t\t\t\t\t.map((line: string) => new DOMParser().parseFromString(line, \"text/html\"))\r\n\t\t\t\t\t\t\t\t\t\t.sort(((a1: Document, a2: Document) => a1.body.innerText.localeCompare(a2.body.innerText)))\r\n\t\t\t\t\t\t\t\t\t\t.map((l: Document) => l.body.innerHTML);\r\n\r\n\t\t\t\t\t\t\t\t\teditor.selection.setContent(foo.join(\"\\n\"));\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\teditor.ui.registry.addButton('descending', {\r\n\t\t\t\t\t\t\t\ttext: '내림차순',\r\n\t\t\t\t\t\t\t\tonAction: () => {\r\n\t\t\t\t\t\t\t\t\tlet foo = editor.selection.getContent().split('\\n')\r\n\t\t\t\t\t\t\t\t\t\t.map((line: string) => new DOMParser().parseFromString(line, \"text/html\"))\r\n\t\t\t\t\t\t\t\t\t\t.sort(((a1: Document, a2: Document) => -a1.body.innerText.localeCompare(a2.body.innerText)))\r\n\t\t\t\t\t\t\t\t\t\t.map((l: Document) => l.body.innerHTML);\r\n\r\n\t\t\t\t\t\t\t\t\teditor.selection.setContent(foo.join(\"\\n\"));\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\tcharmap: [\r\n\t\t\t\t\t\t\t[0x0007, '검은 원'],\r\n\t\t\t\t\t\t\t[0x25FC, '검은 네모'],\r\n\t\t\t\t\t\t\t[0x2605, '검은 별'],\r\n\t\t\t\t\t\t\t[0x2606, '빈 별'],\r\n\t\t\t\t\t\t\t[0x25C0, '검은 왼쪽 세모'],\r\n\t\t\t\t\t\t\t[0x25B6, '검은 오른쪽 세모'],\r\n\t\t\t\t\t\t\t[0x25B2, '검은 위쪽 세모'],\r\n\t\t\t\t\t\t\t[0x25BC, '검은 아랫쪽 세모'],\r\n\t\t\t\t\t\t\t[0x261A, '검은 왼 손가락'],\r\n\t\t\t\t\t\t\t[0x261B, '검은 오른 손가락'],\r\n\t\t\t\t\t\t],\r\n\t\t\t\t\t\timages_upload_handler: function (blobInfo: any, success: any, failure: any, progress: any) {\r\n\t\t\t\t\t\t\tconst file = blobInfo.blob();\r\n\r\n\t\t\t\t\t\t\tconst formData = new FormData();\r\n\t\t\t\t\t\t\tformData.append('file', file, file.name);\r\n\r\n\t\t\t\t\t\t\tAxios.post('/Api/Word/UploadWordImage', formData)\r\n\t\t\t\t\t\t\t\t.then(res => {\r\n\t\t\t\t\t\t\t\t\tsuccess(res.data);\r\n\t\t\t\t\t\t\t\t})\r\n\t\t\t\t\t\t\t\t.catch(err => {\r\n\t\t\t\t\t\t\t\t\tfailure('이미지 업로드 실패 : ' + err.message);\r\n\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}}\r\n\t\t\t\t\tvalue={description}\r\n\t\t\t\t\tonEditorChange={(content, editor) => setDescription(content)}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t)\r\n};","import React, {useEffect, useState} from \"react\";\r\nimport {Button, createStyles, FormControl, InputLabel, MenuItem, Select, TextField, Theme} from \"@material-ui/core\";\r\nimport {makeStyles} from \"@material-ui/core/styles\";\r\nimport {produce} from \"immer\";\r\nimport {ServerApi} from \"../ServerApi\";\r\nimport {DictionaryGroup} from \"../models/models\";\r\n\r\n\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n\tcreateStyles({\r\n\t\tinput: {\r\n\t\t\tmarginBottom: \"30px\",\r\n\t\t\theight: 50\r\n\t\t}\r\n\t})\r\n);\r\n\r\n\r\n\r\nexport const DictionaryManagerComponent: React.FC = () => {\r\n\tconst classes = useStyles();\r\n\r\n\r\n\tconst [dictionaryGroups, setDictionaryGroups] = useState([]);\r\n\tconst [dictionaryGroupName, setDictionaryGroupName] = useState(\"\");\r\n\tconst [selectedDictionaryGroupId, setSelectedDictionaryGroupId] = useState(-1);\r\n\tconst [dictionaryName, setDictionaryName] = useState(\"\");\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tServerApi\r\n\t\t\t.getDictionaryGroups(true)\r\n\t\t\t.then(dgs => setDictionaryGroups(dgs));\r\n\t}, []);\r\n\r\n\r\n\tconst handleCreateDictionaryGroup = (dictionaryGroupName: string) => {\r\n\t\tServerApi\r\n\t\t\t.createDictionaryGroup(dictionaryGroupName)\r\n\t\t\t.then((dg) => {\r\n\t\t\t\tdg.dictionaries = [];\r\n\t\t\t\tsetDictionaryGroups(dictionaryGroups.concat(dg));\r\n\t\t\t\tsetDictionaryGroupName(\"\");\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst handleUpdateDictionaryGroup = (dictionaryGroupId: number) => {\r\n\t\tconst dictionaryGroup = dictionaryGroups.find(dg => dg.id === dictionaryGroupId)!;\r\n\r\n\t\tconst newDictionaryGroupName = prompt(\"새로운 사전 그룹 이름을 입력해주세요.\", dictionaryGroup.name)!;\r\n\r\n\t\tif (newDictionaryGroupName) {\r\n\t\t\tServerApi.updateDictionaryGroup(dictionaryGroup.id, newDictionaryGroupName)\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tconst newDictionaryGroups = produce(dictionaryGroups, draft => {\r\n\t\t\t\t\t\tconst dg = draft.find(dg => dg.id === dictionaryGroupId)!;\r\n\t\t\t\t\t\tdg.name = newDictionaryGroupName;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tsetDictionaryGroups(newDictionaryGroups);\r\n\t\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tconst handleCreateDictionary = (dictionaryName: string, dictionaryGroupId: number) => {\r\n\t\tServerApi\r\n\t\t\t.createDictionary(dictionaryName, dictionaryGroupId)\r\n\t\t\t.then((d) => {\r\n\t\t\t\tconst newDictionaryGroups = produce(dictionaryGroups, draft => {\r\n\t\t\t\t\td.count = 0;\r\n\t\t\t\t\tdraft.find(dg => dg.id === d.dictionaryGroupId)!.dictionaries.push(d);\r\n\t\t\t\t});\r\n\r\n\t\t\t\tsetDictionaryGroups(newDictionaryGroups);\r\n\t\t\t\tsetDictionaryName(\"\");\r\n\t\t\t});\r\n\t};\r\n\r\n\tconst handleUpdateDictionary = (dictionaryId: number) => {\r\n\t\tconst dictionary = dictionaryGroups\r\n\t\t\t.flatMap(dg => dg.dictionaries)\r\n\t\t\t.find(d => d.id === dictionaryId)!;\r\n\r\n\t\tconst newDictionaryName = prompt(\"새로운 사전 이름을 입력해주세요.\", dictionary.name)!;\r\n\r\n\t\tif (newDictionaryName) {\r\n\t\t\tServerApi.updateDictionary(dictionary.id, newDictionaryName)\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tconst newDictionaryGroups = produce(dictionaryGroups, draft => {\r\n\t\t\t\t\t\tconst d = draft\r\n\t\t\t\t\t\t\t.flatMap(dg => dg.dictionaries)\r\n\t\t\t\t\t\t\t.find(d => d.id === dictionaryId)!;\r\n\r\n\t\t\t\t\t\td.name = newDictionaryName;\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\tsetDictionaryGroups(newDictionaryGroups);\r\n\t\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t
\r\n\t\t\t\t setDictionaryGroupName(e.target.value)}/>\r\n\r\n\t\t\t\t\r\n\t\t\t
\r\n\r\n\t\t\t\r\n\t\t\t\t사전 그룹\r\n\t\t\t\t\r\n\t\t\t\r\n\r\n\t\t\t setDictionaryName(e.target.value)}/>\r\n\r\n\t\t\t\r\n\r\n\t\t\t
\r\n\t\t\t\t{dictionaryGroups.map(dg =>\r\n\t\t\t\t\t
\r\n\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t{dg.name} ({dg.dictionaries.flatMap(d => d.count).reduce((acc, current) => acc + current, 0)}개)\r\n\r\n\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t
{\r\n\t\t\t\t\t\t\t\t if (!window.confirm(\"정말로 사전그룹을 삭제하시겠습니까?\")) {\r\n\t\t\t\t\t\t\t\t\t e.preventDefault();\r\n\t\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\t }}>\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t

\r\n\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t{dg.dictionaries?.map(d =>\r\n\t\t\t\t\t\t\t

\r\n\t\t\t\t\t\t\t\t{d.name} ({d.count}개)\r\n\r\n\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t
{\r\n\t\t\t\t\t\t\t\t\t if (!window.confirm(\"정말로 사전을 삭제하시겠습니까?\")) {\r\n\t\t\t\t\t\t\t\t\t\t e.preventDefault();\r\n\t\t\t\t\t\t\t\t\t }\r\n\t\t\t\t\t\t\t\t }}>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t

)}\r\n\t\t\t\t\t
\r\n\t\t\t\t)}\r\n\t\t\t
\r\n\t\t\r\n\t)\r\n};","import React, {useEffect, useState} from \"react\";\r\nimport {Button, Table, TableCell, TableContainer, TableRow, TableBody, Paper, TableFooter, TablePagination, IconButton, useTheme, createStyles, Theme} from \"@material-ui/core\";\r\nimport {makeStyles} from \"@material-ui/core/styles\";\r\nimport {ServerApi} from \"../ServerApi\";\r\nimport {Role, User} from \"../models/models\";\r\n\r\n\r\n\r\nconst useStyles = makeStyles((theme: Theme) =>\r\n\tcreateStyles({\r\n\t\troot: {\r\n\t\t\tflexShrink: 0,\r\n\t\t\tmarginLeft: theme.spacing(2.5)\r\n\t\t}\r\n\t})\r\n);\r\n\r\n\r\ninterface TablePaginationActionsProps {\r\n\tcount: number;\r\n\tpage: number;\r\n\trowsPerPage: number;\r\n\tonChangePage: (event: React.MouseEvent, newPage: number) => void;\r\n}\r\n\r\n\r\nfunction TablePaginationActions(props: TablePaginationActionsProps) {\r\n\tconst classes = useStyles();\r\n\tconst theme = useTheme();\r\n\tconst {count, page, rowsPerPage, onChangePage} = props;\r\n\r\n\tconst handleFirstPageButtonClick = (event: React.MouseEvent) => {\r\n\t\tonChangePage(event, 0);\r\n\t};\r\n\r\n\tconst handleBackButtonClick = (event: React.MouseEvent) => {\r\n\t\tonChangePage(event, page - 1);\r\n\t};\r\n\r\n\tconst handleNextButtonClick = (event: React.MouseEvent) => {\r\n\t\tonChangePage(event, page + 1);\r\n\t};\r\n\r\n\tconst handleLastPageButtonClick = (event: React.MouseEvent) => {\r\n\t\tonChangePage(event, Math.max(0, Math.ceil(count / rowsPerPage) - 1));\r\n\t};\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t{theme.direction === 'rtl' ? 마지막 : 처음}\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t{theme.direction === 'rtl' ? : }\r\n\t\t\t\r\n\t\t\t= Math.ceil(count / rowsPerPage) - 1}\r\n\t\t\t\taria-label=\"next page\"\r\n\t\t\t>\r\n\t\t\t\t{theme.direction === 'rtl' ? : }\r\n\t\t\t\r\n\t\t\t= Math.ceil(count / rowsPerPage) - 1}\r\n\t\t\t\taria-label=\"last page\"\r\n\t\t\t>\r\n\t\t\t\t{theme.direction === 'rtl' ? 처음 : 마지막}\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n\r\n\r\nexport const UserManagerComponent: React.FC = () => {\r\n\tconst pageSize = 10;\r\n\tconst [pageNumber, setPageNumber] = useState(0);\r\n\tconst [totalUsersCount, setTotalNormalUsersCount] = useState(0);\r\n\tconst [normalUsers, setNormalUsers] = useState([]);\r\n\tconst [managers, setManagers] = useState([]);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tServerApi\r\n\t\t\t.getUsers(pageNumber + 1, pageSize)\r\n\t\t\t.then(pagedUsers => {\r\n\t\t\t\tsetNormalUsers(pagedUsers.users);\r\n\t\t\t\tsetTotalNormalUsersCount(pagedUsers.totalCount);\r\n\t\t\t});\r\n\r\n\t\tServerApi\r\n\t\t\t.getManagers()\r\n\t\t\t.then(users => {\r\n\t\t\t\tsetManagers(users);\r\n\t\t\t});\r\n\t}, []);\r\n\r\n\r\n\tconst handleUpdateRole = (userId: string, role: Role) => {\r\n\t\tif (window.confirm(\"해당 사용자의 권한을 변경하시겠습니까?\")) {\r\n\t\t\tServerApi.updateRole(userId, role)\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tif (role === \"Admin\" || role === \"Manager\") {\r\n\t\t\t\t\t\tconst normalUser = normalUsers.find(u => u.id === userId)!;\r\n\t\t\t\t\t\tsetManagers([...managers, normalUser]);\r\n\t\t\t\t\t\tsetNormalUsers(normalUsers.filter(u => u.id !== userId));\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst manager = managers.find(u => u.id === userId)!;\r\n\t\t\t\t\t\tsetManagers(managers.filter(u => u.id !== userId));\r\n\t\t\t\t\t\tsetNormalUsers([...normalUsers, manager]);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleDeleteUser = (userId: string) => {\r\n\t\tif (window.confirm(\"정말로 계정을 삭제하시곘습니까?\")) {\r\n\t\t\tServerApi.deleteUser(userId)\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tsetNormalUsers(normalUsers.filter(u => u.id !== userId));\r\n\t\t\t\t\tsetManagers(managers.filter(u => u.id !== userId));\r\n\t\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleChangePage = (e: React.MouseEvent | null, newPageNumber: number) => {\r\n\t\tServerApi.getUsers(newPageNumber + 1, pageSize)\r\n\t\t\t.then(pagedNormalUsers => {\r\n\t\t\t\tsetNormalUsers(pagedNormalUsers.users);\r\n\t\t\t\tsetTotalNormalUsersCount(pagedNormalUsers.totalCount);\r\n\t\t\t\tsetPageNumber(newPageNumber);\r\n\t\t\t});\r\n\t};\r\n\r\n\r\n\tconst normalUserRows = normalUsers.map(u => ({id: u.id, email: u.email, name: u.name}));\r\n\tconst managerRows = managers.map(u => ({id: u.id, email: u.email, name: u.name}));\r\n\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t

매니저 목록

\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{managerRows.map((row) => (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{row.name} ({row.email})\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t

회원 목록

\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{normalUserRows.map((row) => (\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{row.name} ({row.email})\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t))}\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t\r\n\t)\r\n};","import React, {useRef, useState} from \"react\";\r\nimport {Button} from \"@material-ui/core\";\r\nimport ReactToPrint from \"react-to-print\";\r\nimport {useLocalStorage} from \"@rehooks/local-storage\";\r\nimport {Word} from \"../models/models\";\r\nimport \"./PrintListComponent.scss\"\r\n\r\n\r\n\r\nclass ComponentToPrint extends React.Component<{ words: Word[], showDeleteButton: boolean, handleDelete: (wordId: number) => void }> {\r\n\trender() {\r\n\t\treturn (\r\n\t\t\t
\r\n\t\t\t\t{\r\n\t\t\t\t\tthis.props.words.map(w =>\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{this.props.showDeleteButton &&\r\n }\r\n\t\t\t\t\t\t\t[{w.dictionaryGroup}] - [{w.dictionary}]\r\n\t\t\t\t\t\t\t

{w.term}

\r\n\t\t\t\t\t\t\t{React.createElement(\"div\", {dangerouslySetInnerHTML: {__html: w.description}})}\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t)\r\n\t\t\t\t}\r\n\t\t\t
\r\n\t\t)\r\n\t}\r\n}\r\n\r\n\r\nexport const PrintListComponent: React.FC = () => {\r\n\tconst componentRef = useRef();\r\n\r\n\r\n\tconst [printWords, setPrintWords, deletePrintWords] = useLocalStorage('printWords', []);\r\n\tconst [showDeleteButton, setShowDeleteButton] = useState(true);\r\n\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t setShowDeleteButton(false)}\r\n\t\t\t\tonAfterPrint={() => setShowDeleteButton(true)}\r\n\t\t\t\ttrigger={() => }\r\n\t\t\t\t// @ts-ignore\r\n\t\t\t\tcontent={() => componentRef.current}\r\n\t\t\t/>\r\n\r\n\t\t\t\r\n\r\n\t\t\t
\r\n\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t setPrintWords(printWords.filter(pw => pw.id !== wordId))}\r\n\t\t\t\t// @ts-ignore\r\n\t\t\t\tref={componentRef}/>\r\n\t\t\r\n\t)\r\n};","import React, {useEffect, useRef, useState} from \"react\";\r\nimport {FormControl, InputLabel, Link, MenuItem, Select} from \"@material-ui/core\";\r\nimport {ServerApi} from \"../ServerApi\";\r\nimport {DictionaryGroup} from \"../models/models\";\r\n\r\n\r\n\r\nexport const ImportExportComponent: React.FC = () => {\r\n\tconst [dictionaryGroups, setDictionaryGroups] = useState([]);\r\n\tconst [importDictionaryId, setImportDictionaryId] = useState(-1);\r\n\tconst [exportDictionaryId, setExportDictionaryId] = useState(-1);\r\n\tconst fileInputRef = useRef(null);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tServerApi\r\n\t\t\t.getDictionaryGroups()\r\n\t\t\t.then(dgs => setDictionaryGroups(dgs));\r\n\t}, []);\r\n\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t
\r\n\t\t\t\t

가져오기

\r\n\r\n\t\t\t\t
{\r\n\t\t\t\t\t if (importDictionaryId < 1) {\r\n\t\t\t\t\t\t e.preventDefault();\r\n\t\t\t\t\t\t alert(\"가져오기 대상 사전을 선택해주세요.\");\r\n\t\t\t\t\t\t return;\r\n\t\t\t\t\t }\r\n\r\n\t\t\t\t\t if (!fileInputRef.current!.files || fileInputRef.current!.files.length < 1) {\r\n\t\t\t\t\t\t e.preventDefault();\r\n\t\t\t\t\t\t alert(\"가져오기할 파일을 선택해주세요.\");\r\n\t\t\t\t\t\t return;\r\n\t\t\t\t\t }\r\n\t\t\t\t }}>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t사전\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t
\r\n\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\r\n\t\t\t
\r\n\r\n\t\t\t
\r\n\t\t\t\t

내보내기

\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t사전\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t) => {\r\n\t\t\t\t\t if (exportDictionaryId < 1) {\r\n\t\t\t\t\t\t e.preventDefault();\r\n\t\t\t\t\t\t alert(\"내보내기할 사전을 선택해주세요.\");\r\n\t\t\t\t\t }\r\n\t\t\t\t }}>\r\n\t\t\t\t\t다운로드\r\n\t\t\t\t\r\n\t\t\t
\r\n\t\t\r\n\t)\r\n};","import React, {useEffect, useState} from \"react\";\r\nimport {Link, useLocation} from \"react-router-dom\";\r\nimport {ServerApi} from \"../ServerApi\";\r\nimport {IndexWord, SearchLocationType, SearchQuery} from \"../models/models\";\r\nimport 'react-virtualized/styles.css';\r\nimport \"./WordSearchComponent.scss\";\r\n\r\nconst queryString = require('query-string');\r\n\r\n\r\n\r\nexport const SearchResultComponent: React.FC = () => {\r\n\tconst location = useLocation();\r\n\r\n\r\n\tconst [searchedWords, setSearchedWords] = useState([]);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tconst searchQuery = queryString.parse(location.search, {arrayFormat: 'bracket', parseNumbers: true, parseBooleans: true}) as SearchQuery;\r\n\r\n\t\tconst inTerm = searchQuery.searchLocationType === SearchLocationType.Term;\r\n\t\tconst inDescription = searchQuery.searchLocationType === SearchLocationType.Description;\r\n\r\n\t\tServerApi.search(searchQuery.dictionaryGroupIds ?? [], searchQuery.searchKeyword?.toString(), inTerm, inDescription, searchQuery.searchPositionType)\r\n\t\t\t.then(data => {\r\n\t\t\t\tsetSearchedWords(data);\r\n\t\t\t});\r\n\t}, [location.search]);\r\n\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t{searchedWords.length > 0\r\n\t\t\t\t?\r\n\t\t\t\t<>\r\n\t\t\t\t\t

검색 결과

\r\n\r\n\t\t\t\t\t
    \r\n\t\t\t\t\t\t{searchedWords?.map(w =>\r\n\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{w.term}\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t
  • \r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t
\r\n\t\t\t\t\r\n\t\t\t\t:\r\n\t\t\t\t<>\r\n\t\t\t\t\t

검색 결과가 없습니다.

\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t
\r\n\t)\r\n};","import React from \"react\";\r\nimport {WordSearchComponent} from \"../components/WordSearchComponent\";\r\nimport {SearchResultComponent} from \"../components/SearchResultComponent\";\r\n\r\n\r\n\r\nexport const SearchResultPage: React.FC = () => {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t)\r\n};","import React, {useEffect, useState} from \"react\";\r\nimport {useDispatch, useSelector} from \"react-redux\";\r\nimport {useParams, useHistory} from \"react-router-dom\";\r\nimport Button from '@material-ui/core/Button';\r\nimport ReactTooltip from \"react-tooltip\";\r\nimport {useLocalStorage} from \"@rehooks/local-storage\";\r\n// @ts-ignore\r\nimport AdSense from 'react-adsense';\r\nimport {Actions} from \"../store/Actions\";\r\nimport {StoreState} from \"../store/StoreState\";\r\nimport {ServerApi} from \"../ServerApi\";\r\nimport {Word} from \"../models/models\";\r\nimport {ToastContainer, toast} from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport 'react-virtualized/styles.css';\r\nimport \"./WordSearchComponent.scss\";\r\nimport './WordDetailComponent.scss'\r\n\r\n\r\nexport const WordDetailComponent: React.FC = () => {\r\n\tconst history = useHistory();\r\n\tconst dispatch = useDispatch();\r\n\r\n\r\n\tconst {wordIdParam} = useParams();\r\n\tconst user = useSelector((state: StoreState) => state.authInfo);\r\n\tconst [wordDetail, setWordDetail] = useState(undefined);\r\n\tconst [tooltipWords, setTooltipWords] = useState>({});\r\n\tconst [printWords, setPrintWords, deletePrintWords] = useLocalStorage('printWords', []);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tif (wordIdParam) {\r\n\t\t\tServerApi\r\n\t\t\t\t.getWord(Number(wordIdParam))\r\n\t\t\t\t.then(word => setWordDetail(word));\r\n\t\t}\r\n\r\n\t\treturn () => {\r\n\t\t\tsetWordDetail(undefined);\r\n\t\t};\r\n\t}, [wordIdParam]);\r\n\r\n\r\n\tconst handleDescriptionClick = async (e: React.MouseEvent) => {\r\n\t\tif (e.target instanceof HTMLAnchorElement) {\r\n\t\t\tconst href = e.target.getAttribute(\"href\");\r\n\t\t\tconst wordId = Number(href);\r\n\r\n\t\t\tif (wordId) {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\thistory.push(`/${wordId}`)\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\tconst handleDelete = (wordId: number) => {\r\n\t\tif (window.confirm(\"정말로 삭제하시겠습니까?\")) {\r\n\t\t\tServerApi\r\n\t\t\t\t.deleteWord(wordId)\r\n\t\t\t\t.then(() => {\r\n\t\t\t\t\tdispatch(Actions.deleteIndexWordAction(wordId));\r\n\t\t\t\t\thistory.push(\"/\")\r\n\t\t\t\t});\r\n\t\t}\r\n\t};\r\n\r\n\r\n\tconst tempElement = document.createElement('div');\r\n\ttempElement.innerHTML = wordDetail?.description ?? \"\";\r\n\tconst anchors = tempElement.getElementsByTagName('a');\r\n\tArray.from(anchors).forEach((el) => {\r\n\t\tconst wordId = Number(el.getAttribute(\"href\"));\r\n\t\tif (wordId) {\r\n\t\t\tel.setAttribute(\"data-tip\", wordId.toString());\r\n\t\t}\r\n\t});\r\n\r\n\tconst htmlRenderedDescription = React.createElement(\"div\", {\r\n\t\tdangerouslySetInnerHTML: {\r\n\t\t\t__html: tempElement.innerHTML\r\n\t\t}\r\n\t});\r\n\r\n\r\n\treturn (\r\n\t\t
\r\n\r\n\t\t\t{wordDetail === undefined\r\n\t\t\t\t? 로딩중...\r\n\r\n\t\t\t\t: wordDetail === null\r\n\t\t\t\t\t? 해당 용어가 존재하지 않습니다.\r\n\r\n\t\t\t\t\t:
\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t{(user?.role === \"Admin\" || user?.role === \"Manager\") &&\r\n <>\r\n \r\n \r\n \r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t

[{wordDetail?.dictionaryGroup}] - [{wordDetail?.dictionary}]

\r\n\t\t\t\t\t\t\t

등록자 : {wordDetail?.registrant}

\r\n\t\t\t\t\t\t\t

업데이트 : {new Date(wordDetail!?.updatedWhen).toLocaleString(\"ko-KR\")}

\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t

{wordDetail?.term}

\r\n\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t{htmlRenderedDescription}\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t
\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t
\r\n\r\n\t\t\t\t\t\t {\r\n\t\t\t\t\t\t\t\tconst d = document.documentElement;\r\n\t\t\t\t\t\t\t\t// @ts-ignore\r\n\t\t\t\t\t\t\t\tleft = Math.min(d.clientWidth - node.clientWidth, left);\r\n\t\t\t\t\t\t\t\t// @ts-ignore\r\n\t\t\t\t\t\t\t\ttop = Math.min(d.clientHeight - node.clientHeight, top);\r\n\t\t\t\t\t\t\t\tleft = Math.max(0, left);\r\n\t\t\t\t\t\t\t\ttop = Math.max(0, top);\r\n\t\t\t\t\t\t\t\treturn {top, left}\r\n\t\t\t\t\t\t\t}}\r\n\t\t\t\t\t\t\tdelayShow={800}\r\n\t\t\t\t\t\t\tdelayUpdate={800}\r\n\t\t\t\t\t\t\tdelayHide={300}\r\n\t\t\t\t\t\t\t// afterShow={(e) => {\r\n\t\t\t\t\t\t\t// \tconsole.dir(e)\r\n\t\t\t\t\t\t\t// }}\r\n\t\t\t\t\t\t\tgetContent={wordId => {\r\n\t\t\t\t\t\t\t\tif (!wordId) return null;\r\n\r\n\t\t\t\t\t\t\t\tif (!tooltipWords[wordId]) {\r\n\t\t\t\t\t\t\t\t\tServerApi\r\n\t\t\t\t\t\t\t\t\t\t.getWord(parseInt(wordId))\r\n\t\t\t\t\t\t\t\t\t\t.then(word => {\r\n\t\t\t\t\t\t\t\t\t\t\tsetTooltipWords({...tooltipWords, [wordId]: word?.description ?? \"해당 용어가 존재하지 않습니다.\"})\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\t\treturn (\r\n\t\t\t\t\t\t\t\t\t<>\r\n\t\t\t\t\t\t\t\t\t\t{React.createElement(\"div\", {\r\n\t\t\t\t\t\t\t\t\t\t\tdangerouslySetInnerHTML: {\r\n\t\t\t\t\t\t\t\t\t\t\t\t__html: tooltipWords[wordId]\r\n\t\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\t})}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t}}/>\r\n\t\t\t\t\t
\r\n\t\t\t}\r\n\r\n\t\t
\r\n\t)\r\n};","import React from \"react\";\r\nimport {WordSearchComponent} from \"../components/WordSearchComponent\";\r\nimport {WordDetailComponent} from \"../components/WordDetailComponen\";\r\n\r\n\r\n\r\nexport const WordDetailPage: React.FC = () => {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t)\r\n};","import React, {useEffect, useState} from \"react\";\r\nimport {FormControl, InputLabel, MenuItem, Select, TextField} from \"@material-ui/core\";\r\nimport {DictionaryGroup, SearchLocationType} from \"../models/models\";\r\nimport {ServerApi} from \"../ServerApi\";\r\n\r\n\r\n\r\nfunction isEmptyOrSpaces(str: string) {\r\n\treturn str === null || str.match(/^ *$/) !== null;\r\n}\r\n\r\n\r\n\r\nexport const ReplaceComponent: React.FC = () => {\r\n\tconst [dictionaryGroups, setDictionaryGroups] = useState([]);\r\n\tconst [dictionaryId, setDictionaryId] = useState(-1);\r\n\tconst [original, setOriginal] = useState(\"\");\r\n\tconst [destination, setDestination] = useState(\"\");\r\n\tconst [replaceLocation, setReplaceLocation] = useState(-1);\r\n\r\n\r\n\tuseEffect(() => {\r\n\t\tServerApi\r\n\t\t\t.getDictionaryGroups()\r\n\t\t\t.then(dgs => setDictionaryGroups(dgs));\r\n\t}, []);\r\n\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t
{\r\n\t\t\t\t if (dictionaryId < 1) {\r\n\t\t\t\t\t e.preventDefault();\r\n\t\t\t\t\t alert(\"일괄수정할 사전을 선택해주세요.\");\r\n\t\t\t\t\t return;\r\n\t\t\t\t }\r\n\r\n\t\t\t\t if (replaceLocation < 0) {\r\n\t\t\t\t\t e.preventDefault();\r\n\t\t\t\t\t alert(\"수정 위치를 선택해주세요.\");\r\n\t\t\t\t\t return;\r\n\t\t\t\t }\r\n\r\n\t\t\t\t if (isEmptyOrSpaces(original)) {\r\n\t\t\t\t\t e.preventDefault();\r\n\t\t\t\t\t alert(\"수정전 단어를 입력해주세요.\");\r\n\t\t\t\t\t return;\r\n\t\t\t\t }\r\n\r\n\t\t\t\t if (isEmptyOrSpaces(destination)) {\r\n\t\t\t\t\t e.preventDefault();\r\n\t\t\t\t\t alert(\"수정후 단어를 입력해주세요.\");\r\n\t\t\t\t\t return;\r\n\t\t\t\t }\r\n\r\n\t\t\t\t if (!window.confirm(\"정말로 일괄수정을 진행하시겠습니까?\")) {\r\n\t\t\t\t\t e.preventDefault();\r\n\t\t\t\t\t return;\r\n\t\t\t\t }\r\n\t\t\t }}>\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t사전\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t\r\n\t\t\t\t\t수정 위치\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t setOriginal(e.target.value)}/>\r\n\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t setDestination(e.target.value)}/>\r\n\r\n\t\t\t\t
\r\n\t\t\t\t
\r\n\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t)\r\n};","import React, {useEffect} from 'react';\nimport {Link, Route, Switch} from \"react-router-dom\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {StoreState} from \"../store/StoreState\";\nimport {Actions} from \"../store/Actions\";\nimport {ServerApi} from \"../ServerApi\";\nimport {MainPage} from \"../pages/MainPage\";\nimport {IndexWordListComponent} from \"./IndexWordListComponent\";\nimport {WordEditorComponent} from \"./WordEditorComponent\";\nimport {DictionaryManagerComponent} from \"./DictionaryManagerComponent\";\nimport {UserManagerComponent} from \"./UserManagerComponent\";\nimport {PrintListComponent} from './PrintListComponent';\nimport {ImportExportComponent} from \"./ImportExportComponent\";\nimport {SearchResultPage} from \"../pages/SearchResultPage\";\nimport {WordDetailPage} from '../pages/WordDetailPage';\nimport {ReplaceComponent} from \"./ReplaceComponent\";\nimport \"./App.scss\";\n\n\n\n// 비밀번호 변경\n// 비밀번호 찾기\n// 대량 가입 방지\n// 사용자 검색\n\n// 이미지 업로드 변경\n// 내보내기 갯수 안맞음\n// 일괄 수정\n// 익스는 다른 브라우저 설치 안내\n// 1글자 검색\n// 인쇄\n// 용어인쇄 사전명\n// 사전 삭제시 DB 타이밍 에러\n// 엑셀 임포트/익스포트\n// 사전 관리 단어 갯수 표시\n// 특정 단어를 클릭하면 사전 데이터에 있는 의미를 보이게\n// 사용자 관리 다듬기\n// 시작함/포함함 검색 (제목에 대해서만 적용됨)\n// 글에 사전 정보 표시\n// 인덱스 스크롤 버그\n// 글에 작성자, 날짜 표시\n// 검색 로딩 표시\n// 최근 용어 표시 최적화\n// 검색결과 없음\nexport default function App() {\n\tconst dispatch = useDispatch();\n\n\n\tconst user = useSelector((state: StoreState) => state.authInfo);\n\n\n\tuseEffect(() => {\n\t\tServerApi\n\t\t\t.getAuthInfo()\n\t\t\t.then(user => dispatch(Actions.setAuthInfoAction(user)));\n\t}, []);\n\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\n\n\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\n\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t

페이지가 존재하지 않습니다.

\n\t\t\t\t\t\t
\n\t\t\t\t\t
\n\n\n\t\t\t\t\t
\n\t\t\t\t\t\t운영자에게 문의하기 : twainnnn@live.co.kr\n\t\t\t\t\t\t
\n\t\t\t\t\t\t사전 후원하기 : KEB 하나은행 119-891609-34307\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\n\t)\n}","import 'react-app-polyfill/ie11';\nimport 'react-app-polyfill/stable';\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport {Router} from \"react-router-dom\";\nimport {Provider} from \"react-redux\";\nimport ReduxThunk from \"redux-thunk\";\nimport {createStore, applyMiddleware, compose} from \"redux\";\nimport {composeWithDevTools} from \"redux-devtools-extension\";\nimport history from './utils/history'\nimport reducer from \"./store/reducer\";\nimport App from \"./components/App\";\n\n\n\n// const store = createStore(reducer, compose(applyMiddleware(ReduxThunk), composeWithDevTools()));\nconst store = createStore(reducer, compose(applyMiddleware(ReduxThunk)));\n\n\n\nReactDOM.render(\n\t\n\t\t\n\t\t\t\n\t\t\n\t,\n\tdocument.getElementById(\"root\")\n);"],"sourceRoot":""}