bt-core-app 1.1.1 → 1.1.3
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/.vscode/extensions.json +3 -0
- package/dist/bt-core-app.js +23241 -0
- package/dist/style.css +1 -0
- package/package.json +1 -1
- package/test/api.test.ts +84 -0
- package/test/forage.test.ts +31 -0
- package/test/helpers.test.ts +231 -0
- package/test/navigation.test.ts +99 -0
- package/test/stores-last-update.test.ts +138 -0
- package/test/stores-session.test.ts +118 -0
- package/test/track.test.ts +29 -0
- package/test/utils.ts +15 -0
- package/tsconfig.json +33 -0
- package/vite.config.ts +7 -1
- package/index.html +0 -13
package/dist/style.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.dp__input_wrap{position:relative;width:100%;box-sizing:unset}.dp__input_wrap:focus{border-color:var(--dp-border-color-hover);outline:none}.dp__input{background-color:var(--dp-background-color);border-radius:var(--dp-border-radius);font-family:var(--dp-font-family);border:1px solid var(--dp-border-color);outline:none;transition:border-color .2s cubic-bezier(.645,.045,.355,1);width:100%;font-size:var(--dp-font-size);line-height:calc(var(--dp-font-size)*1.5);padding:var(--dp-input-padding);color:var(--dp-text-color);box-sizing:border-box}.dp__input::placeholder{opacity:.7}.dp__input:hover{border-color:var(--dp-border-color-hover)}.dp__input_reg{caret-color:#0000}.dp__input_focus{border-color:var(--dp-border-color-hover)}.dp__disabled{background:var(--dp-disabled-color)}.dp__disabled::placeholder{color:var(--dp-disabled-color-text)}.dp__input_icons{display:inline-block;width:var(--dp-font-size);height:var(--dp-font-size);stroke-width:0;font-size:var(--dp-font-size);line-height:calc(var(--dp-font-size)*1.5);padding:6px 12px;color:var(--dp-icon-color);box-sizing:content-box}.dp__input_icon{cursor:pointer;position:absolute;top:50%;inset-inline-start:0;transform:translateY(-50%);color:var(--dp-icon-color)}.dp__clear_icon{position:absolute;top:50%;inset-inline-end:0;transform:translateY(-50%);cursor:pointer;color:var(--dp-icon-color)}.dp__input_icon_pad{padding-inline-start:var(--dp-input-icon-padding)}.dp__input_valid{box-shadow:0 0 var(--dp-border-radius) var(--dp-success-color);border-color:var(--dp-success-color)}.dp__input_valid:hover{border-color:var(--dp-success-color)}.dp__input_invalid{box-shadow:0 0 var(--dp-border-radius) var(--dp-danger-color);border-color:var(--dp-danger-color)}.dp__input_invalid:hover{border-color:var(--dp-danger-color)}.dp__menu{background:var(--dp-background-color);border-radius:var(--dp-border-radius);min-width:var(--dp-menu-min-width);font-family:var(--dp-font-family);font-size:var(--dp-font-size);-webkit-user-select:none;user-select:none;border:1px solid var(--dp-menu-border-color);box-sizing:border-box}.dp__menu:after{box-sizing:border-box}.dp__menu:before{box-sizing:border-box}.dp__menu:focus{border:1px solid var(--dp-menu-border-color);outline:none}.dp--menu-wrapper{position:absolute;z-index:99999}.dp__menu_inner{padding:var(--dp-menu-padding)}.dp--menu--inner-stretched{padding:6px 0}.dp__menu_index{z-index:99999}.dp-menu-loading,.dp__menu_readonly,.dp__menu_disabled{position:absolute;top:0;right:0;bottom:0;left:0;z-index:999999}.dp__menu_disabled{background:#ffffff80;cursor:not-allowed}.dp__menu_readonly{background:#0000;cursor:default}.dp-menu-loading{background:#ffffff80;cursor:default}.dp--menu-load-container{display:flex;height:100%;width:100%;justify-content:center;align-items:center}.dp--menu-loader{width:48px;height:48px;border:var(--dp-loader);border-bottom-color:#0000;border-radius:50%;display:inline-block;box-sizing:border-box;animation:dp-load-rotation 1s linear infinite;position:absolute}@keyframes dp-load-rotation{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.dp__arrow_top{left:50%;top:0;height:12px;width:12px;background-color:var(--dp-background-color);position:absolute;border-inline-end:1px solid var(--dp-menu-border-color);border-top:1px solid var(--dp-menu-border-color);transform:translate(-50%,-50%) rotate(-45deg)}.dp__arrow_bottom{left:50%;bottom:0;height:12px;width:12px;background-color:var(--dp-background-color);position:absolute;border-inline-end:1px solid var(--dp-menu-border-color);border-bottom:1px solid var(--dp-menu-border-color);transform:translate(-50%,50%) rotate(45deg)}.dp__action_extra{text-align:center;padding:2px 0}.dp--preset-dates{padding:5px;border-inline-end:1px solid var(--dp-border-color)}@media only screen and (width <= 600px){.dp--preset-dates{display:flex;align-self:center;border:none;overflow-x:auto;max-width:calc(var(--dp-menu-width) - var(--dp-action-row-padding)*2)}}.dp--preset-dates-collapsed{display:flex;align-self:center;border:none;overflow-x:auto;max-width:calc(var(--dp-menu-width) - var(--dp-action-row-padding)*2)}.dp__sidebar_left{padding:5px;border-inline-end:1px solid var(--dp-border-color)}.dp__sidebar_right{padding:5px;margin-inline-end:1px solid var(--dp-border-color)}.dp--preset-range{display:block;width:100%;padding:5px;text-align:left;white-space:nowrap;color:var(--dp-text-color);border-radius:var(--dp-border-radius);transition:var(--dp-common-transition)}.dp--preset-range:hover{background-color:var(--dp-hover-color);color:var(--dp-hover-text-color);cursor:pointer}@media only screen and (width <= 600px){.dp--preset-range{border:1px solid var(--dp-border-color);margin:0 3px}.dp--preset-range:first-child{margin-left:0}.dp--preset-range:last-child{margin-right:0}}.dp--preset-range-collapsed{border:1px solid var(--dp-border-color);margin:0 3px}.dp--preset-range-collapsed:first-child{margin-left:0}.dp--preset-range-collapsed:last-child{margin-right:0}.dp__menu_content_wrapper{display:flex}@media only screen and (width <= 600px){.dp__menu_content_wrapper{flex-direction:column-reverse}}.dp--menu-content-wrapper-collapsed{flex-direction:column-reverse}.dp__calendar_header{position:relative;display:flex;justify-content:center;align-items:center;color:var(--dp-text-color);white-space:nowrap;font-weight:700}.dp__calendar_header_item{text-align:center;flex-grow:1;height:var(--dp-cell-size);padding:var(--dp-cell-padding);width:var(--dp-cell-size);box-sizing:border-box}.dp__calendar_row{display:flex;justify-content:center;align-items:center;margin:var(--dp-row-margin)}.dp__calendar_item{text-align:center;flex-grow:1;box-sizing:border-box;color:var(--dp-text-color)}.dp__calendar{position:relative}.dp__calendar_header_cell{border-bottom:thin solid var(--dp-border-color);padding:var(--dp-calendar-header-cell-padding)}.dp__cell_inner{display:flex;align-items:center;text-align:center;justify-content:center;border-radius:var(--dp-cell-border-radius);height:var(--dp-cell-size);padding:var(--dp-cell-padding);width:var(--dp-cell-size);border:1px solid rgba(0,0,0,0);box-sizing:border-box;position:relative}.dp__cell_inner:hover{transition:all .2s}.dp__cell_auto_range_start,.dp__date_hover_start:hover,.dp__range_start{border-end-end-radius:0;border-start-end-radius:0}.dp__cell_auto_range_end,.dp__date_hover_end:hover,.dp__range_end{border-end-start-radius:0;border-start-start-radius:0}.dp__range_end,.dp__range_start,.dp__active_date{background:var(--dp-primary-color);color:var(--dp-primary-text-color)}.dp__cell_auto_range_end,.dp__cell_auto_range_start{border-top:1px dashed var(--dp-primary-color);border-bottom:1px dashed var(--dp-primary-color)}.dp__date_hover_end:hover,.dp__date_hover_start:hover,.dp__date_hover:hover{background:var(--dp-hover-color);color:var(--dp-hover-text-color)}.dp__cell_offset{color:var(--dp-secondary-color)}.dp__cell_disabled{color:var(--dp-secondary-color);cursor:not-allowed}.dp__range_between{background:var(--dp-range-between-dates-background-color);color:var(--dp-range-between-dates-text-color);border-radius:0;border:1px solid var(--dp-range-between-border-color)}.dp__range_between_week{background:var(--dp-primary-color);color:var(--dp-primary-text-color);border-radius:0;border-top:1px solid var(--dp-primary-color);border-bottom:1px solid var(--dp-primary-color)}.dp__today{border:1px solid var(--dp-primary-color)}.dp__week_num{color:var(--dp-secondary-color);text-align:center}.dp__cell_auto_range{border-radius:0;border-top:1px dashed var(--dp-primary-color);border-bottom:1px dashed var(--dp-primary-color)}.dp__cell_auto_range_start{border-inline-start:1px dashed var(--dp-primary-color)}.dp__cell_auto_range_end{border-inline-end:1px dashed var(--dp-primary-color)}.dp__calendar_header_separator{width:100%;height:1px;background:var(--dp-border-color)}.dp__calendar_next{margin-inline-start:var(--dp-multi-calendars-spacing)}.dp__marker_line,.dp__marker_dot{height:5px;background-color:var(--dp-marker-color);position:absolute;bottom:0}.dp__marker_dot{width:5px;border-radius:50%;left:50%;transform:translate(-50%)}.dp__marker_line{width:100%;left:0}.dp__marker_tooltip{position:absolute;border-radius:var(--dp-border-radius);background-color:var(--dp-tooltip-color);padding:5px;border:1px solid var(--dp-border-color);z-index:99999;box-sizing:border-box;cursor:default}.dp__tooltip_content{white-space:nowrap}.dp__tooltip_text{display:flex;align-items:center;flex-flow:row nowrap;color:var(--dp-text-color)}.dp__tooltip_mark{height:5px;width:5px;border-radius:50%;background-color:var(--dp-text-color);color:var(--dp-text-color);margin-inline-end:5px}.dp__arrow_bottom_tp{bottom:0;height:8px;width:8px;background-color:var(--dp-tooltip-color);position:absolute;border-inline-end:1px solid var(--dp-border-color);border-bottom:1px solid var(--dp-border-color);transform:translate(-50%,50%) rotate(45deg)}.dp__instance_calendar{position:relative;width:100%}@media only screen and (width <= 600px){.dp__flex_display{flex-direction:column}}.dp--flex-display-collapsed{flex-direction:column}.dp__cell_highlight{background-color:var(--dp-highlight-color)}.dp__month_year_row{display:flex;align-items:center;height:var(--dp-month-year-row-height);color:var(--dp-text-color);box-sizing:border-box}.dp__inner_nav{display:flex;align-items:center;justify-content:center;cursor:pointer;height:var(--dp-month-year-row-button-size);width:var(--dp-month-year-row-button-size);color:var(--dp-icon-color);text-align:center;border-radius:50%}.dp__inner_nav svg{height:var(--dp-button-icon-height);width:var(--dp-button-icon-height)}.dp__inner_nav:hover{background:var(--dp-hover-color);color:var(--dp-hover-icon-color)}[dir=rtl] .dp__inner_nav{transform:rotate(180deg)}.dp__inner_nav_disabled:hover,.dp__inner_nav_disabled{background:var(--dp-disabled-color);color:var(--dp-disabled-color-text);cursor:not-allowed}.dp--year-select,.dp__month_year_select{text-align:center;cursor:pointer;height:var(--dp-month-year-row-height);display:flex;align-items:center;justify-content:center;border-radius:var(--dp-border-radius);box-sizing:border-box;color:var(--dp-text-color)}.dp--year-select:hover,.dp__month_year_select:hover{background:var(--dp-hover-color);color:var(--dp-hover-text-color);transition:var(--dp-common-transition)}.dp__month_year_select{width:50%}.dp--year-select{width:100%}.dp__month_year_wrap{display:flex;width:100%}.dp__year_disable_select{justify-content:space-around}.dp__overlay{width:100%;background:var(--dp-background-color);transition:opacity 1s ease-out;z-index:99999;font-family:var(--dp-font-family);color:var(--dp-text-color);box-sizing:border-box}.dp--overlay-absolute{position:absolute;height:100%;top:0;left:0}.dp--overlay-relative{position:relative}.dp__overlay_container::-webkit-scrollbar-track{box-shadow:var(--dp-scroll-bar-background);background-color:var(--dp-scroll-bar-background)}.dp__overlay_container::-webkit-scrollbar{width:5px;background-color:var(--dp-scroll-bar-background)}.dp__overlay_container::-webkit-scrollbar-thumb{background-color:var(--dp-scroll-bar-color);border-radius:10px}.dp__overlay:focus{border:none;outline:none}.dp__container_flex{display:flex}.dp__container_block{display:block}.dp__overlay_container{flex-direction:column;overflow-y:auto}.dp__time_picker_overlay_container{height:100%}.dp__overlay_row{padding:0;box-sizing:border-box;display:flex;margin-inline:auto auto;flex-wrap:wrap;max-width:100%;width:100%;align-items:center}.dp__flex_row{flex:1}.dp__overlay_col{box-sizing:border-box;width:33%;padding:var(--dp-overlay-col-padding);white-space:nowrap}.dp__overlay_cell_pad{padding:var(--dp-common-padding) 0}.dp__overlay_cell_active{cursor:pointer;border-radius:var(--dp-border-radius);text-align:center;background:var(--dp-primary-color);color:var(--dp-primary-text-color)}.dp__overlay_cell{cursor:pointer;border-radius:var(--dp-border-radius);text-align:center}.dp__overlay_cell:hover{background:var(--dp-hover-color);color:var(--dp-hover-text-color);transition:var(--dp-common-transition)}.dp__cell_in_between{background:var(--dp-hover-color);color:var(--dp-hover-text-color)}.dp__over_action_scroll{right:5px;box-sizing:border-box}.dp__overlay_cell_disabled{cursor:not-allowed;background:var(--dp-disabled-color)}.dp__overlay_cell_disabled:hover{background:var(--dp-disabled-color)}.dp__overlay_cell_active_disabled{cursor:not-allowed;background:var(--dp-primary-disabled-color)}.dp__overlay_cell_active_disabled:hover{background:var(--dp-primary-disabled-color)}.dp__btn,.dp--qr-btn,.dp--time-invalid,.dp--time-overlay-btn{border:none;font:inherit;transition:var(--dp-common-transition);line-height:normal}.dp--tp-wrap{max-width:var(--dp-menu-min-width)}.dp__time_input{width:100%;display:flex;align-items:center;justify-content:center;-webkit-user-select:none;user-select:none;font-family:var(--dp-font-family);color:var(--dp-text-color)}.dp__time_col_reg_block{padding:0 20px}.dp__time_col_reg_inline{padding:0 10px}.dp__time_col_reg_with_button{padding:0 15px}.dp__time_col_sec{padding:0 10px}.dp__time_col_sec_with_button{padding:0 5px}.dp__time_col{text-align:center;display:flex;align-items:center;justify-content:center;flex-direction:column}.dp__time_col_block{font-size:var(--dp-time-font-size)}.dp__time_display{cursor:pointer;color:var(--dp-text-color);border-radius:var(--dp-border-radius);display:flex;align-items:center;justify-content:center}.dp__time_display:hover:enabled{background:var(--dp-hover-color);color:var(--dp-hover-text-color)}.dp__time_display_block{padding:0 3px}.dp__time_display_inline{padding:5px}.dp__time_picker_inline_container{display:flex;width:100%;justify-content:center}.dp__inc_dec_button{padding:5px;margin:0;height:var(--dp-time-inc-dec-button-size);width:var(--dp-time-inc-dec-button-size);display:flex;align-items:center;justify-content:center;cursor:pointer;border-radius:50%;color:var(--dp-icon-color);box-sizing:border-box}.dp__inc_dec_button svg{height:var(--dp-time-inc-dec-button-size);width:var(--dp-time-inc-dec-button-size)}.dp__inc_dec_button:hover{background:var(--dp-hover-color);color:var(--dp-primary-color)}.dp__inc_dec_button_inline{width:100%;padding:0;height:8px;cursor:pointer;display:flex;align-items:center}.dp__inc_dec_button_disabled:hover,.dp__inc_dec_button_disabled{background:var(--dp-disabled-color);color:var(--dp-disabled-color-text);cursor:not-allowed}.dp__pm_am_button{background:var(--dp-primary-color);color:var(--dp-primary-text-color);border:none;padding:var(--dp-common-padding);border-radius:var(--dp-border-radius);cursor:pointer}.dp__tp_inline_btn_bar{width:100%;height:4px;background-color:var(--dp-secondary-color);transition:var(--dp-common-transition);border-collapse:collapse}.dp__tp_inline_btn_top:hover .dp__tp_btn_in_r{background-color:var(--dp-primary-color);transform:rotate(12deg) scale(1.15) translateY(-2px)}.dp__tp_inline_btn_top:hover .dp__tp_btn_in_l,.dp__tp_inline_btn_bottom:hover .dp__tp_btn_in_r{background-color:var(--dp-primary-color);transform:rotate(-12deg) scale(1.15) translateY(-2px)}.dp__tp_inline_btn_bottom:hover .dp__tp_btn_in_l{background-color:var(--dp-primary-color);transform:rotate(12deg) scale(1.15) translateY(-2px)}.dp--time-overlay-btn{background:none}.dp--time-invalid{background-color:var(--dp-disabled-color)}.dp__action_row{display:flex;align-items:center;width:100%;padding:var(--dp-action-row-padding);box-sizing:border-box;color:var(--dp-text-color);flex-flow:row nowrap}.dp__action_row svg{height:var(--dp-button-icon-height);width:auto}.dp__selection_preview{display:block;color:var(--dp-text-color);font-size:var(--dp-preview-font-size);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.dp__action_buttons{display:flex;flex:0;white-space:nowrap;align-items:center;justify-content:flex-end;margin-inline-start:auto}.dp__action_button{display:inline-flex;align-items:center;background:#0000;border:1px solid rgba(0,0,0,0);padding:var(--dp-action-buttons-padding);line-height:var(--dp-action-button-height);margin-inline-start:3px;height:var(--dp-action-button-height);cursor:pointer;border-radius:var(--dp-border-radius);font-size:var(--dp-preview-font-size);font-family:var(--dp-font-family)}.dp__action_buttons .dp__action_select{background:var(--dp-primary-color);color:var(--dp-primary-text-color)}.dp__action_buttons .dp__action_select:hover{background:var(--dp-primary-color);transition:var(--dp-action-row-transtion)}.dp__action_buttons .dp__action_select:disabled{background:var(--dp-primary-disabled-color);cursor:not-allowed}.dp__action_cancel{color:var(--dp-text-color);border:1px solid var(--dp-border-color)}.dp__action_cancel:hover{border-color:var(--dp-primary-color);transition:var(--dp-action-row-transtion)}.dp-quarter-picker-wrap{display:flex;flex-direction:column;height:100%;min-width:var(--dp-menu-min-width)}.dp--qr-btn{width:100%;padding:var(--dp-common-padding)}.dp--qr-btn:not(.dp--highlighted,.dp--qr-btn-active,.dp--qr-btn-disabled,.dp--qr-btn-between){background:none}.dp--qr-btn:hover:not(.dp--qr-btn-active,.dp--qr-btn-disabled){background:var(--dp-hover-color);color:var(--dp-hover-text-color);transition:var(--dp-common-transition)}.dp--quarter-items{display:flex;flex-direction:column;flex:1;width:100%;height:100%;justify-content:space-evenly}.dp--qr-btn-active{background:var(--dp-primary-color);color:var(--dp-primary-text-color)}.dp--qr-btn-between{background:var(--dp-hover-color);color:var(--dp-hover-text-color)}.dp--qr-btn-disabled{cursor:not-allowed;background:var(--dp-disabled-color)}.dp--qr-btn-disabled:hover{background:var(--dp-disabled-color)}.dp__btn,.dp--time-overlay-btn,.dp--time-invalid,.dp--qr-btn{border:none;font:inherit;transition:var(--dp-common-transition);line-height:normal}.dp--year-mode-picker{display:flex;width:100%;align-items:center;justify-content:space-between;height:var(--dp-cell-size)}:root{--dp-common-transition: all .1s ease-in;--dp-menu-padding: 6px 8px;--dp-animation-duration: .1s;--dp-menu-appear-transition-timing: cubic-bezier(.4, 0, 1, 1);--dp-transition-timing: ease-out;--dp-action-row-transtion: all .2s ease-in;--dp-font-family: -apple-system, blinkmacsystemfont, "Segoe UI", roboto, oxygen, ubuntu, cantarell, "Open Sans", "Helvetica Neue", sans-serif;--dp-border-radius: 4px;--dp-cell-border-radius: 4px;--dp-transition-length: 22px;--dp-transition-timing-general: .1s;--dp-button-height: 35px;--dp-month-year-row-height: 35px;--dp-month-year-row-button-size: 25px;--dp-button-icon-height: 20px;--dp-calendar-wrap-padding: 0 5px;--dp-cell-size: 35px;--dp-cell-padding: 5px;--dp-common-padding: 10px;--dp-input-icon-padding: 35px;--dp-input-padding: 6px 30px 6px 12px;--dp-menu-min-width: 260px;--dp-action-buttons-padding: 1px 6px;--dp-row-margin: 5px 0;--dp-calendar-header-cell-padding: .5rem;--dp-multi-calendars-spacing: 10px;--dp-overlay-col-padding: 3px;--dp-time-inc-dec-button-size: 32px;--dp-font-size: 1rem;--dp-preview-font-size: .8rem;--dp-time-font-size: 2rem;--dp-action-button-height: 22px;--dp-action-row-padding: 8px}.dp__theme_dark{--dp-background-color: #212121;--dp-text-color: #fff;--dp-hover-color: #484848;--dp-hover-text-color: #fff;--dp-hover-icon-color: #959595;--dp-primary-color: #005cb2;--dp-primary-disabled-color: #61a8ea;--dp-primary-text-color: #fff;--dp-secondary-color: #a9a9a9;--dp-border-color: #2d2d2d;--dp-menu-border-color: #2d2d2d;--dp-border-color-hover: #aaaeb7;--dp-disabled-color: #737373;--dp-disabled-color-text: #d0d0d0;--dp-scroll-bar-background: #212121;--dp-scroll-bar-color: #484848;--dp-success-color: #00701a;--dp-success-color-disabled: #428f59;--dp-icon-color: #959595;--dp-danger-color: #e53935;--dp-marker-color: #e53935;--dp-tooltip-color: #3e3e3e;--dp-highlight-color: rgb(0 92 178 / 20%);--dp-range-between-dates-background-color: var(--dp-hover-color, #484848);--dp-range-between-dates-text-color: var(--dp-hover-text-color, #fff);--dp-range-between-border-color: var(--dp-hover-color, #fff);--dp-loader: 5px solid #005cb2}.dp__theme_light{--dp-background-color: #fff;--dp-text-color: #212121;--dp-hover-color: #f3f3f3;--dp-hover-text-color: #212121;--dp-hover-icon-color: #959595;--dp-primary-color: #1976d2;--dp-primary-disabled-color: #6bacea;--dp-primary-text-color: #f8f5f5;--dp-secondary-color: #c0c4cc;--dp-border-color: #ddd;--dp-menu-border-color: #ddd;--dp-border-color-hover: #aaaeb7;--dp-disabled-color: #f6f6f6;--dp-scroll-bar-background: #f3f3f3;--dp-scroll-bar-color: #959595;--dp-success-color: #76d275;--dp-success-color-disabled: #a3d9b1;--dp-icon-color: #959595;--dp-danger-color: #ff6f60;--dp-marker-color: #ff6f60;--dp-tooltip-color: #fafafa;--dp-disabled-color-text: #8e8e8e;--dp-highlight-color: rgb(25 118 210 / 10%);--dp-range-between-dates-background-color: var(--dp-hover-color, #f3f3f3);--dp-range-between-dates-text-color: var(--dp-hover-text-color, #212121);--dp-range-between-border-color: var(--dp-hover-color, #f3f3f3);--dp-loader: 5px solid #1976d2}.dp__flex{display:flex;align-items:center}.dp__btn{background:none}.dp__main{font-family:var(--dp-font-family);-webkit-user-select:none;user-select:none;box-sizing:border-box;position:relative;width:100%}.dp__pointer{cursor:pointer}.dp__icon{stroke:currentcolor;fill:currentcolor}.dp__button{width:100%;text-align:center;color:var(--dp-icon-color);cursor:pointer;display:flex;align-items:center;place-content:center center;padding:var(--dp-common-padding);box-sizing:border-box;height:var(--dp-button-height)}.dp__button.dp__overlay_action{position:absolute;bottom:0}.dp__button:hover{background:var(--dp-hover-color);color:var(--dp-hover-icon-color)}.dp__button svg{height:var(--dp-button-icon-height);width:auto}.dp__button_bottom{border-bottom-left-radius:var(--dp-border-radius);border-bottom-right-radius:var(--dp-border-radius)}.dp__flex_display{display:flex}.dp__flex_display_with_input{flex-direction:column;align-items:flex-start}.dp__relative{position:relative}.calendar-next-enter-active,.calendar-next-leave-active,.calendar-prev-enter-active,.calendar-prev-leave-active{transition:all var(--dp-transition-timing-general) ease-out}.calendar-next-enter-from{opacity:0;transform:translate(var(--dp-transition-length))}.calendar-next-leave-to,.calendar-prev-enter-from{opacity:0;transform:translate(calc(var(--dp-transition-length) * -1))}.calendar-prev-leave-to{opacity:0;transform:translate(var(--dp-transition-length))}.dp-menu-appear-bottom-enter-active,.dp-menu-appear-bottom-leave-active,.dp-menu-appear-top-enter-active,.dp-menu-appear-top-leave-active,.dp-slide-up-enter-active,.dp-slide-up-leave-active,.dp-slide-down-enter-active,.dp-slide-down-leave-active{transition:all var(--dp-animation-duration) var(--dp-transition-timing)}.dp-menu-appear-top-enter-from,.dp-menu-appear-top-leave-to,.dp-slide-down-leave-to,.dp-slide-up-enter-from{opacity:0;transform:translateY(var(--dp-transition-length))}.dp-menu-appear-bottom-enter-from,.dp-menu-appear-bottom-leave-to,.dp-slide-down-enter-from,.dp-slide-up-leave-to{opacity:0;transform:translateY(calc(var(--dp-transition-length) * -1))}.dp--arrow-btn-nav{transition:var(--dp-common-transition)}.dp--highlighted{background-color:var(--dp-highlight-color)}
|
package/package.json
CHANGED
package/test/api.test.ts
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { describe, test, expect, afterAll, afterEach, beforeAll } from 'vitest'
|
|
2
|
+
import { createApi } from '../src/composables/api'
|
|
3
|
+
import { setupServer } from 'msw/node'
|
|
4
|
+
import { http, HttpResponse } from 'msw'
|
|
5
|
+
|
|
6
|
+
const handlers = [
|
|
7
|
+
http.get('https://test-api/get/1', () => {
|
|
8
|
+
return HttpResponse.json({
|
|
9
|
+
data: { test: 'a' },
|
|
10
|
+
count: 0,
|
|
11
|
+
filters: ['test']
|
|
12
|
+
})
|
|
13
|
+
}),
|
|
14
|
+
http.get('https://test-api/get/2', () => {
|
|
15
|
+
return new HttpResponse('not found', {
|
|
16
|
+
status: 304
|
|
17
|
+
})
|
|
18
|
+
}),
|
|
19
|
+
http.get('https://test-api/getAll', () => {
|
|
20
|
+
return HttpResponse.json({
|
|
21
|
+
data: [{ test: 'a' }, { test: 'b' }],
|
|
22
|
+
count: 2,
|
|
23
|
+
filters: ['test', 'test two']
|
|
24
|
+
})
|
|
25
|
+
}),
|
|
26
|
+
http.post('https://test-api/post', () => {
|
|
27
|
+
return HttpResponse.json({ data: { test: 'b' } })
|
|
28
|
+
}),
|
|
29
|
+
http.patch('https://test-api/patch', () => {
|
|
30
|
+
return HttpResponse.json({ data: { test: 'c' } })
|
|
31
|
+
})
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
const server = setupServer(...handlers)
|
|
35
|
+
|
|
36
|
+
beforeAll(() => server.listen({ onUnhandledRequest: 'error' }))
|
|
37
|
+
|
|
38
|
+
afterAll(() => server.close())
|
|
39
|
+
|
|
40
|
+
afterEach(() => server.resetHandlers())
|
|
41
|
+
|
|
42
|
+
describe('default api', () => {
|
|
43
|
+
const api = createApi({
|
|
44
|
+
findPath: () => 'https://test-api/',
|
|
45
|
+
defaultThrowError: false
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
test('get', async () => {
|
|
49
|
+
const res = await api.get<any>({ additionalUrl: 'get', id: '1', nav: 'test' })
|
|
50
|
+
expect(res).not.toBeNull()
|
|
51
|
+
expect(res.data.test).toEqual('a')
|
|
52
|
+
expect(res.filters[0]).toEqual('test')
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
test('get fails', async () => {
|
|
56
|
+
const res = await api.get<any>({ additionalUrl: 'get', id: '2', nav: 'test' })
|
|
57
|
+
expect(res.status).toEqual(304)
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
test('getAll', async () => {
|
|
61
|
+
const res = await api.get<any>({ additionalUrl: 'getAll', nav: 'test' })
|
|
62
|
+
expect(res).not.toBeNull()
|
|
63
|
+
expect(res.data.length).toEqual(2)
|
|
64
|
+
expect(res.count).toEqual(2)
|
|
65
|
+
expect(res.filters[0]).toEqual('test')
|
|
66
|
+
expect(res.filters[1]).toEqual('test two')
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
test('post', async () => {
|
|
70
|
+
const res = await api.post<any>({ additionalUrl: 'post', nav: 'test', data: { data: 'a' }})
|
|
71
|
+
expect(res).not.toBeNull()
|
|
72
|
+
expect(res).toEqual({ data: { test: 'b' } })
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
test('patch', async () => {
|
|
76
|
+
const res = await api.patch<any>({ additionalUrl: 'patch', nav: 'test', data: { data: 'a' }})
|
|
77
|
+
expect(res).not.toBeNull()
|
|
78
|
+
expect(res).toEqual({ data: { test: 'c' } })
|
|
79
|
+
})
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
// describe('default api fails', () => {
|
|
83
|
+
|
|
84
|
+
// })
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { describe, expect, test } from 'vitest'
|
|
2
|
+
import { withSetup } from './utils'
|
|
3
|
+
import { useLocalDb } from '../src/composables/forage'
|
|
4
|
+
|
|
5
|
+
describe('foraging', () => {
|
|
6
|
+
const [db] = withSetup(() => useLocalDb())
|
|
7
|
+
|
|
8
|
+
test('local db exists', () => {
|
|
9
|
+
expect(db).not.toBeNull()
|
|
10
|
+
expect(db._config.name).toEqual('Db_undefined')
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
// describe('local cache', () => {
|
|
16
|
+
// const [cache] = withSetup(() => useLocalCache())
|
|
17
|
+
|
|
18
|
+
// test('save', async () => {
|
|
19
|
+
// expect(cache).not.toBeNull()
|
|
20
|
+
|
|
21
|
+
// await cache.saveAsync({ test: 'a' }, 'test-key')
|
|
22
|
+
|
|
23
|
+
// const res = await cache.getAsync('test-key')
|
|
24
|
+
|
|
25
|
+
// expect(res.test).toEqual('a')
|
|
26
|
+
|
|
27
|
+
// await cache.clearAsync()
|
|
28
|
+
|
|
29
|
+
// const none = await cache.getAsync('test-key')
|
|
30
|
+
// })
|
|
31
|
+
// })
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { nestedValue, toCompareString, hasSearch, deepSelect, containsSearch, copyItemByAlphabet, copyDeep, csvContains, toggleCSV, roundTo, isArrayOfLength, isLengthyArray, addWeekday, removeWeekday, appendUrl, getAreaAround, getAreaToLeft, getAreaToRight, getLocationLine, capitalizeWords, fromCamelCase, toCamelCase, weekdayValue, weekdayShortName, containsWeekday, validEmail } from '../src/composables/helpers'
|
|
2
|
+
import { describe, expect, test } from 'vitest'
|
|
3
|
+
|
|
4
|
+
describe("helpers", () => {
|
|
5
|
+
|
|
6
|
+
test('append url', () => {
|
|
7
|
+
expect(appendUrl('https://test.com/', '/test')).toEqual('https://test.com/test')
|
|
8
|
+
expect(appendUrl('https://test.com', 'test')).toEqual('https://test.com/test')
|
|
9
|
+
expect(appendUrl('https://test.com/', 'test')).toEqual('https://test.com/test')
|
|
10
|
+
expect(appendUrl('https://test.com', '/test')).toEqual('https://test.com/test')
|
|
11
|
+
expect(appendUrl('https://test.com///', '///test')).toEqual('https://test.com/test')
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
test('get area around', () => {
|
|
15
|
+
//starts with top left and goes anti-clockwise
|
|
16
|
+
expect(getAreaAround({ lat: 0, lng: 0 }, 1)).toEqual([{ lat: -1, lng: 1 },{ lat: -1, lng: -1 },{ lat: 1, lng: -1 },{ lat: 1, lng: 1 }])
|
|
17
|
+
expect(getAreaAround({ lat: 0, lng: 0 }, 2)).toEqual([{ lat: -2, lng: 2 },{ lat: -2, lng: -2 },{ lat: 2, lng: -2 },{ lat: 2, lng: 2 }])
|
|
18
|
+
expect(getAreaAround({ lat: 2, lng: 6 }, 1)).toEqual([{ lat: 1, lng: 7 },{ lat: 1, lng: 5 },{ lat: 3, lng: 5 },{ lat: 3, lng: 7 }])
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
test('get area to left', () => {
|
|
22
|
+
//starts with top left and goes anti-clockwise
|
|
23
|
+
expect(getAreaToLeft({ lat: 0, lng: 0 }, 1)).toEqual([{ lat: -2, lng: 1 },{ lat: -2, lng: -1 },{ lat: 0, lng: -1 },{ lat: 0, lng: 1 }])
|
|
24
|
+
expect(getAreaToLeft({ lat: 0, lng: 0 }, 2)).toEqual([{ lat: -4, lng: 2 },{ lat: -4, lng: -2 },{ lat: 0, lng: -2 },{ lat: 0, lng: 2 }])
|
|
25
|
+
})
|
|
26
|
+
|
|
27
|
+
test('get area to right', () => {
|
|
28
|
+
//starts with top left and goes anti-clockwise
|
|
29
|
+
expect(getAreaToRight({ lat: 0, lng: 0 }, 1)).toEqual([{ lat: 0, lng: 1 },{ lat: 0, lng: -1 },{ lat: 2, lng: -1 },{ lat: 2, lng: 1 }])
|
|
30
|
+
expect(getAreaToRight({ lat: 2, lng: 0 }, 2)).toEqual([{ lat: 2, lng: 2 },{ lat: 2, lng: -2 },{ lat: 6, lng: -2 },{ lat: 6, lng: 2 }])
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
test('get location line', () => {
|
|
34
|
+
expect(getLocationLine(null)).toEqual('')
|
|
35
|
+
expect(getLocationLine({ streetNumber: '9', streetName: 'Morgan St', suburb: 'Timboon', state: 'VIC', postcode: '3268' })).toEqual('9 Morgan St, Timboon VIC 3268')
|
|
36
|
+
})
|
|
37
|
+
|
|
38
|
+
test('from camel case', () => {
|
|
39
|
+
expect(fromCamelCase('testOneTwo')).toEqual('Test One Two')
|
|
40
|
+
expect(fromCamelCase('testOne Two')).toEqual('Test One Two')
|
|
41
|
+
expect(fromCamelCase('tesTOneTwo')).not.toEqual('Test One Two')
|
|
42
|
+
expect(fromCamelCase()).toBeUndefined()
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
test('to camel case', () => {
|
|
46
|
+
expect(toCamelCase(undefined)).toBeUndefined()
|
|
47
|
+
expect(toCamelCase({ Test: 't' })).not.toEqual({ Test: 't' })
|
|
48
|
+
expect(toCamelCase({ Test: 't' })).toEqual({ test: 't' })
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
test('capitalize', () => {
|
|
52
|
+
expect(capitalizeWords('test')).toEqual('Test')
|
|
53
|
+
expect(capitalizeWords('test one')).toEqual('Test One')
|
|
54
|
+
})
|
|
55
|
+
|
|
56
|
+
test('weekdays csv string sort value', () => {
|
|
57
|
+
expect(weekdayValue('sun, wed, sat')).toEqual(1)
|
|
58
|
+
expect(weekdayValue('wed, sat')).toEqual(4)
|
|
59
|
+
expect(weekdayValue('')).toEqual(8)
|
|
60
|
+
expect(weekdayValue()).toEqual(0)
|
|
61
|
+
expect(weekdayValue('sun, wed, sat, always')).toEqual(0)
|
|
62
|
+
expect(weekdayValue('Tuesday')).toEqual(3)
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
test('weekday short name conversion', () => {
|
|
66
|
+
expect(weekdayShortName('Sun, Mon, tuesday')).toEqual('sun,mon,tue')
|
|
67
|
+
expect(weekdayShortName('Sun, Mon, blah')).toEqual('sun,mon')
|
|
68
|
+
expect(weekdayShortName('Sun, Fri, Wedne')).toEqual('sun,fri')
|
|
69
|
+
expect(weekdayShortName('Sunday')).toEqual('sun')
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
test('contains weekday', () => {
|
|
73
|
+
expect(containsWeekday('sun', 'sun')).toEqual(true)
|
|
74
|
+
expect(containsWeekday('sun', 'Sunday')).toEqual(true)
|
|
75
|
+
expect(containsWeekday('sun,mon,tue, wed', 'Tuesday')).toEqual(true)
|
|
76
|
+
expect(containsWeekday('sun,mon,tuesday, wed', 'Tuesday')).toEqual(true)
|
|
77
|
+
expect(containsWeekday('sun,mon, wed', 'tue')).toEqual(false)
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
test('add weekday', () => {
|
|
81
|
+
expect(addWeekday(undefined, 'sun')).toEqual('sun')
|
|
82
|
+
expect(addWeekday(undefined, 'sun')).toEqual('sun')
|
|
83
|
+
expect(addWeekday('mon,sun', 'sun')).toEqual('sun,mon')
|
|
84
|
+
expect(addWeekday('mon,sun, always, m', 'sun')).toEqual('always,sun,mon')
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
test('remove weekday', () => {
|
|
88
|
+
expect(removeWeekday(undefined, 'sun')).toEqual(undefined)
|
|
89
|
+
expect(removeWeekday('sun', 'sun')).toEqual(undefined)
|
|
90
|
+
expect(removeWeekday('sun, thur, tue', 'sun')).toEqual('tue,thu')
|
|
91
|
+
expect(removeWeekday('always', 'sun')).toEqual('always')
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
test('is array of length', () => {
|
|
95
|
+
expect(isArrayOfLength([], 0)).toEqual(true)
|
|
96
|
+
expect(isArrayOfLength([1,1,1], 3)).toEqual(true)
|
|
97
|
+
expect(isArrayOfLength(undefined, 0)).toEqual(false)
|
|
98
|
+
expect(isArrayOfLength({}, 0)).toEqual(false)
|
|
99
|
+
})
|
|
100
|
+
|
|
101
|
+
test('is lengthy array', () => {
|
|
102
|
+
expect(isLengthyArray([])).toEqual(false)
|
|
103
|
+
expect(isLengthyArray(undefined)).toEqual(false)
|
|
104
|
+
expect(isLengthyArray([1])).toEqual(true)
|
|
105
|
+
expect(isLengthyArray([1,1])).toEqual(true)
|
|
106
|
+
expect(isLengthyArray([1,1], 1)).toEqual(true)
|
|
107
|
+
expect(isLengthyArray([1,1], 3)).toEqual(false)
|
|
108
|
+
})
|
|
109
|
+
|
|
110
|
+
test('rounding decimal places', () => {
|
|
111
|
+
expect(roundTo(1, 0)).toEqual(1)
|
|
112
|
+
expect(roundTo(1.1, 0)).toEqual(1)
|
|
113
|
+
expect(roundTo(1.6, 0)).toEqual(2)
|
|
114
|
+
expect(roundTo(2.22567, 3)).toEqual(2.226)
|
|
115
|
+
expect(roundTo(2.22547, 3)).toEqual(2.225)
|
|
116
|
+
})
|
|
117
|
+
|
|
118
|
+
test('toggle csv', () => {
|
|
119
|
+
expect(toggleCSV('one,two,three', 'two')).toEqual('one,three')
|
|
120
|
+
expect(toggleCSV('two', 'two')).toEqual(null)
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
test('csv contains', () => {
|
|
124
|
+
expect(csvContains('one,two,three', 'two')).toEqual(true)
|
|
125
|
+
expect(csvContains('one,two,three', 'three')).toEqual(true)
|
|
126
|
+
expect(csvContains('one,three', 'two')).toEqual(false)
|
|
127
|
+
expect(csvContains(undefined, 'two')).toEqual(false)
|
|
128
|
+
})
|
|
129
|
+
|
|
130
|
+
test('copy deep', () => {
|
|
131
|
+
expect(copyDeep(null)).toStrictEqual(null)
|
|
132
|
+
expect(copyDeep(undefined)).toStrictEqual(undefined)
|
|
133
|
+
|
|
134
|
+
let item = { test: { one: 'treat' } }
|
|
135
|
+
let copy = copyDeep(item)
|
|
136
|
+
item.test.one = 'other'
|
|
137
|
+
|
|
138
|
+
expect(item.test).not.toEqual(copy.test)
|
|
139
|
+
expect(item).not.toEqual(copy)
|
|
140
|
+
})
|
|
141
|
+
|
|
142
|
+
test('copy by property alphabet', () => {
|
|
143
|
+
expect(copyItemByAlphabet(null)).toStrictEqual(null)
|
|
144
|
+
expect(copyItemByAlphabet(undefined)).toStrictEqual(undefined)
|
|
145
|
+
|
|
146
|
+
let item = { test: { b: 'treat', a: 't' }, v: 'a', s: 'a', z: undefined }
|
|
147
|
+
//consistency
|
|
148
|
+
expect(JSON.stringify(copyItemByAlphabet(item))).toEqual(JSON.stringify(copyItemByAlphabet(item)))
|
|
149
|
+
expect(JSON.stringify(copyItemByAlphabet(item))).toEqual(JSON.stringify({ s: 'a', test: { a: 't', b: 'treat' }, v: 'a', z: undefined }))
|
|
150
|
+
expect(JSON.stringify(copyItemByAlphabet(item))).not.toEqual(JSON.stringify({ s: 'a', test: { b: 'treat', a: 't' }, v: 'a' }))
|
|
151
|
+
})
|
|
152
|
+
|
|
153
|
+
test('contains search', () => {
|
|
154
|
+
expect(containsSearch(undefined, undefined)).toEqual(true)
|
|
155
|
+
expect(containsSearch('a', undefined)).toEqual(true)
|
|
156
|
+
expect(containsSearch('aa', 'aa')).toEqual(true)
|
|
157
|
+
expect(containsSearch('aa', 'a')).toEqual(true)
|
|
158
|
+
expect(containsSearch('aa', 'b')).toEqual(false)
|
|
159
|
+
expect(containsSearch('Testing One Two Three', ' one')).toEqual(true)
|
|
160
|
+
expect(containsSearch('Testing One Two Three', ' one')).toEqual(false)
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
test('deep select', () => {
|
|
164
|
+
expect(deepSelect(null)).toEqual([])
|
|
165
|
+
|
|
166
|
+
let item = [
|
|
167
|
+
{ a: 'a', b: [{ a: 'd' }] },
|
|
168
|
+
{ a: 'b'},
|
|
169
|
+
{ a: 'c' }
|
|
170
|
+
]
|
|
171
|
+
|
|
172
|
+
expect(deepSelect(item, x => x.b).length).toEqual(4)
|
|
173
|
+
|
|
174
|
+
let ite = [{
|
|
175
|
+
b: [
|
|
176
|
+
{ a: 'a', b: [{ a: 'b', b: [{ a: 'c' }] }]},
|
|
177
|
+
{ a: 'd' },
|
|
178
|
+
{ a: 'e', b: [{ a: 'f' }]}
|
|
179
|
+
]
|
|
180
|
+
}]
|
|
181
|
+
|
|
182
|
+
expect(deepSelect(ite, x => x.b).length).toEqual(7)
|
|
183
|
+
|
|
184
|
+
let te = {
|
|
185
|
+
b: [
|
|
186
|
+
{ a: 'a', b: [{ a: 'b', b: [{ a: 'c' }] }]},
|
|
187
|
+
{ a: 'd' },
|
|
188
|
+
{ a: 'e', b: [{ a: 'f' }]}
|
|
189
|
+
]
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
//misses the parent
|
|
193
|
+
expect(deepSelect(te, x => x.b).length).toEqual(6)
|
|
194
|
+
})
|
|
195
|
+
|
|
196
|
+
test('has search', () => {
|
|
197
|
+
expect(hasSearch(undefined, 'test', ['a', 'b'])).toEqual(false)
|
|
198
|
+
expect(hasSearch('test', undefined, ['a', 'b'])).toEqual(true)
|
|
199
|
+
expect(hasSearch({ test: 'one two three', a: 'one' }, 'four', ['test', 'a'])).toEqual(false)
|
|
200
|
+
expect(hasSearch({ test: 'two', a: 'one' }, 'one', undefined)).toEqual(false)
|
|
201
|
+
expect(hasSearch({ test: 'one two three', a: 'one', b: 'two' }, 'three', ['a', 'b'])).toEqual(false)
|
|
202
|
+
expect(hasSearch({ test: 'one two three', a: 'one', b: 'two' }, 'three', ['a', 'b', 'test'])).toEqual(true)
|
|
203
|
+
expect(hasSearch({ test: 'one two three', a: 'one', b: 'two' }, 'one', ['b'])).toEqual(false)
|
|
204
|
+
expect(hasSearch({ test: 'one two three', a: 'one', b: 'two' }, 'one', ['a', 'b'])).toEqual(true)
|
|
205
|
+
})
|
|
206
|
+
|
|
207
|
+
test('to compare string', () => {
|
|
208
|
+
expect(toCompareString('one')).toEqual('one')
|
|
209
|
+
expect(toCompareString(undefined)).toStrictEqual(null)
|
|
210
|
+
expect(toCompareString('one two three')).toEqual('onetwothree')
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
test('nested value', () => {
|
|
214
|
+
let item = {
|
|
215
|
+
a: { b: 'b', c: { d: 'd' } },
|
|
216
|
+
b: 'str'
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
expect(nestedValue(item, 'b')).toEqual('str')
|
|
220
|
+
expect(nestedValue(item, 'a.c.d')).toEqual('d')
|
|
221
|
+
expect(nestedValue(item, 'a.b')).toEqual('b')
|
|
222
|
+
})
|
|
223
|
+
|
|
224
|
+
test('valid email', () => {
|
|
225
|
+
expect(validEmail('andrewderoon@gmail.com')).toEqual(true)
|
|
226
|
+
expect(validEmail('@gmail.com')).toEqual(false)
|
|
227
|
+
expect(validEmail('a@')).toEqual(false)
|
|
228
|
+
expect(validEmail('a@e')).toEqual(true)
|
|
229
|
+
expect(validEmail('andrewderoon.com')).toEqual(false)
|
|
230
|
+
})
|
|
231
|
+
})
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { createNavigation } from '../src/composables/navigation'
|
|
2
|
+
import { describe, expect, test } from 'vitest'
|
|
3
|
+
|
|
4
|
+
describe("navigation", () => {
|
|
5
|
+
const nav = createNavigation({
|
|
6
|
+
defaultCacheExpiryHours: 3,
|
|
7
|
+
navItems: [
|
|
8
|
+
{
|
|
9
|
+
name: 'test-nav'
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
name: 'navA',
|
|
13
|
+
background: 'b',
|
|
14
|
+
displayName: 'discs',
|
|
15
|
+
hideAppBar: true,
|
|
16
|
+
hideNavigation: true,
|
|
17
|
+
hesitate: true,
|
|
18
|
+
icon: 'mdi-plus',
|
|
19
|
+
path: '/testing/one',
|
|
20
|
+
children: [
|
|
21
|
+
{
|
|
22
|
+
name: 'navB',
|
|
23
|
+
cacheExpiryHours: 4,
|
|
24
|
+
children: [
|
|
25
|
+
{
|
|
26
|
+
archiveName: 'nav-archive',
|
|
27
|
+
aliases: ['nav-alias', 'nav-alia'],
|
|
28
|
+
name: 'navC',
|
|
29
|
+
path: '/test/alias'
|
|
30
|
+
}
|
|
31
|
+
],
|
|
32
|
+
singleName: 'navone'
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
]
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
test('find archive name', () => {
|
|
40
|
+
expect(nav.findArchiveName('navC')).toEqual('nav-archive')
|
|
41
|
+
expect(nav.findArchiveName('navB')).toEqual(undefined)
|
|
42
|
+
expect(nav.findArchiveName('navD')).toEqual(undefined)
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
test('find cache length', () => {
|
|
46
|
+
expect(nav.findCacheHours('navC')).toEqual(3)
|
|
47
|
+
expect(nav.findCacheHours('navB')).toEqual(4)
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
test('find display', () => {
|
|
51
|
+
expect(nav.findDisplay('test-nav')).toEqual(undefined)
|
|
52
|
+
expect(nav.findDisplay('navA')).toEqual('discs')
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
test('find icon', () => {
|
|
56
|
+
expect(nav.findIcon('test-nav')).toEqual(undefined)
|
|
57
|
+
expect(nav.findIcon('navA')).toEqual('mdi-plus')
|
|
58
|
+
})
|
|
59
|
+
|
|
60
|
+
test('find item', () => {
|
|
61
|
+
expect(nav.findItem('test-nav')).not.toBeNull()
|
|
62
|
+
expect(nav.findItem('test-navs')).toBeNull()
|
|
63
|
+
expect(nav.findItem('test-nav')?.name).toEqual('test-nav')
|
|
64
|
+
expect(nav.findItem('nav-alias')?.name).toEqual('navC')
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
test('find store name', () => {
|
|
68
|
+
expect(nav.findStoreName('navA')).toEqual('navA')
|
|
69
|
+
expect(nav.findStoreName('navB')).toEqual('navB')
|
|
70
|
+
expect(nav.findStoreName('test-nav')).toEqual('test-nav')
|
|
71
|
+
})
|
|
72
|
+
|
|
73
|
+
test('find path', () => {
|
|
74
|
+
expect(nav.findPath('test-nav')).toEqual('')
|
|
75
|
+
expect(nav.findPath('navA')).toEqual('/testing/one')
|
|
76
|
+
expect(nav.findPath('nav-alias')).toEqual('/test/alias')
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
test('find single display', () => {
|
|
80
|
+
expect(nav.findSingleDisplay('navA')).toEqual('disc')
|
|
81
|
+
expect(nav.findSingleDisplay('navB')).toEqual('navone')
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
test('update nav props', () => {
|
|
85
|
+
nav.updateNavigationProperties('test-nav')
|
|
86
|
+
|
|
87
|
+
expect(nav.showAppBar.value).toEqual(true)
|
|
88
|
+
expect(nav.showAppNavigation.value).toEqual(true)
|
|
89
|
+
expect(nav.backgroundName.value).toEqual(undefined)
|
|
90
|
+
expect(nav.hesitate.value).toEqual(false)
|
|
91
|
+
|
|
92
|
+
nav.updateNavigationProperties('navA')
|
|
93
|
+
|
|
94
|
+
expect(nav.showAppBar.value).toEqual(false)
|
|
95
|
+
expect(nav.showAppNavigation.value).toEqual(false)
|
|
96
|
+
expect(nav.backgroundName.value).toEqual('b')
|
|
97
|
+
expect(nav.hesitate.value).toEqual(true)
|
|
98
|
+
})
|
|
99
|
+
})
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { setActivePinia, createPinia } from 'pinia'
|
|
2
|
+
import { createSessionStore, createWholeLastUpdateStore } from '../src/composables/stores'
|
|
3
|
+
import { createApi } from '../src/composables/api'
|
|
4
|
+
import { describe, test, expect, beforeEach, afterAll, afterEach, beforeAll } from 'vitest'
|
|
5
|
+
import { setupServer } from 'msw/node'
|
|
6
|
+
import { http, HttpResponse } from 'msw'
|
|
7
|
+
import { createApp } from 'vue'
|
|
8
|
+
import { withSetup } from './utils'
|
|
9
|
+
|
|
10
|
+
const handlers = [
|
|
11
|
+
http.get('https://api/get/1', () => {
|
|
12
|
+
return HttpResponse.json({
|
|
13
|
+
data: { test: 'g' }
|
|
14
|
+
})
|
|
15
|
+
}),
|
|
16
|
+
http.get('https://api/getAll', () => {
|
|
17
|
+
return HttpResponse.json({
|
|
18
|
+
data: [{ test: 'a', id: '1' }, { test: 'b', id: '2' }],
|
|
19
|
+
count: 2,
|
|
20
|
+
filters: ['test', 'test two']
|
|
21
|
+
})
|
|
22
|
+
}),
|
|
23
|
+
http.post('https://api/post', () => {
|
|
24
|
+
return HttpResponse.json({ data: { test: 'd', id: '11' } })
|
|
25
|
+
}),
|
|
26
|
+
http.patch('https://api/patch', () => {
|
|
27
|
+
return HttpResponse.json({ data: { test: 'e', rowVersion: 2 } })
|
|
28
|
+
})
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
const server = setupServer(...handlers)
|
|
32
|
+
|
|
33
|
+
beforeAll(() => server.listen({ onUnhandledRequest: 'error' }))
|
|
34
|
+
|
|
35
|
+
afterAll(() => server.close())
|
|
36
|
+
|
|
37
|
+
afterEach(() => {
|
|
38
|
+
server.resetHandlers()
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
describe('use last update store no api no caching', () => {
|
|
42
|
+
const [api, app] = withSetup(() => createApi({
|
|
43
|
+
findPath: () => 'https://api/',
|
|
44
|
+
defaultThrowError: false
|
|
45
|
+
}))
|
|
46
|
+
|
|
47
|
+
const pinia = createPinia()
|
|
48
|
+
app.use(pinia)
|
|
49
|
+
|
|
50
|
+
setActivePinia(pinia)
|
|
51
|
+
|
|
52
|
+
const store = createWholeLastUpdateStore({
|
|
53
|
+
api: null,
|
|
54
|
+
storageMode: 'session',
|
|
55
|
+
storeName: 'whole'
|
|
56
|
+
})()
|
|
57
|
+
|
|
58
|
+
test('all session activity', async () => {
|
|
59
|
+
|
|
60
|
+
await store.post<any>({ data: { id: '1', test: 'a' }})
|
|
61
|
+
await store.post<any>({ data: { id: '2', test: 'b' }})
|
|
62
|
+
await store.post<any>({ data: { id: '3', test: 'c' }})
|
|
63
|
+
|
|
64
|
+
let postRes = await store.get<any>({ id: '1' })
|
|
65
|
+
expect(postRes.data).toEqual({ id: '1', test: 'a' })
|
|
66
|
+
|
|
67
|
+
await store.patch<any>({ data: { id: '1', test: 'd' }})
|
|
68
|
+
postRes = await store.get<any>({ id: '1' })
|
|
69
|
+
expect(postRes.data).toEqual({ id: '1', test: 'd' })
|
|
70
|
+
|
|
71
|
+
let getAll = await store.getAll<any>({})
|
|
72
|
+
expect(getAll.data.length).toEqual(3)
|
|
73
|
+
expect(getAll.count).toEqual(3)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
await store.deleteItem({ data: { id: '1' }})
|
|
77
|
+
postRes = await store.get<any>({ id: '1' })
|
|
78
|
+
expect(postRes.data).toEqual(undefined)
|
|
79
|
+
|
|
80
|
+
getAll = await store.getAll<any>({})
|
|
81
|
+
expect(getAll.data.length).toEqual(2)
|
|
82
|
+
expect(getAll.count).toEqual(2)
|
|
83
|
+
})
|
|
84
|
+
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
describe('use last update store with api no caching', () => {
|
|
89
|
+
const [api, app] = withSetup(() => createApi({
|
|
90
|
+
findPath: () => 'https://api/',
|
|
91
|
+
defaultThrowError: false
|
|
92
|
+
}))
|
|
93
|
+
|
|
94
|
+
const pinia = createPinia()
|
|
95
|
+
app.use(pinia)
|
|
96
|
+
setActivePinia(pinia)
|
|
97
|
+
|
|
98
|
+
const store = createWholeLastUpdateStore({
|
|
99
|
+
storageMode: 'session',
|
|
100
|
+
api: api,
|
|
101
|
+
storeName: 'whole-api'
|
|
102
|
+
})()
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
test('get', async () => {
|
|
106
|
+
const res = await store.get<any>({ id: '1' })
|
|
107
|
+
expect(res.data).toEqual({ test: 'a', id: '1' })
|
|
108
|
+
let getAll = await store.getAll<any>({})
|
|
109
|
+
expect(getAll.data.length).toEqual(2)
|
|
110
|
+
expect(getAll.count).toEqual(2)
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
test('get all', async () => {
|
|
115
|
+
const res = await store.getAll<any>({})
|
|
116
|
+
expect(res).toEqual({
|
|
117
|
+
data: [{test: 'a', id: '1' },{test: 'b', id: '2' }],
|
|
118
|
+
count: 2,
|
|
119
|
+
filters: []
|
|
120
|
+
})
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
test('post', async () => {
|
|
124
|
+
const res = await store.post<any>({ data: { test: 'a', id: '11' }})
|
|
125
|
+
expect(res).not.toBeNull()
|
|
126
|
+
|
|
127
|
+
//gets api post return
|
|
128
|
+
let getRes = await store.get<any>({ id: '11' })
|
|
129
|
+
expect(getRes.data).toEqual({ test: 'd', id: '11' })
|
|
130
|
+
})
|
|
131
|
+
|
|
132
|
+
test('patch', async () => {
|
|
133
|
+
const res = await store.patch<any>({ data: { test: 'a', id: '1', rowVersion: 1 }})
|
|
134
|
+
let getRes = await store.get<any>({ id: '1' })
|
|
135
|
+
expect(getRes.data.rowVersion).toEqual(2)
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
})
|