waibu-db 2.27.0 → 2.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsdoc.conf.json +1 -1
- package/docs/WaibuDb.html +1 -1
- package/docs/data/search.json +1 -1
- package/docs/external-DoboModel.html +3 -0
- package/docs/external-TFilter.html +3 -0
- package/docs/external-TOptions.html +3 -0
- package/docs/global.html +1 -1
- package/docs/index.html +1 -1
- package/docs/index.js.html +109 -85
- package/docs/lib_config.js.html +48 -0
- package/docs/lib_crud_add-handler.js.html +82 -0
- package/docs/lib_crud_all-handler.js.html +81 -0
- package/docs/lib_crud_delete-handler.js.html +67 -0
- package/docs/lib_crud_details-handler.js.html +55 -0
- package/docs/lib_crud_edit-handler.js.html +90 -0
- package/docs/lib_crud_export-handler.js.html +72 -0
- package/docs/lib_crud_helper.js.html +118 -0
- package/docs/lib_crud_list-handler.js.html +61 -0
- package/docs/lib_util.js.html +161 -0
- package/docs/module-CRUDHandler.html +24 -0
- package/docs/module-CRUDHandler_Helper.html +3 -0
- package/docs/module-Helper.html +3 -0
- package/docs/module-Helper_CRUDHandler.html +6 -0
- package/extend/waibuBootstrap/theme/component/widget/btn-export.js +2 -1
- package/index.js +80 -30
- package/lib/config.js +45 -0
- package/lib/crud/add-handler.js +31 -4
- package/lib/crud/all-handler.js +47 -1
- package/lib/crud/delete-handler.js +28 -6
- package/lib/crud/details-handler.js +29 -4
- package/lib/crud/edit-handler.js +34 -6
- package/lib/crud/export-handler.js +45 -4
- package/lib/crud/helper.js +59 -10
- package/lib/crud/list-handler.js +30 -3
- package/lib/util.js +98 -20
- package/package.json +1 -1
- package/wiki/CHANGES.md +9 -0
package/docs/index.js.html
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Source: index.js</title><!--[if lt IE 9]>
|
|
2
2
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
3
|
-
<![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="light"><div class="sidebar-container"><div class="sidebar" id="sidebar"><a href="/" class="sidebar-title sidebar-title-anchor">WaibuDb API</a><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="WaibuDb.html">WaibuDb</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#factory">factory</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"><div class="navbar-item"><a id="" href="https://www.npmjs.com/package/waibu-db" target="">NPM</a></div><div class="navbar-item"><a id="" href="https://github.com/ardhi/waibu-db" target="">Github</a></div><div class="navbar-item"><a id="" href="https://waibu.bajo.app/" target="">Waibu</a></div><div class="navbar-item"><a id="" href="https://bajo.app/" target="">Bajo</a></div></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section id="source-page" class="source-page"><header><h1 id="title" class="has-anchor">index.js</h1></header><article><pre class="prettyprint source lang-js"><code>import countRecord from './lib/method/count-record.js'
|
|
3
|
+
<![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="light"><div class="sidebar-container"><div class="sidebar" id="sidebar"><a href="/" class="sidebar-title sidebar-title-anchor">WaibuDb API</a><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="WaibuDb.html">WaibuDb</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-CRUDHandler.html">CRUDHandler</a></div><div class="sidebar-section-children"><a href="module-CRUDHandler_Helper.html">CRUDHandler/Helper</a></div><div class="sidebar-section-children"><a href="module-Helper.html">Helper</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-externals"><div>Externals</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="external-DoboModel.html">DoboModel</a></div><div class="sidebar-section-children"><a href="external-TFilter.html">TFilter</a></div><div class="sidebar-section-children"><a href="external-TOptions.html">TOptions</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#TConfig">TConfig</a></div><div class="sidebar-section-children"><a href="global.html#factory">factory</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"><div class="navbar-item"><a id="" href="https://www.npmjs.com/package/waibu-db" target="">NPM</a></div><div class="navbar-item"><a id="" href="https://github.com/ardhi/waibu-db" target="">Github</a></div><div class="navbar-item"><a id="" href="https://waibu.bajo.app/" target="">Waibu</a></div><div class="navbar-item"><a id="" href="https://bajo.app/" target="">Bajo</a></div></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section id="source-page" class="source-page"><header><h1 id="title" class="has-anchor">index.js</h1></header><article><pre class="prettyprint source lang-js"><code>import countRecord from './lib/method/count-record.js'
|
|
4
4
|
import createAggregate from './lib/method/create-aggregate.js'
|
|
5
5
|
import createHistogram from './lib/method/create-histogram.js'
|
|
6
6
|
import createRecord from './lib/method/create-record.js'
|
|
@@ -10,45 +10,47 @@ import getSchemaExt from './lib/method/get-schema-ext.js'
|
|
|
10
10
|
import getRecord from './lib/method/get-record.js'
|
|
11
11
|
import removeRecord from './lib/method/remove-record.js'
|
|
12
12
|
import updateRecord from './lib/method/update-record.js'
|
|
13
|
+
import findAllRecord from './lib/method/find-all-record.js'
|
|
14
|
+
import config from './lib/config.js'
|
|
13
15
|
|
|
14
16
|
/**
|
|
15
|
-
* Plugin factory
|
|
17
|
+
* Plugin factory.
|
|
18
|
+
*
|
|
19
|
+
* **Never** call this function directly!!! It's only-meant to be called by the {@link https://ardhi.github.io/bajo|Bajo framework} during plugin initialization.
|
|
16
20
|
*
|
|
17
21
|
* @param {string} pkgName - NPM package name
|
|
18
|
-
* @returns {class
|
|
22
|
+
* @returns {WaibuDb} WaibuDb class
|
|
19
23
|
*/
|
|
20
24
|
async function factory (pkgName) {
|
|
21
25
|
const me = this
|
|
22
26
|
|
|
23
27
|
/**
|
|
24
|
-
* WaibuDb class
|
|
28
|
+
* WaibuDb class definition.
|
|
25
29
|
*
|
|
26
30
|
* @class
|
|
27
31
|
*/
|
|
28
32
|
class WaibuDb extends this.app.baseClass.Base {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
33
|
+
/**
|
|
34
|
+
* Constructor.
|
|
35
|
+
*/
|
|
32
36
|
constructor () {
|
|
33
37
|
super(pkgName, me.app)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
enableRestApiForModel: false
|
|
51
|
-
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Configuration object.
|
|
41
|
+
* @type {TConfig}
|
|
42
|
+
*/
|
|
43
|
+
this.config = config
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Method map for CRUD operations.
|
|
47
|
+
* @type {object}
|
|
48
|
+
* @property {string} [create='POST'] - HTTP method for create operation
|
|
49
|
+
* @property {string} [find='GET'] - HTTP method for find operation
|
|
50
|
+
* @property {string} [get='GET'] - HTTP method for get operation
|
|
51
|
+
* @property {string} [update='PUT'] - HTTP method for update operation
|
|
52
|
+
* @property {string} [remove='DELETE'] - HTTP method for remove operation
|
|
53
|
+
*/
|
|
52
54
|
this.methodMap = {
|
|
53
55
|
create: 'POST',
|
|
54
56
|
find: 'GET',
|
|
@@ -67,26 +69,44 @@ async function factory (pkgName) {
|
|
|
67
69
|
'getSchemaExt',
|
|
68
70
|
'getRecord',
|
|
69
71
|
'removeRecord',
|
|
70
|
-
'updateRecord'
|
|
72
|
+
'updateRecord',
|
|
73
|
+
'findAllRecord'
|
|
71
74
|
])
|
|
72
75
|
}
|
|
73
76
|
|
|
77
|
+
/**
|
|
78
|
+
* Export data and save it as a file you can download later.
|
|
79
|
+
* This method is intended to be called by a worker process.
|
|
80
|
+
*
|
|
81
|
+
* If sumba is loaded, file download is handled by sumba download management which provides
|
|
82
|
+
* you a slick UI to monitor the download progress and status.
|
|
83
|
+
*
|
|
84
|
+
* If not, file is saved in standard bajo download directory.
|
|
85
|
+
* @async
|
|
86
|
+
* @method
|
|
87
|
+
* @param {object} params
|
|
88
|
+
* @returns {string} Path to the exported file
|
|
89
|
+
*/
|
|
74
90
|
exportData = async (params) => {
|
|
75
|
-
const { getPlugin } = this.app.bajo
|
|
76
91
|
const { get } = this.app.lib._
|
|
77
92
|
const { fs } = this.app.lib
|
|
78
93
|
const { exportTo } = this.app.doboExtra
|
|
79
|
-
const { downloadDir } = getPlugin('sumba')
|
|
80
94
|
const model = get(params, 'payload.data.name')
|
|
81
95
|
const fields = get(params, 'payload.data.opts.fields')
|
|
82
96
|
const { id, file } = get(params, 'payload.data.download', {})
|
|
83
|
-
|
|
97
|
+
let dest = `${this.app.bajo.getDownloadDir()}/${file}`
|
|
84
98
|
const options = {
|
|
85
99
|
filter: get(params, 'payload.data.filter', {}),
|
|
86
100
|
ensureDir: true,
|
|
87
101
|
fields
|
|
88
102
|
}
|
|
89
|
-
options.filter.sort = 'id:1'
|
|
103
|
+
options.filter.sort = 'id:1' // TODO: make this configurable
|
|
104
|
+
if (!this.app.sumba || !id) {
|
|
105
|
+
await exportTo(model, dest, options)
|
|
106
|
+
return dest
|
|
107
|
+
}
|
|
108
|
+
const { downloadDir } = this.app.sumba
|
|
109
|
+
dest = `${downloadDir}/${file}`
|
|
90
110
|
const dmodel = this.app.dobo.getModel('SumbaDownload')
|
|
91
111
|
try {
|
|
92
112
|
await dmodel.updateRecord(id, { status: 'PROCESSING' })
|
|
@@ -96,28 +116,46 @@ async function factory (pkgName) {
|
|
|
96
116
|
} catch (err) {
|
|
97
117
|
await dmodel.updateRecord(id, { status: 'FAIL' })
|
|
98
118
|
}
|
|
119
|
+
return dest
|
|
99
120
|
}
|
|
100
121
|
|
|
101
|
-
|
|
102
|
-
|
|
122
|
+
/**
|
|
123
|
+
* Get all models that will be automatically included in the WaibuAdmin menu.
|
|
124
|
+
* @method
|
|
125
|
+
* @returns {Array} List of models
|
|
126
|
+
*/
|
|
127
|
+
getAutoModels = () => {
|
|
128
|
+
const { filter, get, map, isArray } = this.app.lib._
|
|
103
129
|
const { pascalCase } = this.app.lib.aneka
|
|
104
|
-
const { getAppTitle } = this.app.waibuMpa
|
|
105
|
-
const { camelCase, map, groupBy, keys, kebabCase, filter, get, isArray } = this.app.lib._
|
|
106
|
-
|
|
107
|
-
const prefix = getPluginPrefix(this.ns)
|
|
108
130
|
const allModels = this.app.dobo.models
|
|
109
131
|
const models = filter(allModels, s => {
|
|
110
132
|
const byModelFind = !s.disabled.includes('find')
|
|
111
133
|
const disabled = get(this, `app.${s.plugin.ns}.config.waibuAdmin.modelDisabled`, [])
|
|
112
134
|
let modelDisabled = []
|
|
113
135
|
if (['*', 'all'].includes(disabled)) modelDisabled = map(filter(allModels, m => m.plugin.ns === s.plugin.ns), 'name')
|
|
114
|
-
else if (isArray(disabled)) modelDisabled = map(disabled, m => pascalCase(`${this.app[s.plugin.ns].
|
|
136
|
+
else if (isArray(disabled)) modelDisabled = map(disabled, m => pascalCase(`${this.app[s.plugin.ns].alias} ${m}`))
|
|
115
137
|
const byDbDisabled = !modelDisabled.includes(s.name)
|
|
116
138
|
return byModelFind && byDbDisabled
|
|
117
139
|
})
|
|
140
|
+
return models
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Build menu for WaibuAdmin
|
|
145
|
+
* @param {object} locals - Locals object
|
|
146
|
+
* @param {object} req - Request object
|
|
147
|
+
* @returns {Array<object>} Menu structure
|
|
148
|
+
*/
|
|
149
|
+
adminMenu = async (locals, req) => {
|
|
150
|
+
const { getPluginPrefix } = this.app.waibu
|
|
151
|
+
const { getPluginTitle } = this.app.waibuMpa
|
|
152
|
+
const { camelCase, map, groupBy, keys, kebabCase } = this.app.lib._
|
|
153
|
+
|
|
154
|
+
const prefix = getPluginPrefix(this.ns)
|
|
155
|
+
const models = this.getAutoModels()
|
|
118
156
|
const omenu = groupBy(map(models, s => {
|
|
119
157
|
const item = { name: s.name, ns: s.plugin.ns }
|
|
120
|
-
item.nsTitle =
|
|
158
|
+
item.nsTitle = getPluginTitle(s.plugin.ns, req)
|
|
121
159
|
return item
|
|
122
160
|
}), 'nsTitle')
|
|
123
161
|
const menu = []
|
|
@@ -125,11 +163,16 @@ async function factory (pkgName) {
|
|
|
125
163
|
const items = omenu[k]
|
|
126
164
|
const plugin = this.app[items[0].ns]
|
|
127
165
|
menu.push({
|
|
128
|
-
title: k,
|
|
166
|
+
title: req.t(k),
|
|
129
167
|
children: map(items, item => {
|
|
168
|
+
const params = {
|
|
169
|
+
model: kebabCase(item.name),
|
|
170
|
+
action: 'list'
|
|
171
|
+
}
|
|
130
172
|
return {
|
|
131
|
-
title: camelCase(item.name.slice(plugin.
|
|
132
|
-
href: `waibuAdmin:/${prefix}
|
|
173
|
+
title: camelCase(item.name.slice(plugin.alias.length)),
|
|
174
|
+
href: `waibuAdmin:/${prefix}/:model/:action`,
|
|
175
|
+
params
|
|
133
176
|
}
|
|
134
177
|
})
|
|
135
178
|
})
|
|
@@ -137,6 +180,13 @@ async function factory (pkgName) {
|
|
|
137
180
|
return menu
|
|
138
181
|
}
|
|
139
182
|
|
|
183
|
+
/**
|
|
184
|
+
* Collect all available parameters from the request object.
|
|
185
|
+
* @method
|
|
186
|
+
* @param {object} req - Request object
|
|
187
|
+
* @param {...string} items - List of parameter names
|
|
188
|
+
* @returns {object} Collected parameters
|
|
189
|
+
*/
|
|
140
190
|
getParams = (req, ...items) => {
|
|
141
191
|
const { map, trim, get } = this.app.lib._
|
|
142
192
|
let fields
|
|
@@ -154,56 +204,29 @@ async function factory (pkgName) {
|
|
|
154
204
|
return params
|
|
155
205
|
}
|
|
156
206
|
|
|
157
|
-
|
|
207
|
+
/**
|
|
208
|
+
* Get lookup data for a specific model and field based on provided options.
|
|
209
|
+
* @method
|
|
210
|
+
* @async
|
|
211
|
+
* @param {object} opts - Options for the lookup
|
|
212
|
+
* @param {string} opts.model - Model name
|
|
213
|
+
* @param {object} opts.req - Request object
|
|
214
|
+
* @param {Array<object>} opts.data - Data array
|
|
215
|
+
* @param {string} [opts.id='id'] - ID field name
|
|
216
|
+
* @param {string} opts.field - Field name to lookup
|
|
217
|
+
* @param {object} [opts.query] - Optional query object
|
|
218
|
+
* @returns {Promise<Array<object>>} Lookup results
|
|
219
|
+
*/
|
|
220
|
+
getLookupData = async (opts = {}) => {
|
|
221
|
+
const { model, req, data, id = 'id', field, query } = opts
|
|
158
222
|
const { set, map } = this.app.lib._
|
|
159
223
|
const $in = map(data, id)
|
|
160
224
|
const q = query ?? set({}, field, { $in })
|
|
161
225
|
const options = {
|
|
162
226
|
dataOnly: true,
|
|
163
|
-
limit: -1,
|
|
164
227
|
query: q
|
|
165
228
|
}
|
|
166
|
-
return await this.
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
formatRecord = async ({ data, req, schema, options = {} }) => {
|
|
170
|
-
const { isArray } = this.app.lib._
|
|
171
|
-
if (!isArray(data)) return await this.formatRow({ data, req, schema, options })
|
|
172
|
-
const items = []
|
|
173
|
-
for (const d of data) {
|
|
174
|
-
const item = await this.formatRow({ data: d, req, schema, options })
|
|
175
|
-
items.push(item)
|
|
176
|
-
}
|
|
177
|
-
return items
|
|
178
|
-
}
|
|
179
|
-
|
|
180
|
-
formatRow = async ({ data, req, schema, options = {} }) => {
|
|
181
|
-
const { get, find, isFunction, cloneDeep } = this.app.lib._
|
|
182
|
-
const { format, callHandler } = this.app.bajo
|
|
183
|
-
const { escape } = this.app.waibu
|
|
184
|
-
const fields = get(schema, 'view.fields', Object.keys(schema.properties))
|
|
185
|
-
const rec = cloneDeep(data)
|
|
186
|
-
for (const f of fields) {
|
|
187
|
-
if (f === '_rel') continue
|
|
188
|
-
let prop = find(schema.properties, { name: f })
|
|
189
|
-
if (!prop) prop = find(schema.view.calcFields, { name: f })
|
|
190
|
-
if (!prop) continue
|
|
191
|
-
const opts = {
|
|
192
|
-
lang: options.lang ?? (req ? req.lang : undefined),
|
|
193
|
-
longitude: ['lng', 'longitude'].includes(f),
|
|
194
|
-
latitude: ['lat', 'latitude'].includes(f),
|
|
195
|
-
speed: ['speed'].includes(f),
|
|
196
|
-
degree: ['course', 'heading'].includes(f),
|
|
197
|
-
distance: ['distance'].includes(f)
|
|
198
|
-
}
|
|
199
|
-
rec[f] = format(data[f], prop.type, opts)
|
|
200
|
-
const vf = get(schema, `view.valueFormatter.${f}`)
|
|
201
|
-
if (vf) {
|
|
202
|
-
if (isFunction(vf)) rec[f] = await vf.call(this, data[f], data)
|
|
203
|
-
else rec[f] = await callHandler(vf, { req, value: data[f], data })
|
|
204
|
-
} else if (['string', 'text'].includes(prop.type)) rec[f] = escape(rec[f])
|
|
205
|
-
}
|
|
206
|
-
return rec
|
|
229
|
+
return await this.findAllRecord({ model, req, options })
|
|
207
230
|
}
|
|
208
231
|
|
|
209
232
|
countRecord = countRecord
|
|
@@ -212,6 +235,7 @@ async function factory (pkgName) {
|
|
|
212
235
|
createRecord = createRecord
|
|
213
236
|
findOneRecord = findOneRecord
|
|
214
237
|
findRecord = findRecord
|
|
238
|
+
findAllRecord = findAllRecord
|
|
215
239
|
getSchemaExt = getSchemaExt
|
|
216
240
|
getRecord = getRecord
|
|
217
241
|
removeRecord = removeRecord
|
|
@@ -222,4 +246,4 @@ async function factory (pkgName) {
|
|
|
222
246
|
}
|
|
223
247
|
|
|
224
248
|
export default factory
|
|
225
|
-
</code></pre></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><a href="/" class="sidebar-title sidebar-title-anchor">WaibuDb API</a><div class="mobile-nav-links"><div class="navbar-item"><a id="" href="https://www.npmjs.com/package/waibu-db" target="">NPM</a></div><div class="navbar-item"><a id="" href="https://github.com/ardhi/waibu-db" target="">Github</a></div><div class="navbar-item"><a id="" href="https://waibu.bajo.app/" target="">Waibu</a></div><div class="navbar-item"><a id="" href="https://bajo.app/" target="">Bajo</a></div></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="WaibuDb.html">WaibuDb</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#factory">factory</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>
|
|
249
|
+
</code></pre></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><a href="/" class="sidebar-title sidebar-title-anchor">WaibuDb API</a><div class="mobile-nav-links"><div class="navbar-item"><a id="" href="https://www.npmjs.com/package/waibu-db" target="">NPM</a></div><div class="navbar-item"><a id="" href="https://github.com/ardhi/waibu-db" target="">Github</a></div><div class="navbar-item"><a id="" href="https://waibu.bajo.app/" target="">Waibu</a></div><div class="navbar-item"><a id="" href="https://bajo.app/" target="">Bajo</a></div></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="WaibuDb.html">WaibuDb</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-CRUDHandler.html">CRUDHandler</a></div><div class="sidebar-section-children"><a href="module-CRUDHandler_Helper.html">CRUDHandler/Helper</a></div><div class="sidebar-section-children"><a href="module-Helper.html">Helper</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-externals"><div>Externals</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="external-DoboModel.html">DoboModel</a></div><div class="sidebar-section-children"><a href="external-TFilter.html">TFilter</a></div><div class="sidebar-section-children"><a href="external-TOptions.html">TOptions</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#TConfig">TConfig</a></div><div class="sidebar-section-children"><a href="global.html#factory">factory</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Source: lib/config.js</title><!--[if lt IE 9]>
|
|
2
|
+
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
3
|
+
<![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="light"><div class="sidebar-container"><div class="sidebar" id="sidebar"><a href="/" class="sidebar-title sidebar-title-anchor">WaibuDb API</a><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="WaibuDb.html">WaibuDb</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-CRUDHandler.html">CRUDHandler</a></div><div class="sidebar-section-children"><a href="module-CRUDHandler_Helper.html">CRUDHandler/Helper</a></div><div class="sidebar-section-children"><a href="module-Helper.html">Helper</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-externals"><div>Externals</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="external-DoboModel.html">DoboModel</a></div><div class="sidebar-section-children"><a href="external-TFilter.html">TFilter</a></div><div class="sidebar-section-children"><a href="external-TOptions.html">TOptions</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#TConfig">TConfig</a></div><div class="sidebar-section-children"><a href="global.html#factory">factory</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"><div class="navbar-item"><a id="" href="https://www.npmjs.com/package/waibu-db" target="">NPM</a></div><div class="navbar-item"><a id="" href="https://github.com/ardhi/waibu-db" target="">Github</a></div><div class="navbar-item"><a id="" href="https://waibu.bajo.app/" target="">Waibu</a></div><div class="navbar-item"><a id="" href="https://bajo.app/" target="">Bajo</a></div></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section id="source-page" class="source-page"><header><h1 id="title" class="has-anchor">lib_config.js</h1></header><article><pre class="prettyprint source lang-js"><code>/**
|
|
4
|
+
* Configuration object
|
|
5
|
+
* @typedef TConfig
|
|
6
|
+
* @type {object}
|
|
7
|
+
* @property {object} [waibu={}] - Waibu configuration
|
|
8
|
+
* @property {string} [waibu.prefix='db'] - Waibu prefix
|
|
9
|
+
* @property {string} [waibu.title='dbModels'] - Waibu title
|
|
10
|
+
* @property {object} [waibuAdmin={}] - Waibu Admin configuration
|
|
11
|
+
* @property {boolean} [waibuAdmin.menuCollapsible=true] - Whether the menu is collapsible
|
|
12
|
+
* @property {string} [waibuAdmin.menuHandler='waibuDb:adminMenu'] - Menu handler
|
|
13
|
+
* @property {object} [waibuMpa={}] - Waibu MPA configuration
|
|
14
|
+
* @property {string} [waibuMpa.icon='database'] - Icon for the MPA
|
|
15
|
+
* @property {object} [dbModel={}] - Database model configuration
|
|
16
|
+
* @property {boolean} [dbModel.count=false] - Whether to count records
|
|
17
|
+
* @property {boolean} [dbModel.patchEnabled=false] - Whether patching is enabled
|
|
18
|
+
* @property {object} [control={}] - Control configuration
|
|
19
|
+
* @property {object} [control.wdbBtnColumns={}] - Configuration for the WDB button columns
|
|
20
|
+
* @property {number} [control.wdbBtnColumns.menuMax=10] - Maximum number of menu items
|
|
21
|
+
* @property {boolean} [enableRestApiForModel=false] - Whether to enable REST API for the model
|
|
22
|
+
*/
|
|
23
|
+
const config = {
|
|
24
|
+
waibu: {
|
|
25
|
+
prefix: 'db',
|
|
26
|
+
title: 'dbModels'
|
|
27
|
+
},
|
|
28
|
+
waibuAdmin: {
|
|
29
|
+
menuCollapsible: true,
|
|
30
|
+
menuHandler: 'waibuDb:adminMenu'
|
|
31
|
+
},
|
|
32
|
+
waibuMpa: {
|
|
33
|
+
icon: 'database'
|
|
34
|
+
},
|
|
35
|
+
dbModel: {
|
|
36
|
+
count: false,
|
|
37
|
+
patchEnabled: false
|
|
38
|
+
},
|
|
39
|
+
control: {
|
|
40
|
+
wdbBtnColumns: {
|
|
41
|
+
menuMax: 10
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
enableRestApiForModel: false
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export default config
|
|
48
|
+
</code></pre></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><a href="/" class="sidebar-title sidebar-title-anchor">WaibuDb API</a><div class="mobile-nav-links"><div class="navbar-item"><a id="" href="https://www.npmjs.com/package/waibu-db" target="">NPM</a></div><div class="navbar-item"><a id="" href="https://github.com/ardhi/waibu-db" target="">Github</a></div><div class="navbar-item"><a id="" href="https://waibu.bajo.app/" target="">Waibu</a></div><div class="navbar-item"><a id="" href="https://bajo.app/" target="">Bajo</a></div></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="WaibuDb.html">WaibuDb</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-CRUDHandler.html">CRUDHandler</a></div><div class="sidebar-section-children"><a href="module-CRUDHandler_Helper.html">CRUDHandler/Helper</a></div><div class="sidebar-section-children"><a href="module-Helper.html">Helper</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-externals"><div>Externals</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="external-DoboModel.html">DoboModel</a></div><div class="sidebar-section-children"><a href="external-TFilter.html">TFilter</a></div><div class="sidebar-section-children"><a href="external-TOptions.html">TOptions</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#TConfig">TConfig</a></div><div class="sidebar-section-children"><a href="global.html#factory">factory</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
<!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Source: lib/crud/add-handler.js</title><!--[if lt IE 9]>
|
|
2
|
+
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
3
|
+
<![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="light"><div class="sidebar-container"><div class="sidebar" id="sidebar"><a href="/" class="sidebar-title sidebar-title-anchor">WaibuDb API</a><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="WaibuDb.html">WaibuDb</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-CRUDHandler.html">CRUDHandler</a></div><div class="sidebar-section-children"><a href="module-CRUDHandler_Helper.html">CRUDHandler/Helper</a></div><div class="sidebar-section-children"><a href="module-Helper.html">Helper</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-externals"><div>Externals</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="external-DoboModel.html">DoboModel</a></div><div class="sidebar-section-children"><a href="external-TFilter.html">TFilter</a></div><div class="sidebar-section-children"><a href="external-TOptions.html">TOptions</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#TConfig">TConfig</a></div><div class="sidebar-section-children"><a href="global.html#factory">factory</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"><div class="navbar-item"><a id="" href="https://www.npmjs.com/package/waibu-db" target="">NPM</a></div><div class="navbar-item"><a id="" href="https://github.com/ardhi/waibu-db" target="">Github</a></div><div class="navbar-item"><a id="" href="https://waibu.bajo.app/" target="">Waibu</a></div><div class="navbar-item"><a id="" href="https://bajo.app/" target="">Bajo</a></div></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section id="source-page" class="source-page"><header><h1 id="title" class="has-anchor">lib_crud_add-handler.js</h1></header><article><pre class="prettyprint source lang-js"><code>/**
|
|
4
|
+
* Handler for rendering the add view of a model.
|
|
5
|
+
*
|
|
6
|
+
* To use this handler, you must import it first and call it with the necessary parameters. For example:
|
|
7
|
+
* ```javascript
|
|
8
|
+
* const { importModule } = this.app.bajo
|
|
9
|
+
* const addHandler = await importModule('waibuDb:/lib/crud/add-handler.js')
|
|
10
|
+
* const result = await addHandler.call(this, { model: 'YourModelName', req, reply })
|
|
11
|
+
* ```
|
|
12
|
+
* @async
|
|
13
|
+
* @memberof module:CRUDHandler
|
|
14
|
+
* @method
|
|
15
|
+
* @param {object} opts - Options object
|
|
16
|
+
* @param {object} opts.req - Request object
|
|
17
|
+
* @param {object} opts.reply - Reply object
|
|
18
|
+
* @param {string} opts.model - Model name
|
|
19
|
+
* @param {string} opts.template - Template path
|
|
20
|
+
* @param {object} [opts.params={}] - Parameters for the template
|
|
21
|
+
* @param {Function} [opts.addOnsHandler] - Add-ons handler function
|
|
22
|
+
* @param {string} [opts.templateDisabled='waibuDb.template:/disabled.html'] - Disabled template path
|
|
23
|
+
* @param {object} [opts.options={}] - Additional options
|
|
24
|
+
* @returns {Promise<string>} Renders the add view
|
|
25
|
+
*/
|
|
26
|
+
async function addHandler (opts = {}) {
|
|
27
|
+
let {
|
|
28
|
+
req, reply, model, params = {}, template, addOnsHandler,
|
|
29
|
+
templateDisabled = 'waibuDb.template:/disabled.html', options = {}
|
|
30
|
+
} = opts
|
|
31
|
+
const { pascalCase } = this.app.lib.aneka
|
|
32
|
+
const { createRecord, getRecord, getSchemaExt } = this.app.waibuDb
|
|
33
|
+
const { buildUrl } = this.app.waibuMpa
|
|
34
|
+
const { defaultsDeep } = this.app.lib.aneka
|
|
35
|
+
const { pick, map, merge, omit } = this.app.lib._
|
|
36
|
+
const _opts = merge({}, options.modelOpts)
|
|
37
|
+
model = pascalCase(model ?? req.params.model)
|
|
38
|
+
const mdl = this.app.dobo.getModel(model)
|
|
39
|
+
const { schema } = await getSchemaExt(model, 'add', merge({ args: [{ req, model: mdl }] }, { params }, options))
|
|
40
|
+
if (schema.disabled.includes('create')) return await reply.view(templateDisabled, { action: 'add' })
|
|
41
|
+
// req.query.attachment = true
|
|
42
|
+
_opts.fields = schema.view.fields
|
|
43
|
+
delete req.query.query
|
|
44
|
+
let def = {}
|
|
45
|
+
if (req.method === 'GET') {
|
|
46
|
+
const omitted = ['id', 'createdAt', 'updatedAt']
|
|
47
|
+
if (req.query.mode === 'clone' && req.query.id) {
|
|
48
|
+
const resp = await getRecord({ model, req, id: req.query.id, options: { fields: map(schema.properties, 'name'), ..._opts } })
|
|
49
|
+
def = omit(resp.data, omitted)
|
|
50
|
+
if (def._fmt) def._fmt = omit(def._fmt, omitted)
|
|
51
|
+
} else {
|
|
52
|
+
const picked = map(schema.properties, 'name')
|
|
53
|
+
def = omit(pick(req.query, picked), omitted)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
let form = defaultsDeep({}, req.body, def)
|
|
57
|
+
let error
|
|
58
|
+
let resp
|
|
59
|
+
if (req.method === 'POST') {
|
|
60
|
+
req.session[`wdb${model}AddMore`] = form._addmore
|
|
61
|
+
req.session[`wdb${model}ClonePrev`] = form._cloneprev
|
|
62
|
+
try {
|
|
63
|
+
resp = await createRecord({ model, req, reply, options: opts })
|
|
64
|
+
if (!form._addmore) return reply.redirectTo(buildUrl({ url: req.url, base: 'list', params: { page: 1 }, exclude: ['id', 'mode'] }))
|
|
65
|
+
if (!form._cloneprev) form = pick(form, ['_addmore', '_cloneprev'])
|
|
66
|
+
} catch (err) {
|
|
67
|
+
if (err.orgMessage === 'accessDenied') throw err
|
|
68
|
+
error = err
|
|
69
|
+
}
|
|
70
|
+
} else {
|
|
71
|
+
form._addmore = req.session[`wdb${model}AddMore`]
|
|
72
|
+
form._cloneprev = req.session[`wdb${model}ClonePrev`]
|
|
73
|
+
}
|
|
74
|
+
const addOns = addOnsHandler ? await addOnsHandler.call(this.app[req.ns], { req, reply, params, data: resp, schema, error, options }) : undefined
|
|
75
|
+
merge(params, { form, schema, error, addOns })
|
|
76
|
+
if (schema.template) template = schema.template
|
|
77
|
+
if (schema.layout) params.page.layout = schema.layout
|
|
78
|
+
return await reply.view(template, params)
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
export default addHandler
|
|
82
|
+
</code></pre></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><a href="/" class="sidebar-title sidebar-title-anchor">WaibuDb API</a><div class="mobile-nav-links"><div class="navbar-item"><a id="" href="https://www.npmjs.com/package/waibu-db" target="">NPM</a></div><div class="navbar-item"><a id="" href="https://github.com/ardhi/waibu-db" target="">Github</a></div><div class="navbar-item"><a id="" href="https://waibu.bajo.app/" target="">Waibu</a></div><div class="navbar-item"><a id="" href="https://bajo.app/" target="">Bajo</a></div></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="WaibuDb.html">WaibuDb</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="module-CRUDHandler.html">CRUDHandler</a></div><div class="sidebar-section-children"><a href="module-CRUDHandler_Helper.html">CRUDHandler/Helper</a></div><div class="sidebar-section-children"><a href="module-Helper.html">Helper</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-externals"><div>Externals</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="external-DoboModel.html">DoboModel</a></div><div class="sidebar-section-children"><a href="external-TFilter.html">TFilter</a></div><div class="sidebar-section-children"><a href="external-TOptions.html">TOptions</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-global"><div>Global</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="global.html#TConfig">TConfig</a></div><div class="sidebar-section-children"><a href="global.html#factory">factory</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html>
|