@opengis/admin 0.1.65 → 0.1.67
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/IconChevronDown-DN0s3TF_.js +26 -0
- package/dist/{add-page-Dl_bGhPC.js → add-page-Cm4aSGoA.js} +1 -1
- package/dist/{admin-interface-Dma-D4A9.js → admin-interface-DUuz9KgB.js} +536 -406
- package/dist/{admin-view-TeTAUVK1.js → admin-view-MSa57inW.js} +128 -147
- package/dist/admin.js +1 -1
- package/dist/admin.umd.cjs +83 -83
- package/dist/card-page-B1zuuqAR.js +275 -0
- package/dist/{card-view-CZjPaUKx.js → card-view-Bzt2AvI2.js} +1 -1
- package/dist/{edit-page-RhKgRai9.js → edit-page-DoY4S7v6.js} +1 -1
- package/dist/{import-file-DgJqxKyF.js → import-file-B80Ws8by.js} +7259 -7305
- package/dist/style.css +1 -1
- package/module/settings/select/core.roles.json +2 -2
- package/package.json +5 -3
- package/server/plugins/hook.js +63 -72
- package/server/plugins/vite.js +6 -1
- package/server/routes/data/controllers/tableData.js +1 -1
- package/server/routes/menu/controllers/getMenu.js +19 -2
- package/server/routes/notifications/hook/onWidgetSet.js +3 -9
- package/server/routes/templates/controllers/getTemplate.js +6 -6
- package/dist/card-page-D-3aubBo.js +0 -230
package/dist/style.css
CHANGED
@@ -1 +1 @@
|
|
1
|
-
.vs-popover>div{text-align:start}.map-popup__vertical[data-v-3f5a9aff]{overflow:auto;max-height:300px}.map-popup__vertical[data-v-3f5a9aff]::-webkit-scrollbar{width:6px;height:6px;background-color:#f5f5f5}.map-popup__vertical[data-v-3f5a9aff]::-webkit-scrollbar-thumb{border-radius:5px;background-color:#dedede}.map-popup__vertical[data-v-3f5a9aff]::-webkit-scrollbar-track{background-color:#f5f5f5}.map__popup-body[data-v-3f5a9aff]{table-layout:fixed;width:100%}.map__popup-body-item[data-v-3f5a9aff]:not(:last-child){border-bottom:1px solid #eeeeee}.map__popup-body-item td[data-v-3f5a9aff]{width:50%;word-wrap:break-word;text-align:start}.map__popup-body-item td[data-v-3f5a9aff]:first-child{font-weight:600}.popup-image[data-v-deb51e0a]{max-width:100%;max-height:220px;margin-bottom:10px;-o-object-fit:contain;object-fit:contain}.maplibregl-ctrl-bottom-right,.maplibregl-popup-close-button{display:none}.widget-file .vs-button{background-color:#2563eb;color:#fff;font-size:.875rem;line-height:1.25rem;font-weight:600}.ui-dialog__modal div.flex.justify-between.items-center.py-3.px-4.border-b{border-bottom-width:0px;--tw-text-opacity: 1;color:#1f2937;font-weight:500;font-size:1.125rem;line-height:1.75rem;padding-bottom:0rem}.ui-dialog__modal .ui-dialog__content .p-4{padding-top:0rem}.widget-images__item-desc span:first-child:after{content:"";width:2px;height:2px;border-radius:50%;display:flex;align-items:center;background:#676a6c;margin:0 5px}.disabled{cursor:not-allowed!important}.item__text-content,.item{transition:all .5s cubic-bezier(.4,0,.2,1)}.item:hover .item__text-content{opacity:.8}.vs-widget-images .vs-button{background-color:#2563eb;color:#fff;font-size:.875rem;line-height:1.25rem;font-weight:600}.ProseMirror-focused{outline:none}.editor-toolbar{background-color:#f9fafb}.editor-content{min-height:160px}button{transition:background-color .2s ease;outline:none}button:focus{outline:none}.editor-content ul{margin-left:20px}.editor-content ul>li{list-style:disc}.editor-content ol{list-style-type:decimal;margin-left:20px}.editor-content pre{background-color:#e7e7e7;border-radius:4px;padding:0 2px}.mention-popup{background-color:#fafafa;padding:10px;border-radius:10px;box-shadow:0 4px 6px #0000001a;max-width:200px;overflow-y:auto;width:auto}.mention{padding:2px 4px;border-radius:8px;background-color:#e7e7e7}.mention-option{padding:5px 10px;cursor:pointer;transition:background-color .2s;border-radius:8px}.mention-option:hover{background-color:#f0f0f0}.border-top:not(:first-child){--tw-border-opacity: 1;border-color:#e5e7eb;border-top-width:1px}.widget-comment-form .vs-button{padding:.625rem 1rem;font-size:.75rem;line-height:1rem;font-weight:500}.widget-comment-form .vs-button:focus{border:transparent;--tw-ring-opacity: 1;--tw-ring-color: rgb(191 219 254);--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0, 0, 0, 0))}li[data-v-87c0b333]{cursor:move}.grid[data-v-274c6efe]{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:1rem}.admin-wrapper[data-v-2f422765]{display:flex;height:100vh;align-items:start}.vs-popover__content>div{padding:.25rem}.hs-accordion-heading[data-v-4139bc00]{display:flex;align-items:center}.hs-accordion-toggle[data-v-4139bc00]{cursor:pointer}.hs-accordion-content[data-v-4139bc00]{padding-left:1.5rem}.table-info-card .editor-container{width:330px}.slide-fade-enter-active[data-v-9b255a47],.slide-fade-leave-active[data-v-9b255a47]{transition:all .3s linear}.slide-fade-enter-from[data-v-9b255a47],.slide-fade-leave-to[data-v-9b255a47]{transform:translate(20px);opacity:0}
|
1
|
+
.vs-popover>div{text-align:start}.map-popup__vertical[data-v-3f5a9aff]{overflow:auto;max-height:300px}.map-popup__vertical[data-v-3f5a9aff]::-webkit-scrollbar{width:6px;height:6px;background-color:#f5f5f5}.map-popup__vertical[data-v-3f5a9aff]::-webkit-scrollbar-thumb{border-radius:5px;background-color:#dedede}.map-popup__vertical[data-v-3f5a9aff]::-webkit-scrollbar-track{background-color:#f5f5f5}.map__popup-body[data-v-3f5a9aff]{table-layout:fixed;width:100%}.map__popup-body-item[data-v-3f5a9aff]:not(:last-child){border-bottom:1px solid #eeeeee}.map__popup-body-item td[data-v-3f5a9aff]{width:50%;word-wrap:break-word;text-align:start}.map__popup-body-item td[data-v-3f5a9aff]:first-child{font-weight:600}.popup-image[data-v-deb51e0a]{max-width:100%;max-height:220px;margin-bottom:10px;-o-object-fit:contain;object-fit:contain}.maplibregl-ctrl-bottom-right,.maplibregl-popup-close-button{display:none}.widget-file .vs-button{background-color:#2563eb;color:#fff;font-size:.875rem;line-height:1.25rem;font-weight:600}.ui-dialog__modal div.flex.justify-between.items-center.py-3.px-4.border-b{border-bottom-width:0px;--tw-text-opacity: 1;color:#1f2937;font-weight:500;font-size:1.125rem;line-height:1.75rem;padding-bottom:0rem}.ui-dialog__modal .ui-dialog__content .p-4{padding-top:0rem}:root{--f-spinner-width: 36px;--f-spinner-height: 36px;--f-spinner-color-1: rgba(0, 0, 0, .1);--f-spinner-color-2: rgba(17, 24, 28, .8);--f-spinner-stroke: 2.75}.f-spinner{margin:auto;padding:0;width:var(--f-spinner-width);height:var(--f-spinner-height)}.f-spinner svg{width:100%;height:100%;vertical-align:top;animation:f-spinner-rotate 2s linear infinite}.f-spinner svg *{stroke-width:var(--f-spinner-stroke);fill:none}.f-spinner svg *:first-child{stroke:var(--f-spinner-color-1)}.f-spinner svg *:last-child{stroke:var(--f-spinner-color-2);animation:f-spinner-dash 2s ease-in-out infinite}@keyframes f-spinner-rotate{to{transform:rotate(360deg)}}@keyframes f-spinner-dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.f-throwOutUp{animation:var(--f-throw-out-duration, .175s) ease-out both f-throwOutUp}.f-throwOutDown{animation:var(--f-throw-out-duration, .175s) ease-out both f-throwOutDown}@keyframes f-throwOutUp{to{transform:translate3d(0,calc(var(--f-throw-out-distance, 150px) * -1),0);opacity:0}}@keyframes f-throwOutDown{to{transform:translate3d(0,var(--f-throw-out-distance, 150px),0);opacity:0}}.f-zoomInUp{animation:var(--f-transition-duration, .2s) ease .1s both f-zoomInUp}.f-zoomOutDown{animation:var(--f-transition-duration, .2s) ease both f-zoomOutDown}@keyframes f-zoomInUp{0%{transform:scale(.975) translate3d(0,16px,0);opacity:0}to{transform:scale(1) translateZ(0);opacity:1}}@keyframes f-zoomOutDown{to{transform:scale(.975) translate3d(0,16px,0);opacity:0}}.f-fadeIn{animation:var(--f-transition-duration, .2s) var(--f-transition-easing, ease) var(--f-transition-delay, 0s) both f-fadeIn;z-index:2}.f-fadeOut{animation:var(--f-transition-duration, .2s) var(--f-transition-easing, ease) var(--f-transition-delay, 0s) both f-fadeOut;z-index:1}@keyframes f-fadeIn{0%{opacity:0}to{opacity:1}}@keyframes f-fadeOut{to{opacity:0}}.f-fadeFastIn{animation:var(--f-transition-duration, .2s) ease-out both f-fadeFastIn;z-index:2}.f-fadeFastOut{animation:var(--f-transition-duration, .1s) ease-out both f-fadeFastOut;z-index:2}@keyframes f-fadeFastIn{0%{opacity:.75}to{opacity:1}}@keyframes f-fadeFastOut{to{opacity:0}}.f-fadeSlowIn{animation:var(--f-transition-duration, .5s) ease both f-fadeSlowIn;z-index:2}.f-fadeSlowOut{animation:var(--f-transition-duration, .5s) ease both f-fadeSlowOut;z-index:1}@keyframes f-fadeSlowIn{0%{opacity:0}to{opacity:1}}@keyframes f-fadeSlowOut{to{opacity:0}}.f-crossfadeIn{animation:var(--f-transition-duration, .2s) ease-out both f-crossfadeIn;z-index:2}.f-crossfadeOut{animation:calc(var(--f-transition-duration, .2s)*.5) linear .1s both f-crossfadeOut;z-index:1}@keyframes f-crossfadeIn{0%{opacity:0}to{opacity:1}}@keyframes f-crossfadeOut{to{opacity:0}}.f-slideIn.from-next{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-slideInNext}.f-slideIn.from-prev{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-slideInPrev}.f-slideOut.to-next{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-slideOutNext}.f-slideOut.to-prev{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-slideOutPrev}@keyframes f-slideInPrev{0%{transform:translate(100%)}to{transform:translateZ(0)}}@keyframes f-slideInNext{0%{transform:translate(-100%)}to{transform:translateZ(0)}}@keyframes f-slideOutNext{to{transform:translate(-100%)}}@keyframes f-slideOutPrev{to{transform:translate(100%)}}.f-classicIn.from-next{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-classicInNext;z-index:2}.f-classicIn.from-prev{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-classicInPrev;z-index:2}.f-classicOut.to-next{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-classicOutNext;z-index:1}.f-classicOut.to-prev{animation:var(--f-transition-duration, .85s) cubic-bezier(.16,1,.3,1) f-classicOutPrev;z-index:1}@keyframes f-classicInNext{0%{transform:translate(-75px);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes f-classicInPrev{0%{transform:translate(75px);opacity:0}to{transform:translateZ(0);opacity:1}}@keyframes f-classicOutNext{to{transform:translate(-75px);opacity:0}}@keyframes f-classicOutPrev{to{transform:translate(75px);opacity:0}}:root{--f-button-width: 40px;--f-button-height: 40px;--f-button-border: 0;--f-button-border-radius: 0;--f-button-color: #374151;--f-button-bg: #f8f8f8;--f-button-hover-bg: #e0e0e0;--f-button-active-bg: #d0d0d0;--f-button-shadow: none;--f-button-transition: all .15s ease;--f-button-transform: none;--f-button-svg-width: 20px;--f-button-svg-height: 20px;--f-button-svg-stroke-width: 1.5;--f-button-svg-fill: none;--f-button-svg-filter: none;--f-button-svg-disabled-opacity: .65}.f-button{display:flex;justify-content:center;align-items:center;box-sizing:content-box;position:relative;margin:0;padding:0;width:var(--f-button-width);height:var(--f-button-height);border:var(--f-button-border);border-radius:var(--f-button-border-radius);color:var(--f-button-color);background:var(--f-button-bg);box-shadow:var(--f-button-shadow);pointer-events:all;cursor:pointer;transition:var(--f-button-transition)}@media (hover: hover){.f-button:hover:not([disabled]){color:var(--f-button-hover-color);background-color:var(--f-button-hover-bg)}}.f-button:active:not([disabled]){background-color:var(--f-button-active-bg)}.f-button:focus:not(:focus-visible){outline:none}.f-button:focus-visible{outline:none;box-shadow:inset 0 0 0 var(--f-button-outline, 2px) var(--f-button-outline-color, var(--f-button-color))}.f-button svg{width:var(--f-button-svg-width);height:var(--f-button-svg-height);fill:var(--f-button-svg-fill);stroke:currentColor;stroke-width:var(--f-button-svg-stroke-width);stroke-linecap:round;stroke-linejoin:round;transition:opacity .15s ease;transform:var(--f-button-transform);filter:var(--f-button-svg-filter);pointer-events:none}.f-button[disabled]{cursor:default}.f-button[disabled] svg{opacity:var(--f-button-svg-disabled-opacity)}.f-carousel__nav .f-button.is-prev,.f-carousel__nav .f-button.is-next,.fancybox__nav .f-button.is-prev,.fancybox__nav .f-button.is-next{position:absolute;z-index:1}.is-horizontal .f-carousel__nav .f-button.is-prev,.is-horizontal .f-carousel__nav .f-button.is-next,.is-horizontal .fancybox__nav .f-button.is-prev,.is-horizontal .fancybox__nav .f-button.is-next{top:50%;transform:translateY(-50%)}.is-horizontal .f-carousel__nav .f-button.is-prev,.is-horizontal .fancybox__nav .f-button.is-prev{left:var(--f-button-prev-pos)}.is-horizontal .f-carousel__nav .f-button.is-next,.is-horizontal .fancybox__nav .f-button.is-next{right:var(--f-button-next-pos)}.is-horizontal.is-rtl .f-carousel__nav .f-button.is-prev,.is-horizontal.is-rtl .fancybox__nav .f-button.is-prev{left:auto;right:var(--f-button-next-pos)}.is-horizontal.is-rtl .f-carousel__nav .f-button.is-next,.is-horizontal.is-rtl .fancybox__nav .f-button.is-next{right:auto;left:var(--f-button-prev-pos)}.is-vertical .f-carousel__nav .f-button.is-prev,.is-vertical .f-carousel__nav .f-button.is-next,.is-vertical .fancybox__nav .f-button.is-prev,.is-vertical .fancybox__nav .f-button.is-next{top:auto;left:50%;transform:translate(-50%)}.is-vertical .f-carousel__nav .f-button.is-prev,.is-vertical .fancybox__nav .f-button.is-prev{top:var(--f-button-next-pos)}.is-vertical .f-carousel__nav .f-button.is-next,.is-vertical .fancybox__nav .f-button.is-next{bottom:var(--f-button-next-pos)}.is-vertical .f-carousel__nav .f-button.is-prev svg,.is-vertical .f-carousel__nav .f-button.is-next svg,.is-vertical .fancybox__nav .f-button.is-prev svg,.is-vertical .fancybox__nav .f-button.is-next svg{transform:rotate(90deg)}.f-carousel__nav .f-button:disabled,.fancybox__nav .f-button:disabled{pointer-events:none}html.with-fancybox{width:auto;overflow:visible;scroll-behavior:auto}html.with-fancybox body{touch-action:none}html.with-fancybox body.hide-scrollbar{width:auto;margin-right:calc(var(--fancybox-body-margin, 0px) + var(--fancybox-scrollbar-compensate, 0px));overflow:hidden!important;overscroll-behavior-y:none}.fancybox__container{--fancybox-color: #dbdbdb;--fancybox-hover-color: #fff;--fancybox-bg: rgba(24, 24, 27, .98);--fancybox-slide-gap: 10px;--f-spinner-width: 50px;--f-spinner-height: 50px;--f-spinner-color-1: rgba(255, 255, 255, .1);--f-spinner-color-2: #bbb;--f-spinner-stroke: 3.65;position:fixed;top:0;left:0;bottom:0;right:0;direction:ltr;display:flex;flex-direction:column;box-sizing:border-box;margin:0;padding:0;color:#f8f8f8;-webkit-tap-highlight-color:rgba(0,0,0,0);overflow:visible;z-index:var(--fancybox-zIndex, 1050);outline:none;transform-origin:top left;-webkit-text-size-adjust:100%;-moz-text-size-adjust:none;text-size-adjust:100%;overscroll-behavior-y:contain}.fancybox__container *,.fancybox__container *:before,.fancybox__container *:after{box-sizing:inherit}.fancybox__container::backdrop{background-color:#0000}.fancybox__backdrop{position:fixed;top:0;left:0;bottom:0;right:0;z-index:-1;background:var(--fancybox-bg);opacity:var(--fancybox-opacity, 1);will-change:opacity}.fancybox__carousel{position:relative;box-sizing:border-box;flex:1;min-height:0;z-index:10;overflow-y:visible;overflow-x:clip}.fancybox__viewport{width:100%;height:100%}.fancybox__viewport.is-draggable{cursor:move;cursor:grab}.fancybox__viewport.is-dragging{cursor:move;cursor:grabbing}.fancybox__track{display:flex;margin:0 auto;height:100%}.fancybox__slide{flex:0 0 auto;position:relative;display:flex;flex-direction:column;align-items:center;width:100%;height:100%;margin:0 var(--fancybox-slide-gap) 0 0;padding:4px;overflow:auto;overscroll-behavior:contain;transform:translateZ(0);backface-visibility:hidden}.fancybox__container:not(.is-compact) .fancybox__slide.has-close-btn{padding-top:40px}.fancybox__slide.has-iframe,.fancybox__slide.has-video,.fancybox__slide.has-html5video,.fancybox__slide.has-image{overflow:hidden}.fancybox__slide.has-image.is-animating,.fancybox__slide.has-image.is-selected{overflow:visible}.fancybox__slide:before,.fancybox__slide:after{content:"";flex:0 0 0;margin:auto}.fancybox__backdrop:empty,.fancybox__viewport:empty,.fancybox__track:empty,.fancybox__slide:empty{display:block}.fancybox__content{align-self:center;display:flex;flex-direction:column;position:relative;margin:0;padding:2rem;max-width:100%;color:var(--fancybox-content-color, #374151);background:var(--fancybox-content-bg, #fff);cursor:default;border-radius:0;z-index:20}.is-loading .fancybox__content{opacity:0}.is-draggable .fancybox__content{cursor:move;cursor:grab}.can-zoom_in .fancybox__content{cursor:zoom-in}.can-zoom_out .fancybox__content{cursor:zoom-out}.is-dragging .fancybox__content{cursor:move;cursor:grabbing}.fancybox__content [data-selectable],.fancybox__content [contenteditable]{cursor:auto}.fancybox__slide.has-image>.fancybox__content{padding:0;background:#0000;min-height:1px;background-repeat:no-repeat;background-size:contain;background-position:center center;transition:none;transform:translateZ(0);backface-visibility:hidden}.fancybox__slide.has-image>.fancybox__content>picture>img{width:100%;height:auto;max-height:100%}.is-animating .fancybox__content,.is-dragging .fancybox__content{will-change:transform,width,height}.fancybox-image{margin:auto;display:block;width:100%;height:100%;min-height:0;-o-object-fit:contain;object-fit:contain;-webkit-user-select:none;-moz-user-select:none;user-select:none;filter:blur(0px)}.fancybox__caption{align-self:center;max-width:100%;flex-shrink:0;margin:0;padding:14px 0 4px;overflow-wrap:anywhere;line-height:1.375;color:var(--fancybox-color, currentColor);opacity:var(--fancybox-opacity, 1);cursor:auto;visibility:visible}.is-loading .fancybox__caption,.is-closing .fancybox__caption{opacity:0;visibility:hidden}.is-compact .fancybox__caption{padding-bottom:0}.f-button.is-close-btn{--f-button-svg-stroke-width: 2;position:absolute;top:0;right:8px;z-index:40}.fancybox__content>.f-button.is-close-btn{--f-button-width: 34px;--f-button-height: 34px;--f-button-border-radius: 4px;--f-button-color: var(--fancybox-color, #fff);--f-button-hover-color: var(--fancybox-color, #fff);--f-button-bg: transparent;--f-button-hover-bg: transparent;--f-button-active-bg: transparent;--f-button-svg-width: 22px;--f-button-svg-height: 22px;position:absolute;top:-38px;right:0;opacity:.75}.is-loading .fancybox__content>.f-button.is-close-btn{visibility:hidden}.is-zooming-out .fancybox__content>.f-button.is-close-btn{visibility:hidden}.fancybox__content>.f-button.is-close-btn:hover{opacity:1}.fancybox__footer{padding:0;margin:0;position:relative}.fancybox__footer .fancybox__caption{width:100%;padding:24px;opacity:var(--fancybox-opacity, 1);transition:all .25s ease}.is-compact .fancybox__footer{position:absolute;bottom:0;left:0;right:0;z-index:20;background:#18181b80}.is-compact .fancybox__footer .fancybox__caption{padding:12px}.is-compact .fancybox__content>.f-button.is-close-btn{--f-button-border-radius: 50%;--f-button-color: #fff;--f-button-hover-color: #fff;--f-button-outline-color: #000;--f-button-bg: rgba(0, 0, 0, .6);--f-button-active-bg: rgba(0, 0, 0, .6);--f-button-hover-bg: rgba(0, 0, 0, .6);--f-button-svg-width: 18px;--f-button-svg-height: 18px;--f-button-svg-filter: none;top:5px;right:5px}.fancybox__nav{--f-button-width: 50px;--f-button-height: 50px;--f-button-border: 0;--f-button-border-radius: 50%;--f-button-color: var(--fancybox-color);--f-button-hover-color: var(--fancybox-hover-color);--f-button-bg: transparent;--f-button-hover-bg: rgba(24, 24, 27, .3);--f-button-active-bg: rgba(24, 24, 27, .5);--f-button-shadow: none;--f-button-transition: all .15s ease;--f-button-transform: none;--f-button-svg-width: 26px;--f-button-svg-height: 26px;--f-button-svg-stroke-width: 2.5;--f-button-svg-fill: none;--f-button-svg-filter: drop-shadow(1px 1px 1px rgba(24, 24, 27, .5));--f-button-svg-disabled-opacity: .65;--f-button-next-pos: 1rem;--f-button-prev-pos: 1rem;opacity:var(--fancybox-opacity, 1)}.fancybox__nav .f-button:before{position:absolute;content:"";top:-30px;right:-20px;left:-20px;bottom:-30px;z-index:1}.is-idle .fancybox__nav{animation:.15s ease-out both f-fadeOut}.is-idle.is-compact .fancybox__footer{pointer-events:none;animation:.15s ease-out both f-fadeOut}.fancybox__slide>.f-spinner{position:absolute;top:50%;left:50%;margin:var(--f-spinner-top, calc(var(--f-spinner-width) * -.5)) 0 0 var(--f-spinner-left, calc(var(--f-spinner-height) * -.5));z-index:30;cursor:pointer}.fancybox-protected{position:absolute;top:0;left:0;right:0;bottom:0;z-index:40;-webkit-user-select:none;-moz-user-select:none;user-select:none}.fancybox-ghost{position:absolute;top:0;left:0;width:100%;height:100%;min-height:0;-o-object-fit:contain;object-fit:contain;z-index:40;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none}.fancybox-focus-guard{outline:none;opacity:0;position:fixed;pointer-events:none}.fancybox__container:not([aria-hidden]){opacity:0}.fancybox__container.is-animated[aria-hidden=false]>*:not(.fancybox__backdrop,.fancybox__carousel),.fancybox__container.is-animated[aria-hidden=false] .fancybox__carousel>*:not(.fancybox__viewport),.fancybox__container.is-animated[aria-hidden=false] .fancybox__slide>*:not(.fancybox__content){animation:var(--f-interface-enter-duration, .25s) ease .1s backwards f-fadeIn}.fancybox__container.is-animated[aria-hidden=false] .fancybox__backdrop{animation:var(--f-backdrop-enter-duration, .35s) ease backwards f-fadeIn}.fancybox__container.is-animated[aria-hidden=true]>*:not(.fancybox__backdrop,.fancybox__carousel),.fancybox__container.is-animated[aria-hidden=true] .fancybox__carousel>*:not(.fancybox__viewport),.fancybox__container.is-animated[aria-hidden=true] .fancybox__slide>*:not(.fancybox__content){animation:var(--f-interface-exit-duration, .15s) ease forwards f-fadeOut}.fancybox__container.is-animated[aria-hidden=true] .fancybox__backdrop{animation:var(--f-backdrop-exit-duration, .35s) ease forwards f-fadeOut}.has-iframe .fancybox__content,.has-map .fancybox__content,.has-pdf .fancybox__content,.has-youtube .fancybox__content,.has-vimeo .fancybox__content,.has-html5video .fancybox__content{max-width:100%;flex-shrink:1;min-height:1px;overflow:visible}.has-iframe .fancybox__content,.has-map .fancybox__content,.has-pdf .fancybox__content{width:calc(100% - 120px);height:90%}.fancybox__container.is-compact .has-iframe .fancybox__content,.fancybox__container.is-compact .has-map .fancybox__content,.fancybox__container.is-compact .has-pdf .fancybox__content{width:100%;height:100%}.has-youtube .fancybox__content,.has-vimeo .fancybox__content,.has-html5video .fancybox__content{width:960px;height:540px;max-width:100%;max-height:100%}.has-map .fancybox__content,.has-pdf .fancybox__content,.has-youtube .fancybox__content,.has-vimeo .fancybox__content,.has-html5video .fancybox__content{padding:0;background:#18181be6;color:#fff}.has-map .fancybox__content{background:#e5e3df}.fancybox__html5video,.fancybox__iframe{border:0;display:block;height:100%;width:100%;background:#0000}.fancybox-placeholder{border:0!important;clip:rect(1px,1px,1px,1px)!important;clip-path:inset(50%)!important;height:1px!important;margin:-1px!important;overflow:hidden!important;padding:0!important;position:absolute!important;width:1px!important;white-space:nowrap!important}.f-carousel__thumbs{--f-thumb-width: 96px;--f-thumb-height: 72px;--f-thumb-outline: 0;--f-thumb-outline-color: #5eb0ef;--f-thumb-opacity: 1;--f-thumb-hover-opacity: 1;--f-thumb-selected-opacity: 1;--f-thumb-border-radius: 2px;--f-thumb-offset: 0px;--f-button-next-pos: 0;--f-button-prev-pos: 0}.f-carousel__thumbs.is-classic{--f-thumb-gap: 8px;--f-thumb-opacity: .5;--f-thumb-hover-opacity: 1;--f-thumb-selected-opacity: 1}.f-carousel__thumbs.is-modern{--f-thumb-gap: 4px;--f-thumb-extra-gap: 16px;--f-thumb-clip-width: 46px}.f-thumbs{position:relative;flex:0 0 auto;margin:0;overflow:hidden;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;-moz-user-select:none;user-select:none;perspective:1000px;transform:translateZ(0)}.f-thumbs .f-spinner{position:absolute;top:0;left:0;width:100%;height:100%;border-radius:2px;background-image:linear-gradient(#ebeff2,#e2e8f0);z-index:-1}.f-thumbs .f-spinner svg{display:none}.f-thumbs.is-vertical{height:100%}.f-thumbs__viewport{width:100%;height:auto;overflow:hidden;transform:translateZ(0)}.f-thumbs__track{display:flex}.f-thumbs__slide{position:relative;flex:0 0 auto;box-sizing:content-box;display:flex;align-items:center;justify-content:center;padding:0;margin:0;width:var(--f-thumb-width);height:var(--f-thumb-height);overflow:visible;cursor:pointer}.f-thumbs__slide.is-loading img{opacity:0}.is-classic .f-thumbs__viewport{height:100%}.is-modern .f-thumbs__track{width:-moz-max-content;width:max-content}.is-modern .f-thumbs__track:before{content:"";position:absolute;top:0;bottom:0;left:calc((var(--f-thumb-clip-width, 0))*-.5);width:calc(var(--width, 0)*1px + var(--f-thumb-clip-width, 0));cursor:pointer}.is-modern .f-thumbs__slide{width:var(--f-thumb-clip-width);transform:translate3d(calc(var(--shift, 0) * -1px),0,0);transition:none;pointer-events:none}.is-modern.is-resting .f-thumbs__slide{transition:transform .33s ease}.is-modern.is-resting .f-thumbs__slide__button{transition:clip-path .33s ease}.is-using-tab .is-modern .f-thumbs__slide:focus-within{filter:drop-shadow(-1px 0px 0px var(--f-thumb-outline-color)) drop-shadow(2px 0px 0px var(--f-thumb-outline-color)) drop-shadow(0px -1px 0px var(--f-thumb-outline-color)) drop-shadow(0px 2px 0px var(--f-thumb-outline-color))}.f-thumbs__slide__button{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:var(--f-thumb-width);height:100%;margin:0 -100%;padding:0;border:0;position:relative;border-radius:var(--f-thumb-border-radius);overflow:hidden;background:#0000;outline:none;cursor:pointer;pointer-events:auto;touch-action:manipulation;opacity:var(--f-thumb-opacity);transition:opacity .2s ease}.f-thumbs__slide__button:hover{opacity:var(--f-thumb-hover-opacity)}.f-thumbs__slide__button:focus:not(:focus-visible){outline:none}.f-thumbs__slide__button:focus-visible{outline:none;opacity:var(--f-thumb-selected-opacity)}.is-modern .f-thumbs__slide__button{--clip-path: inset( 0 calc( ((var(--f-thumb-width, 0) - var(--f-thumb-clip-width, 0))) * (1 - var(--progress, 0)) * .5 ) round var(--f-thumb-border-radius, 0) );clip-path:var(--clip-path)}.is-classic .is-nav-selected .f-thumbs__slide__button{opacity:var(--f-thumb-selected-opacity)}.is-classic .is-nav-selected .f-thumbs__slide__button:after{content:"";position:absolute;top:0;left:0;right:0;height:auto;bottom:0;border:var(--f-thumb-outline, 0) solid var(--f-thumb-outline-color, transparent);border-radius:var(--f-thumb-border-radius);animation:f-fadeIn .2s ease-out;z-index:10}.f-thumbs__slide__img{overflow:hidden;position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;margin:0;padding:var(--f-thumb-offset);box-sizing:border-box;pointer-events:none;-o-object-fit:cover;object-fit:cover;border-radius:var(--f-thumb-border-radius)}.f-thumbs.is-horizontal .f-thumbs__track{padding:8px 0 12px}.f-thumbs.is-horizontal .f-thumbs__slide{margin:0 var(--f-thumb-gap) 0 0}.f-thumbs.is-vertical .f-thumbs__track{flex-wrap:wrap;padding:0 8px}.f-thumbs.is-vertical .f-thumbs__slide{margin:0 0 var(--f-thumb-gap) 0}.fancybox__thumbs{--f-thumb-width: 96px;--f-thumb-height: 72px;--f-thumb-border-radius: 2px;--f-thumb-outline: 2px;--f-thumb-outline-color: #ededed;position:relative;opacity:var(--fancybox-opacity, 1);transition:max-height .35s cubic-bezier(.23,1,.32,1)}.fancybox__thumbs.is-classic{--f-thumb-gap: 8px;--f-thumb-opacity: .5;--f-thumb-hover-opacity: 1}.fancybox__thumbs.is-classic .f-spinner{background-image:linear-gradient(#ffffff1a,#ffffff0d)}.fancybox__thumbs.is-modern{--f-thumb-gap: 4px;--f-thumb-extra-gap: 16px;--f-thumb-clip-width: 46px;--f-thumb-opacity: 1;--f-thumb-hover-opacity: 1}.fancybox__thumbs.is-modern .f-spinner{background-image:linear-gradient(#ffffff1a,#ffffff0d)}.fancybox__thumbs.is-horizontal{padding:0 var(--f-thumb-gap)}.fancybox__thumbs.is-vertical{padding:var(--f-thumb-gap) 0}.is-compact .fancybox__thumbs{--f-thumb-width: 64px;--f-thumb-clip-width: 32px;--f-thumb-height: 48px;--f-thumb-extra-gap: 10px}.fancybox__thumbs.is-masked{max-height:0px!important}.is-closing .fancybox__thumbs{transition:none!important}.fancybox__toolbar{--f-progress-color: var(--fancybox-color, rgba(255, 255, 255, .94));--f-button-width: 46px;--f-button-height: 46px;--f-button-color: var(--fancybox-color);--f-button-hover-color: var(--fancybox-hover-color);--f-button-bg: rgba(24, 24, 27, .65);--f-button-hover-bg: rgba(70, 70, 73, .65);--f-button-active-bg: rgba(90, 90, 93, .65);--f-button-border-radius: 0;--f-button-svg-width: 24px;--f-button-svg-height: 24px;--f-button-svg-stroke-width: 1.5;--f-button-svg-filter: drop-shadow(1px 1px 1px rgba(24, 24, 27, .15));--f-button-svg-fill: none;--f-button-svg-disabled-opacity: .65;display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI Adjusted,Segoe UI,Liberation Sans,sans-serif;color:var(--fancybox-color, currentColor);opacity:var(--fancybox-opacity, 1);text-shadow:var(--fancybox-toolbar-text-shadow, 1px 1px 1px rgba(0, 0, 0, .5));pointer-events:none;z-index:20}.fancybox__toolbar :focus-visible{z-index:1}.fancybox__toolbar.is-absolute,.is-compact .fancybox__toolbar{position:absolute;top:0;left:0;right:0}.is-idle .fancybox__toolbar{pointer-events:none;animation:.15s ease-out both f-fadeOut}.fancybox__toolbar__column{display:flex;flex-direction:row;flex-wrap:wrap;align-content:flex-start}.fancybox__toolbar__column.is-left,.fancybox__toolbar__column.is-right{flex-grow:1;flex-basis:0}.fancybox__toolbar__column.is-right{display:flex;justify-content:flex-end;flex-wrap:nowrap}.fancybox__infobar{padding:0 5px;line-height:var(--f-button-height);text-align:center;font-size:17px;font-variant-numeric:tabular-nums;-webkit-font-smoothing:subpixel-antialiased;cursor:default;-webkit-user-select:none;-moz-user-select:none;user-select:none}.fancybox__infobar span{padding:0 5px}.fancybox__infobar:not(:first-child):not(:last-child){background:var(--f-button-bg)}[data-fancybox-toggle-slideshow]{position:relative}[data-fancybox-toggle-slideshow] .f-progress{height:100%;opacity:.3}[data-fancybox-toggle-slideshow] svg g:first-child{display:flex}[data-fancybox-toggle-slideshow] svg g:last-child{display:none}.has-slideshow [data-fancybox-toggle-slideshow] svg g:first-child{display:none}.has-slideshow [data-fancybox-toggle-slideshow] svg g:last-child{display:flex}[data-fancybox-toggle-fullscreen] svg g:first-child{display:flex}[data-fancybox-toggle-fullscreen] svg g:last-child{display:none}:fullscreen [data-fancybox-toggle-fullscreen] svg g:first-child{display:none}:fullscreen [data-fancybox-toggle-fullscreen] svg g:last-child{display:flex}.f-progress{position:absolute;top:0;left:0;right:0;height:3px;transform:scaleX(0);transform-origin:0;transition-property:transform;transition-timing-function:linear;background:var(--f-progress-color, var(--f-carousel-theme-color, #0091ff));z-index:30;-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none}.item__text-content,.item{transition:all .5s cubic-bezier(.4,0,.2,1)}.item:hover .item__text-content{opacity:.8}.item img{-o-object-fit:contain;object-fit:contain}.ProseMirror-focused{outline:none}.editor-toolbar{background-color:#f9fafb}.editor-content{min-height:160px}button{transition:background-color .2s ease;outline:none}button:focus{outline:none}.editor-content ul{margin-left:20px}.editor-content ul>li{list-style:disc}.editor-content ol{list-style-type:decimal;margin-left:20px}.editor-content pre{background-color:#e7e7e7;border-radius:4px;padding:0 2px}.mention-popup{background-color:#fafafa;padding:10px;border-radius:10px;box-shadow:0 4px 6px #0000001a;max-width:200px;overflow-y:auto;width:auto}.mention{padding:2px 4px;border-radius:8px;background-color:#e7e7e7}.mention-option{padding:5px 10px;cursor:pointer;transition:background-color .2s;border-radius:8px}.mention-option:hover{background-color:#f0f0f0}.border-top:not(:first-child){--tw-border-opacity: 1;border-color:#e5e7eb;border-top-width:1px}.widget-comment-form .vs-button{padding:.625rem 1rem;font-size:.75rem;line-height:1rem;font-weight:500}.widget-comment-form .vs-button:focus{border:transparent;--tw-ring-opacity: 1;--tw-ring-color: rgb(191 219 254);--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 rgba(0, 0, 0, 0))}li[data-v-87c0b333]{cursor:move}.grid[data-v-f2a27685]{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:1rem}.admin-wrapper[data-v-2f422765]{display:flex;height:100vh;align-items:start}.vs-popover__content>div{padding:.25rem}.hs-accordion-heading[data-v-4139bc00]{display:flex;align-items:center}.hs-accordion-toggle[data-v-4139bc00]{cursor:pointer}.hs-accordion-content[data-v-4139bc00]{padding-left:1.5rem}.table-info-card .editor-container{width:330px}.slide-fade-enter-active[data-v-30411599],.slide-fade-leave-active[data-v-30411599]{transition:all .3s linear}.slide-fade-enter-from[data-v-30411599],.slide-fade-leave-to[data-v-30411599]{transform:translate(20px);opacity:0}
|
@@ -1,3 +1,3 @@
|
|
1
|
-
{
|
2
|
-
"count": 1000
|
1
|
+
{
|
2
|
+
"count": 1000
|
3
3
|
}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@opengis/admin",
|
3
|
-
"version": "0.1.
|
3
|
+
"version": "0.1.67",
|
4
4
|
"description": "This project Softpro Admin",
|
5
5
|
"main": "dist/admin.js",
|
6
6
|
"type": "module",
|
@@ -31,9 +31,10 @@
|
|
31
31
|
"author": "Softpro",
|
32
32
|
"license": "ISC",
|
33
33
|
"dependencies": {
|
34
|
+
"@fancyapps/ui": "^5.0.36",
|
34
35
|
"@opengis/fastify-auth": "^1.0.40",
|
35
36
|
"@opengis/fastify-file": "^1.0.17",
|
36
|
-
"@opengis/fastify-table": "^1.1.
|
37
|
+
"@opengis/fastify-table": "^1.1.44",
|
37
38
|
"@opengis/v3-core": "^0.2.1",
|
38
39
|
"@opengis/v3-filter": "^0.0.31",
|
39
40
|
"@tiptap/core": "^2.8.0",
|
@@ -53,6 +54,7 @@
|
|
53
54
|
"cross-env": "^7.0.3",
|
54
55
|
"fastify": "^4.26.1",
|
55
56
|
"fastify-plugin": "^4.0.0",
|
57
|
+
"latest": "^0.2.0",
|
56
58
|
"maplibre-gl": "^4.7.0",
|
57
59
|
"moment": "^2.30.1",
|
58
60
|
"vite": "^5.1.4",
|
@@ -77,4 +79,4 @@
|
|
77
79
|
"vitepress-plugin-tabs": "^0.5.0",
|
78
80
|
"vitepress-sidebar": "^1.22.0"
|
79
81
|
}
|
80
|
-
}
|
82
|
+
}
|
package/server/plugins/hook.js
CHANGED
@@ -1,12 +1,8 @@
|
|
1
|
-
import config from '
|
2
|
-
import { addHook, getToken, setToken, getTemplate } from '@opengis/fastify-table/utils.js';
|
1
|
+
import { addHook, getToken, setToken, getTemplate, config, pgClients } from '@opengis/fastify-table/utils.js';
|
3
2
|
|
4
3
|
async function getTokenData({
|
5
|
-
|
4
|
+
mode = 'w', token, uid,
|
6
5
|
}) {
|
7
|
-
if (!req) {
|
8
|
-
return { message: 'not enough params: req', status: 400 };
|
9
|
-
}
|
10
6
|
if (!token) {
|
11
7
|
return { message: 'not enough params: token', status: 400 };
|
12
8
|
}
|
@@ -27,40 +23,44 @@ async function getTokenData({
|
|
27
23
|
|
28
24
|
export default async function plugin(fastify) {
|
29
25
|
|
30
|
-
addHook('preTable', async ({
|
26
|
+
addHook('preTable', async ({ table, user = {} }) => {
|
31
27
|
const { uid } = config?.auth?.disable ? { uid: '1' } : user || {};
|
32
|
-
|
33
|
-
|
34
|
-
|
28
|
+
const opt = await getTokenData({ mode: 'w', token: table, uid });
|
29
|
+
return opt;
|
30
|
+
});
|
31
|
+
addHook('preCard', async ({ table, user = {} }) => {
|
32
|
+
const { uid } = config?.auth?.disable ? { uid: '1' } : user || {};
|
33
|
+
const opt = await getTokenData({ mode: 'w', token: table, uid });
|
34
|
+
return opt;
|
35
35
|
});
|
36
|
-
addHook('preData', async ({
|
36
|
+
addHook('preData', async ({ table, id, user = {} }) => {
|
37
37
|
const { uid } = config?.auth?.disable ? { uid: '1' } : user || {};
|
38
|
-
const opt = await getTokenData({
|
38
|
+
const opt = await getTokenData({ mode: 'w', token: table, uid });
|
39
39
|
return opt;
|
40
40
|
});
|
41
|
-
addHook('preForm', async ({
|
41
|
+
addHook('preForm', async ({ form, user }) => {
|
42
42
|
const { uid } = config?.auth?.disable ? { uid: '1' } : user || {};
|
43
|
-
const opt = await getTokenData({
|
43
|
+
const opt = await getTokenData({ mode: 'w', token: form, uid });
|
44
44
|
return opt;
|
45
45
|
});
|
46
|
-
addHook('preInsert', async ({
|
46
|
+
addHook('preInsert', async ({ table, user }) => {
|
47
47
|
const { uid } = config?.auth?.disable ? { uid: '1' } : user || {};
|
48
|
-
const opt = await getTokenData({
|
48
|
+
const opt = await getTokenData({ mode: 'a', token: table, uid });
|
49
49
|
return opt;
|
50
50
|
});
|
51
|
-
addHook('preUpdate', async ({
|
51
|
+
addHook('preUpdate', async ({ table, id, user }) => {
|
52
52
|
const { uid } = config?.auth?.disable ? { uid: '1' } : user || {};
|
53
|
-
const opt = await getTokenData({
|
53
|
+
const opt = await getTokenData({ mode: 'w', token: table, uid });
|
54
54
|
return opt;
|
55
55
|
});
|
56
|
-
addHook('preDelete', async ({
|
56
|
+
addHook('preDelete', async ({ table, id, user }) => {
|
57
57
|
const { uid } = config?.auth?.disable ? { uid: '1' } : user || {};
|
58
|
-
const opt = await getTokenData({
|
58
|
+
const opt = await getTokenData({ mode: 'w', token: table, uid });
|
59
59
|
return opt;
|
60
60
|
});
|
61
61
|
|
62
|
-
addHook('afterTable', async ({
|
63
|
-
const { pg } =
|
62
|
+
addHook('afterTable', async ({ table, res = {}, payload: rows = [], user = {} }) => {
|
63
|
+
const { client: pg } = pgClients || {};
|
64
64
|
const loadTable = await getTemplate('table', table);
|
65
65
|
const { uid } = config?.auth?.disable ? { uid: '1' } : user;
|
66
66
|
if (!uid || !table || !pg?.pk?.[table] || !rows.length || !loadTable?.table) return;
|
@@ -103,39 +103,34 @@ export default async function plugin(fastify) {
|
|
103
103
|
});
|
104
104
|
|
105
105
|
// extract table from form token for user columns - p.2 - read (refactor to global token)
|
106
|
-
|
107
|
-
|
108
|
-
const { uid } =
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
}); */
|
106
|
+
addHook('preTemplate', async ({ name, type, user = {} }) => {
|
107
|
+
if (!name || !type) return;
|
108
|
+
const { uid } = config?.auth?.disable ? { uid: '1' } : user;
|
109
|
+
const tokenData = await getToken({
|
110
|
+
uid, token: name, mode: 'w', json: 1,
|
111
|
+
}) // edit?
|
112
|
+
|| await getToken({
|
113
|
+
uid, token: name, mode: 'a', json: 1,
|
114
|
+
}) || {}; // add?
|
115
|
+
return { name: tokenData?.[type] };
|
116
|
+
});
|
118
117
|
|
119
|
-
addHook('afterTemplate', async ({
|
120
|
-
const {
|
121
|
-
const { uid } =
|
122
|
-
const { pg, params = {} } = req;
|
118
|
+
addHook('afterTemplate', async ({ name, type, payload: data = {}, user = {} }) => {
|
119
|
+
const { client: pg } = pgClients || {};
|
120
|
+
const { uid } = config?.auth?.disable ? { uid: '1' } : user;
|
123
121
|
// extract table from form token for user columns - p.1 - assign (refactor to global token)
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
});
|
133
|
-
Object.assign(data, { token: editTokens[0] });
|
134
|
-
} */
|
135
|
-
if (!uid || !data || params?.type !== 'form' || !params?.name) return null;
|
122
|
+
if (!uid || !data || type !== 'form' || !name) return null;
|
123
|
+
|
124
|
+
const { form, id, table } = await getToken({
|
125
|
+
uid, token: name, mode: 'w', json: 1,
|
126
|
+
}) // edit?
|
127
|
+
|| await getToken({
|
128
|
+
uid, token: name, mode: 'a', json: 1,
|
129
|
+
}) || {}; // add?
|
136
130
|
|
137
131
|
const { rows: properties = [] } = await pg.query(`select name, title, format, data from admin.custom_column
|
138
|
-
where entity=$1 and uid=$2`, [
|
132
|
+
where entity=$1 and uid=$2`, [table || name, uid]);
|
133
|
+
|
139
134
|
await Promise.all(properties.map(async (el) => {
|
140
135
|
const clsData = el.data ? await getTemplate(['cls', 'select'], el.data) : undefined;
|
141
136
|
const type = clsData ? 'Select' : ({ date: 'DatePicker' }[el.format] || 'Text');
|
@@ -143,52 +138,48 @@ export default async function plugin(fastify) {
|
|
143
138
|
}));
|
144
139
|
});
|
145
140
|
|
146
|
-
addHook('afterUpdate', async ({
|
147
|
-
const {
|
148
|
-
pg, params = {}, body = {},
|
149
|
-
} = req;
|
141
|
+
addHook('afterUpdate', async ({ table, body = {}, payload: res = {}, user = {} }) => {
|
142
|
+
const { client: pg } = pgClients || {};
|
150
143
|
const { uid } = config?.auth?.disable ? { uid: '1' } : user;
|
151
|
-
if (!uid) return null;
|
144
|
+
if (!uid || !table || !Object.keys(body)?.length) return null;
|
152
145
|
|
153
|
-
const loadTable = await getTemplate('table',
|
154
|
-
if (!pg.pk[loadTable?.table ||
|
155
|
-
const pk = pg.pk[loadTable?.table ||
|
146
|
+
const loadTable = await getTemplate('table', table);
|
147
|
+
if (!pg.pk[loadTable?.table || table]) return null;
|
148
|
+
const pk = pg.pk[loadTable?.table || table];
|
156
149
|
const id = res[pk];
|
157
150
|
|
158
151
|
const { rows: properties = [] } = await pg.query(`select column_id, name, title, format, data from admin.custom_column
|
159
|
-
where entity=$1 and uid=$2`, [
|
152
|
+
where entity=$1 and uid=$2`, [table, uid]);
|
160
153
|
|
161
154
|
if (!id || !properties?.length) return null;
|
162
155
|
|
163
|
-
const q = `delete from crm.extra_data where property_entity='${
|
156
|
+
const q = `delete from crm.extra_data where property_entity='${table}' and object_id='${id}';${properties
|
164
157
|
.filter((el) => Object.keys(body).includes(el.name))
|
165
158
|
.map((el) => `insert into crm.extra_data(property_id,property_key,property_entity,object_id,${el.format?.toLowerCase() === 'date' ? 'value_date' : 'value_text'})
|
166
|
-
select '${el.column_id}', '${el.name}', '${
|
159
|
+
select '${el.column_id}', '${el.name}', '${table}', '${id}', ${el.format?.toLowerCase() === 'date' ? `'${body[el.name]}'::timestamp without time zone` : `'${body[el.name]}'::text`}`)
|
167
160
|
.join(';\n') || ''}`;
|
168
161
|
return pg.query(q);
|
169
162
|
});
|
170
163
|
|
171
|
-
addHook('afterInsert', async ({
|
172
|
-
const {
|
173
|
-
pg, params = {}, body = {},
|
174
|
-
} = req;
|
164
|
+
addHook('afterInsert', async ({ table, body = {}, payload: res = {}, user = {} }) => {
|
165
|
+
const { client: pg } = pgClients || {};
|
175
166
|
const { uid } = config?.auth?.disable ? { uid: '1' } : user;
|
176
|
-
if (!uid) return null;
|
167
|
+
if (!uid || !table || !Object.keys(body)?.length) return null;
|
177
168
|
|
178
|
-
const loadTable = await getTemplate('table',
|
179
|
-
if (!pg.pk[loadTable?.table ||
|
180
|
-
const pk = pg.pk[loadTable?.table ||
|
169
|
+
const loadTable = await getTemplate('table', table);
|
170
|
+
if (!pg.pk[loadTable?.table || table]) return null;
|
171
|
+
const pk = pg.pk[loadTable?.table || table];
|
181
172
|
const id = res.rows?.[0]?.[pk];
|
182
173
|
|
183
174
|
const { rows: properties = [] } = await pg.query(`select column_id, name, title, format, data from admin.custom_column
|
184
|
-
|
175
|
+
where entity=$1 and uid=$2`, [table, uid]);
|
185
176
|
|
186
177
|
if (!id || !properties?.length) return null;
|
187
178
|
|
188
179
|
const q = properties
|
189
180
|
.filter((el) => Object.keys(body).includes(el.name))
|
190
181
|
.map((el) => `insert into crm.extra_data(property_id,property_key,property_entity,object_id,${el.format?.toLowerCase() === 'date' ? 'value_date' : 'value_text'})
|
191
|
-
select '${el.column_id}', '${el.name}', '${
|
182
|
+
select '${el.column_id}', '${el.name}', '${table}', '${id}', ${el.format?.toLowerCase() === 'date' ? `'${body[el.name]}'::timestamp without time zone` : `'${body[el.name]}'::text`}`)
|
192
183
|
.join(';\n');
|
193
184
|
return pg.query(q);
|
194
185
|
});
|
package/server/plugins/vite.js
CHANGED
@@ -50,14 +50,19 @@ async function plugin(fastify) {
|
|
50
50
|
return reply.type('text/html').send(stream);
|
51
51
|
});
|
52
52
|
|
53
|
+
const fileSize = {}
|
53
54
|
async function staticFile(req, reply) {
|
54
55
|
const assetsDir = 'dist';
|
55
56
|
const filePath = path.join(root, assetsDir, req.url);
|
56
57
|
const ext = path.extname(filePath);
|
58
|
+
|
59
|
+
if (!fs.existsSync(filePath)) return { status: 404, message: 'not found' }
|
60
|
+
fileSize[filePath] = fileSize[filePath] || fs.statSync(filePath).size;
|
57
61
|
const mime = {
|
58
62
|
'.js': 'text/javascript', '.css': 'text/css', '.woff2': 'application/font-woff', '.png': 'image/png', '.svg': 'image/svg+xml', '.jpg': 'image/jpg',
|
59
63
|
}[ext];
|
60
|
-
reply.headers({ 'Cache-control': 'max-age=3600, public' });
|
64
|
+
reply.headers({ 'Cache-control': 'max-age=3600, public', 'Content-length': fileSize[filePath], 'Content-Encoding': 'identity' });
|
65
|
+
|
61
66
|
const stream = fs.createReadStream(filePath);
|
62
67
|
return mime ? reply.type(mime).send(stream) : stream;
|
63
68
|
}
|
@@ -99,7 +99,7 @@ export default async function getTableData(req) {
|
|
99
99
|
time: Date.now() - time, card: loadTable.card, actions: loadTable.actions, access, total, count: rows.length, pk, form, meta, columns,
|
100
100
|
};
|
101
101
|
|
102
|
-
await applyHook('afterTable', {
|
102
|
+
await applyHook('afterTable', { table: params?.table, res, rows, user: session?.passport?.user });
|
103
103
|
await metaFormat({ funcs, rows, table: params.table });
|
104
104
|
|
105
105
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
|
2
2
|
import { join } from 'path';
|
3
|
-
import { userTemplateDir } from '@opengis/fastify-table/utils.js';
|
3
|
+
import { userTemplateDir, config, getAccess } from '@opengis/fastify-table/utils.js';
|
4
4
|
|
5
5
|
import { existsSync, readdirSync, readFileSync } from 'fs';
|
6
6
|
const menuCache = [];
|
@@ -29,7 +29,24 @@ async function readMenu() {
|
|
29
29
|
if (!menuCache.length) menus.forEach(el => menuCache.push(el))
|
30
30
|
return menus;
|
31
31
|
}
|
32
|
-
export default async function adminMenu() {
|
32
|
+
export default async function adminMenu(req) {
|
33
33
|
const menus = isProduction && menuCache.length ? menuCache : await readMenu();
|
34
|
+
if (req) {
|
35
|
+
const user = req?.session?.passport?.user || {};
|
36
|
+
const userMenu = await Promise.all(menus.map(async (menu) => {
|
37
|
+
if (menu?.menu?.length) {
|
38
|
+
const submenu = await Promise.all(menu.menu?.map(async (submenu) => {
|
39
|
+
const access = await getAccess({ table: submenu?.table, user });
|
40
|
+
return { ...submenu, access };
|
41
|
+
}));
|
42
|
+
return { ...menu, menu: submenu.filter((e) => e?.access), access: submenu.filter((e) => e?.access?.actions?.includes('get'))?.length };
|
43
|
+
} else if (menu?.table) {
|
44
|
+
const access = await getAccess({ table: menu?.table, user });
|
45
|
+
return { ...menu, access };
|
46
|
+
}
|
47
|
+
return menu;
|
48
|
+
}));
|
49
|
+
return userMenu.filter((e) => e?.access)?.map((e) => ({ ...e, menu: e?.menu ? e?.menu?.filter((el) => el?.access?.actions?.includes('get')) : undefined }));
|
50
|
+
}
|
34
51
|
return menus;
|
35
52
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/* eslint-disable camelcase */
|
2
2
|
import {
|
3
|
-
getSelect, addNotification, sendNotification,
|
3
|
+
getSelect, addNotification, sendNotification, config,
|
4
4
|
} from '@opengis/fastify-table/utils.js';
|
5
5
|
|
6
6
|
function sequence(arr, data, fn) {
|
@@ -9,7 +9,7 @@ function sequence(arr, data, fn) {
|
|
9
9
|
})), Promise.resolve());
|
10
10
|
}
|
11
11
|
|
12
|
-
export default async function onWidgetSet({
|
12
|
+
export default async function onWidgetSet({ link, session, log, type, payload: data = {} }) {
|
13
13
|
const values = data.body?.match(/\B@[a-zA-z0-9а-яА-яіїІЇєЄ]+ [a-zA-z0-9а-яА-яіїІЇєЄ]+/g)
|
14
14
|
?.filter((el, idx, arr) => el?.replace && arr.indexOf(el) === idx)
|
15
15
|
?.map((el) => el.replace(/@/g, ''));
|
@@ -18,11 +18,6 @@ export default async function onWidgetSet({ req, type, data = {} }) {
|
|
18
18
|
return null;
|
19
19
|
}
|
20
20
|
|
21
|
-
const {
|
22
|
-
pg, funcs, path: link, session = {}, log,
|
23
|
-
} = req;
|
24
|
-
const { config = {} } = funcs;
|
25
|
-
|
26
21
|
const { sql } = await getSelect('core.user_mentioned');
|
27
22
|
|
28
23
|
const { rows = [] } = await pg.query(`with data (id,name,email) as (${sql})
|
@@ -37,12 +32,11 @@ export default async function onWidgetSet({ req, type, data = {} }) {
|
|
37
32
|
|
38
33
|
await sequence(rows, {}, async ({ id, name, email }) => {
|
39
34
|
const res = await addNotification({
|
40
|
-
pg,
|
35
|
+
pg, session, subject, entity: data.entity_id, body: message, link, uid: id,
|
41
36
|
});
|
42
37
|
try {
|
43
38
|
const res1 = await sendNotification({
|
44
39
|
pg,
|
45
|
-
funcs,
|
46
40
|
log,
|
47
41
|
to: email,
|
48
42
|
// template,
|
@@ -3,13 +3,13 @@ import { applyHook, getTemplate } from "@opengis/fastify-table/utils.js";
|
|
3
3
|
export default async function getTemplateApi(req) {
|
4
4
|
const { user } = req?.session?.passport || {};
|
5
5
|
const { funcs, params = {}, session = {} } = req;
|
6
|
-
const res = await applyHook('preTemplate', { req, name: params?.name, type: params?.type, user });
|
7
|
-
if (res) return res;
|
8
|
-
|
9
|
-
|
10
6
|
const { type, name } = params;
|
7
|
+
const hookData = await applyHook('preTemplate', { name, type, user });
|
8
|
+
if (hookData?.message && hookData?.status) {
|
9
|
+
return hookData;
|
10
|
+
}
|
11
11
|
|
12
|
-
const data = await getTemplate(type, name);
|
12
|
+
const data = await getTemplate(type, hookData?.name || name);
|
13
13
|
if (!['interface', 'table'].includes(type)
|
14
14
|
&& (!data?.public || !data?.ispublic)
|
15
15
|
&& !funcs?.config?.auth?.disable
|
@@ -18,6 +18,6 @@ export default async function getTemplateApi(req) {
|
|
18
18
|
) {
|
19
19
|
return `access restricted ${name}`;
|
20
20
|
}
|
21
|
-
await applyHook('afterTemplate', {
|
21
|
+
await applyHook('afterTemplate', { name, type, data, user });
|
22
22
|
return data?.html || data || `template not found "${name}"`;
|
23
23
|
}
|