@zeedhi/common 3.0.5 → 3.0.6
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/dist/types/components/zd-date-input/date-input.d.ts +1 -1
- package/dist/types/components/zd-date-range/date-range.d.ts +3 -1
- package/dist/types/components/zd-iterable/iterable.d.ts +9 -0
- package/dist/types/utils/date-utils/date-utils.d.ts +1 -0
- package/dist/zd-common.js +75 -24
- package/dist/zd-common.min.js +75 -24
- package/environments.json +6 -0
- package/jest.config.cjs +1 -0
- package/package.json +6 -3
- package/src/components/zd-date-input/date-input.ts +9 -21
- package/src/components/zd-date-range/date-range.ts +27 -4
- package/src/components/zd-iterable/iterable.ts +41 -3
- package/src/utils/date-utils/date-utils.ts +18 -0
- package/tests/unit/components/zd-component/component.spec.ts +3 -2
- package/tests/unit/components/zd-date-range/date-range.spec.ts +189 -23
- package/tests/unit/components/zd-grid/grid.spec.ts +48 -35
- package/tests/unit/components/zd-grid-editable/data-editor.spec.ts +1 -1
- package/tests/unit/components/zd-grid-editable/grid-editable.spec.ts +1 -1
- package/tests/unit/components/zd-iterable/column.spec.ts +42 -0
- package/tests/unit/utils/mock-console.ts +18 -0
- package/.package.json +0 -45
- package/coverage/clover.xml +0 -5741
- package/coverage/coverage-final.json +0 -144
- package/coverage/lcov-report/base.css +0 -224
- package/coverage/lcov-report/block-navigation.js +0 -87
- package/coverage/lcov-report/favicon.png +0 -0
- package/coverage/lcov-report/index.html +0 -1316
- package/coverage/lcov-report/prettify.css +0 -1
- package/coverage/lcov-report/prettify.js +0 -2
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +0 -210
- package/coverage/lcov-report/src/components/index.html +0 -116
- package/coverage/lcov-report/src/components/index.ts.html +0 -730
- package/coverage/lcov-report/src/components/zd-alert/alert.ts.html +0 -502
- package/coverage/lcov-report/src/components/zd-alert/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-badge/badge.ts.html +0 -226
- package/coverage/lcov-report/src/components/zd-badge/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-breadcrumbs/breadcrumbs.ts.html +0 -226
- package/coverage/lcov-report/src/components/zd-breadcrumbs/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-button/button.ts.html +0 -706
- package/coverage/lcov-report/src/components/zd-button/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-button-group/button-group.ts.html +0 -412
- package/coverage/lcov-report/src/components/zd-button-group/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-card/card.ts.html +0 -748
- package/coverage/lcov-report/src/components/zd-card/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-carousel/carousel.ts.html +0 -949
- package/coverage/lcov-report/src/components/zd-carousel/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-checkbox/checkbox.ts.html +0 -148
- package/coverage/lcov-report/src/components/zd-checkbox/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-checkbox-multiple/checkbox-multiple.ts.html +0 -313
- package/coverage/lcov-report/src/components/zd-checkbox-multiple/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-chip/chip.ts.html +0 -352
- package/coverage/lcov-report/src/components/zd-chip/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-code-viewer/code-viewer.ts.html +0 -682
- package/coverage/lcov-report/src/components/zd-code-viewer/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-col/col.ts.html +0 -250
- package/coverage/lcov-report/src/components/zd-col/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-collapse-card/collapse-card.ts.html +0 -343
- package/coverage/lcov-report/src/components/zd-collapse-card/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-component/child-not-found.ts.html +0 -109
- package/coverage/lcov-report/src/components/zd-component/component-render.ts.html +0 -160
- package/coverage/lcov-report/src/components/zd-component/component.ts.html +0 -1084
- package/coverage/lcov-report/src/components/zd-component/index.html +0 -146
- package/coverage/lcov-report/src/components/zd-container/container.ts.html +0 -289
- package/coverage/lcov-report/src/components/zd-container/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-currency/currency.ts.html +0 -259
- package/coverage/lcov-report/src/components/zd-currency/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-date-input/date-input.ts.html +0 -1798
- package/coverage/lcov-report/src/components/zd-date-input/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-date-range/date-range.ts.html +0 -2167
- package/coverage/lcov-report/src/components/zd-date-range/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-dialog/dialog.ts.html +0 -541
- package/coverage/lcov-report/src/components/zd-dialog/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-divider/divider.ts.html +0 -178
- package/coverage/lcov-report/src/components/zd-divider/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-dropdown/dropdown.ts.html +0 -460
- package/coverage/lcov-report/src/components/zd-dropdown/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-footer/footer.ts.html +0 -451
- package/coverage/lcov-report/src/components/zd-footer/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-form/form.ts.html +0 -1075
- package/coverage/lcov-report/src/components/zd-form/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-frame/frame.ts.html +0 -763
- package/coverage/lcov-report/src/components/zd-frame/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-frame-page/frame-page.ts.html +0 -169
- package/coverage/lcov-report/src/components/zd-frame-page/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-grid/data-navigator.ts.html +0 -304
- package/coverage/lcov-report/src/components/zd-grid/data-selector.ts.html +0 -532
- package/coverage/lcov-report/src/components/zd-grid/grid-column.ts.html +0 -709
- package/coverage/lcov-report/src/components/zd-grid/grid-events.ts.html +0 -244
- package/coverage/lcov-report/src/components/zd-grid/grid.ts.html +0 -1042
- package/coverage/lcov-report/src/components/zd-grid/index.html +0 -266
- package/coverage/lcov-report/src/components/zd-grid/index.ts.html +0 -118
- package/coverage/lcov-report/src/components/zd-grid/iterable-table.ts.html +0 -274
- package/coverage/lcov-report/src/components/zd-grid/keymap-merger.ts.html +0 -241
- package/coverage/lcov-report/src/components/zd-grid/keymap-navigation.ts.html +0 -313
- package/coverage/lcov-report/src/components/zd-grid/table-action-builder.ts.html +0 -427
- package/coverage/lcov-report/src/components/zd-grid/view-navigator.ts.html +0 -175
- package/coverage/lcov-report/src/components/zd-grid-editable/data-editor-with-add.ts.html +0 -826
- package/coverage/lcov-report/src/components/zd-grid-editable/data-editor.ts.html +0 -1570
- package/coverage/lcov-report/src/components/zd-grid-editable/errors/index.html +0 -146
- package/coverage/lcov-report/src/components/zd-grid-editable/errors/index.ts.html +0 -91
- package/coverage/lcov-report/src/components/zd-grid-editable/errors/not-editing.ts.html +0 -109
- package/coverage/lcov-report/src/components/zd-grid-editable/errors/row-not-found.ts.html +0 -109
- package/coverage/lcov-report/src/components/zd-grid-editable/grid-column-editable.ts.html +0 -130
- package/coverage/lcov-report/src/components/zd-grid-editable/grid-editable-controller.ts.html +0 -139
- package/coverage/lcov-report/src/components/zd-grid-editable/grid-editable-events.ts.html +0 -430
- package/coverage/lcov-report/src/components/zd-grid-editable/grid-editable.ts.html +0 -1477
- package/coverage/lcov-report/src/components/zd-grid-editable/index.html +0 -221
- package/coverage/lcov-report/src/components/zd-grid-editable/index.ts.html +0 -109
- package/coverage/lcov-report/src/components/zd-grid-editable/keymap-editing.ts.html +0 -139
- package/coverage/lcov-report/src/components/zd-header/header.ts.html +0 -502
- package/coverage/lcov-report/src/components/zd-header/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-icon/icon.ts.html +0 -325
- package/coverage/lcov-report/src/components/zd-icon/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-image/image.ts.html +0 -424
- package/coverage/lcov-report/src/components/zd-image/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-increment/increment.ts.html +0 -436
- package/coverage/lcov-report/src/components/zd-increment/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-input/index.html +0 -131
- package/coverage/lcov-report/src/components/zd-input/input-factory.ts.html +0 -130
- package/coverage/lcov-report/src/components/zd-input/input.ts.html +0 -1345
- package/coverage/lcov-report/src/components/zd-iterable/column-not-found.ts.html +0 -109
- package/coverage/lcov-report/src/components/zd-iterable/column.ts.html +0 -823
- package/coverage/lcov-report/src/components/zd-iterable/conditions-manager.ts.html +0 -523
- package/coverage/lcov-report/src/components/zd-iterable/index.html +0 -281
- package/coverage/lcov-report/src/components/zd-iterable/iterable-columns-button-controller.ts.html +0 -136
- package/coverage/lcov-report/src/components/zd-iterable/iterable-columns-button.ts.html +0 -313
- package/coverage/lcov-report/src/components/zd-iterable/iterable-controller.ts.html +0 -166
- package/coverage/lcov-report/src/components/zd-iterable/iterable-page-component.ts.html +0 -244
- package/coverage/lcov-report/src/components/zd-iterable/iterable-page-info.ts.html +0 -106
- package/coverage/lcov-report/src/components/zd-iterable/iterable-page-size.ts.html +0 -421
- package/coverage/lcov-report/src/components/zd-iterable/iterable-pagination.ts.html +0 -208
- package/coverage/lcov-report/src/components/zd-iterable/iterable.ts.html +0 -820
- package/coverage/lcov-report/src/components/zd-iterable/search.ts.html +0 -343
- package/coverage/lcov-report/src/components/zd-iterable-component-render/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-iterable-component-render/iterable-component-render.ts.html +0 -592
- package/coverage/lcov-report/src/components/zd-layout/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-layout/layout.ts.html +0 -145
- package/coverage/lcov-report/src/components/zd-list/index.html +0 -161
- package/coverage/lcov-report/src/components/zd-list/item-not-found.ts.html +0 -109
- package/coverage/lcov-report/src/components/zd-list/list-group.ts.html +0 -241
- package/coverage/lcov-report/src/components/zd-list/list-item.ts.html +0 -298
- package/coverage/lcov-report/src/components/zd-list/list.ts.html +0 -460
- package/coverage/lcov-report/src/components/zd-loading/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-loading/loading.ts.html +0 -217
- package/coverage/lcov-report/src/components/zd-login/index.html +0 -131
- package/coverage/lcov-report/src/components/zd-login/login-button.ts.html +0 -421
- package/coverage/lcov-report/src/components/zd-login/login.ts.html +0 -340
- package/coverage/lcov-report/src/components/zd-main/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-main/main.ts.html +0 -133
- package/coverage/lcov-report/src/components/zd-master-detail/detail-not-found.ts.html +0 -118
- package/coverage/lcov-report/src/components/zd-master-detail/index.html +0 -146
- package/coverage/lcov-report/src/components/zd-master-detail/master-detail.ts.html +0 -331
- package/coverage/lcov-report/src/components/zd-master-detail/master-not-found.ts.html +0 -118
- package/coverage/lcov-report/src/components/zd-menu/index.html +0 -176
- package/coverage/lcov-report/src/components/zd-menu/menu-button.ts.html +0 -241
- package/coverage/lcov-report/src/components/zd-menu/menu-group.ts.html +0 -400
- package/coverage/lcov-report/src/components/zd-menu/menu-link.ts.html +0 -337
- package/coverage/lcov-report/src/components/zd-menu/menu-separator.ts.html +0 -106
- package/coverage/lcov-report/src/components/zd-menu/menu.ts.html +0 -1384
- package/coverage/lcov-report/src/components/zd-modal/index.html +0 -131
- package/coverage/lcov-report/src/components/zd-modal/modal-close-button.ts.html +0 -220
- package/coverage/lcov-report/src/components/zd-modal/modal.ts.html +0 -355
- package/coverage/lcov-report/src/components/zd-month/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-month/month.ts.html +0 -568
- package/coverage/lcov-report/src/components/zd-number-input/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-number-input/number-input.ts.html +0 -532
- package/coverage/lcov-report/src/components/zd-password/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-password/password.ts.html +0 -220
- package/coverage/lcov-report/src/components/zd-progress/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-progress/progress.ts.html +0 -262
- package/coverage/lcov-report/src/components/zd-radio/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-radio/radio.ts.html +0 -289
- package/coverage/lcov-report/src/components/zd-row/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-row/row.ts.html +0 -256
- package/coverage/lcov-report/src/components/zd-select/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-select/select.ts.html +0 -2089
- package/coverage/lcov-report/src/components/zd-select-multiple/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-select-multiple/select-multiple.ts.html +0 -1549
- package/coverage/lcov-report/src/components/zd-svg-map/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-svg-map/svg-map.ts.html +0 -475
- package/coverage/lcov-report/src/components/zd-switch/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-switch/switch.ts.html +0 -163
- package/coverage/lcov-report/src/components/zd-table/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-table/table.ts.html +0 -280
- package/coverage/lcov-report/src/components/zd-tabs/index.html +0 -146
- package/coverage/lcov-report/src/components/zd-tabs/tab-not-found.ts.html +0 -127
- package/coverage/lcov-report/src/components/zd-tabs/tab.ts.html +0 -370
- package/coverage/lcov-report/src/components/zd-tabs/tabs.ts.html +0 -586
- package/coverage/lcov-report/src/components/zd-tag/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-tag/tag.ts.html +0 -142
- package/coverage/lcov-report/src/components/zd-text/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-text/text.ts.html +0 -136
- package/coverage/lcov-report/src/components/zd-text-input/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-text-input/text-input.ts.html +0 -778
- package/coverage/lcov-report/src/components/zd-textarea/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-textarea/textarea.ts.html +0 -418
- package/coverage/lcov-report/src/components/zd-time/index.html +0 -131
- package/coverage/lcov-report/src/components/zd-time/time-format-selector.ts.html +0 -157
- package/coverage/lcov-report/src/components/zd-time/time.ts.html +0 -1687
- package/coverage/lcov-report/src/components/zd-toggleable/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-toggleable/toggleable.ts.html +0 -196
- package/coverage/lcov-report/src/components/zd-tooltip/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-tooltip/tooltip.ts.html +0 -340
- package/coverage/lcov-report/src/components/zd-tree/index.html +0 -116
- package/coverage/lcov-report/src/components/zd-tree/tree.ts.html +0 -1849
- package/coverage/lcov-report/src/components/zd-tree-grid/index.html +0 -191
- package/coverage/lcov-report/src/components/zd-tree-grid/index.ts.html +0 -103
- package/coverage/lcov-report/src/components/zd-tree-grid/iterable-tree.ts.html +0 -202
- package/coverage/lcov-report/src/components/zd-tree-grid/keymap-tree.ts.html +0 -154
- package/coverage/lcov-report/src/components/zd-tree-grid/tree-data-navigator.ts.html +0 -235
- package/coverage/lcov-report/src/components/zd-tree-grid/tree-data-selector.ts.html +0 -448
- package/coverage/lcov-report/src/components/zd-tree-grid/tree-grid.ts.html +0 -1390
- package/coverage/lcov-report/src/error/delete-rows.ts.html +0 -124
- package/coverage/lcov-report/src/error/index.html +0 -161
- package/coverage/lcov-report/src/error/index.ts.html +0 -94
- package/coverage/lcov-report/src/error/non-initialized.ts.html +0 -118
- package/coverage/lcov-report/src/error/zeedhi-error.ts.html +0 -109
- package/coverage/lcov-report/src/index.html +0 -116
- package/coverage/lcov-report/src/index.ts.html +0 -145
- package/coverage/lcov-report/src/services/index.html +0 -116
- package/coverage/lcov-report/src/services/index.ts.html +0 -97
- package/coverage/lcov-report/src/services/zd-alert/alert-queue.ts.html +0 -205
- package/coverage/lcov-report/src/services/zd-alert/alert-replace.ts.html +0 -220
- package/coverage/lcov-report/src/services/zd-alert/alert-service.ts.html +0 -316
- package/coverage/lcov-report/src/services/zd-alert/alert-stack.ts.html +0 -172
- package/coverage/lcov-report/src/services/zd-alert/index.html +0 -176
- package/coverage/lcov-report/src/services/zd-alert/index.ts.html +0 -100
- package/coverage/lcov-report/src/services/zd-dialog/dialog-service.ts.html +0 -205
- package/coverage/lcov-report/src/services/zd-dialog/index.html +0 -116
- package/coverage/lcov-report/src/services/zd-loading/index.html +0 -116
- package/coverage/lcov-report/src/services/zd-loading/loading-service.ts.html +0 -157
- package/coverage/lcov-report/src/services/zd-modal/index.html +0 -116
- package/coverage/lcov-report/src/services/zd-modal/modal-service.ts.html +0 -298
- package/coverage/lcov-report/src/utils/data-value-out/data-value-out.ts.html +0 -202
- package/coverage/lcov-report/src/utils/data-value-out/index.html +0 -131
- package/coverage/lcov-report/src/utils/data-value-out/index.ts.html +0 -91
- package/coverage/lcov-report/src/utils/datasource-searcher/datasource-searcher.ts.html +0 -241
- package/coverage/lcov-report/src/utils/datasource-searcher/index.html +0 -131
- package/coverage/lcov-report/src/utils/datasource-searcher/index.ts.html +0 -91
- package/coverage/lcov-report/src/utils/icons/icons.ts.html +0 -547
- package/coverage/lcov-report/src/utils/icons/index.html +0 -116
- package/coverage/lcov-report/src/utils/index.html +0 -116
- package/coverage/lcov-report/src/utils/index.ts.html +0 -106
- package/coverage/lcov-report/src/utils/omit/index.html +0 -116
- package/coverage/lcov-report/src/utils/omit/omit.ts.html +0 -124
- package/coverage/lcov-report/src/utils/theme/index.html +0 -116
- package/coverage/lcov-report/src/utils/theme/theme.ts.html +0 -679
- package/coverage/lcov-report/src/utils/tree-data-structure/index.html +0 -131
- package/coverage/lcov-report/src/utils/tree-data-structure/index.ts.html +0 -91
- package/coverage/lcov-report/src/utils/tree-data-structure/tree-data-structure.ts.html +0 -1645
- package/coverage/lcov-report/src/utils/unique-by/index.html +0 -116
- package/coverage/lcov-report/src/utils/unique-by/unique-by.ts.html +0 -130
- package/coverage/lcov-report/tests/unit/components/zd-component/ComponentMock.ts.html +0 -166
- package/coverage/lcov-report/tests/unit/components/zd-component/index.html +0 -116
- package/coverage/lcov.info +0 -10206
- package/tests/unit/utils/is-filled-object.spec.ts +0 -33
|
@@ -113,7 +113,7 @@ export declare class DateInput extends TextInput implements IDateInput {
|
|
|
113
113
|
dateValidation(): boolean | string;
|
|
114
114
|
click(event?: Event, element?: any): void;
|
|
115
115
|
blur(event: Event, element: any): void;
|
|
116
|
-
onMounted(): void;
|
|
116
|
+
onMounted(element: any): void;
|
|
117
117
|
focus(event: Event, element: any): void;
|
|
118
118
|
/**
|
|
119
119
|
* Add date mask
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { IDateRange } from './interfaces';
|
|
2
2
|
import { TextInput } from '../zd-text-input/text-input';
|
|
3
3
|
export declare class DateRange extends TextInput implements IDateRange {
|
|
4
|
+
allowedDates?: string[] | ((date: string) => boolean);
|
|
4
5
|
/**
|
|
5
6
|
* Input auto complete.
|
|
6
7
|
*/
|
|
@@ -151,8 +152,9 @@ export declare class DateRange extends TextInput implements IDateRange {
|
|
|
151
152
|
updateHelperHint(helperValue: string): void;
|
|
152
153
|
change(event?: Event, element?: any): void;
|
|
153
154
|
private getExtremities;
|
|
154
|
-
setNativeDate(
|
|
155
|
+
setNativeDate(dates: Date[]): void;
|
|
155
156
|
private dateObject;
|
|
156
157
|
getNativeDate(): Date[];
|
|
158
|
+
getAllowedDates(date: Date): boolean;
|
|
157
159
|
getMaskValue(): any;
|
|
158
160
|
}
|
|
@@ -73,5 +73,14 @@ export declare abstract class Iterable<T extends Column = Column> extends Compon
|
|
|
73
73
|
delete(row: IDictionary): Promise<any>;
|
|
74
74
|
getData(): IDictionary[];
|
|
75
75
|
protected changeDefaultSlotNames(slot: IComponentRender[]): any;
|
|
76
|
+
/**
|
|
77
|
+
* Recursively replaces a pattern in all string values within an object/array tree
|
|
78
|
+
* @param obj The object or array to process
|
|
79
|
+
* @param pattern The regex pattern to search for
|
|
80
|
+
* @param replacement The replacement string
|
|
81
|
+
* @returns A new object/array with replaced values
|
|
82
|
+
*/
|
|
83
|
+
private recursiveReplace;
|
|
84
|
+
private isObject;
|
|
76
85
|
findRow(key: string | number): IDictionary<any> | undefined;
|
|
77
86
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function isDateAllowed(date: Date, dateFormat: string, allowedDates?: ((date: string) => boolean) | string[]): boolean;
|
package/dist/zd-common.js
CHANGED
|
@@ -2287,6 +2287,18 @@ FormatterParserProvider.registerParser('ZdTextInput', (value, { valueWithPrefix
|
|
|
2287
2287
|
});
|
|
2288
2288
|
InputFactory.register('ZdTextInput', TextInput);
|
|
2289
2289
|
|
|
2290
|
+
function isDateAllowed(date, dateFormat, allowedDates) {
|
|
2291
|
+
if (!allowedDates)
|
|
2292
|
+
return true;
|
|
2293
|
+
if (allowedDates.length === 0)
|
|
2294
|
+
return false;
|
|
2295
|
+
const dateString = dayjs(date).format(dateFormat);
|
|
2296
|
+
if (allowedDates instanceof Function) {
|
|
2297
|
+
return allowedDates(dateString);
|
|
2298
|
+
}
|
|
2299
|
+
return allowedDates.indexOf(dateString) !== -1;
|
|
2300
|
+
}
|
|
2301
|
+
|
|
2290
2302
|
/**
|
|
2291
2303
|
* Base class for Date component.
|
|
2292
2304
|
*/
|
|
@@ -2426,6 +2438,9 @@ class DateInput extends TextInput {
|
|
|
2426
2438
|
if (this.isValidFormatDate(value, this.dateFormat)) {
|
|
2427
2439
|
this.dateObject = dayjs(value, this.dateFormat);
|
|
2428
2440
|
}
|
|
2441
|
+
else {
|
|
2442
|
+
this.dateObject = null;
|
|
2443
|
+
}
|
|
2429
2444
|
}
|
|
2430
2445
|
get displayValue() {
|
|
2431
2446
|
return this.internalDisplayValue;
|
|
@@ -2495,13 +2510,8 @@ class DateInput extends TextInput {
|
|
|
2495
2510
|
const isValidMax = !maxDate || date.isBefore(maxDate) || date.isSame(maxDate);
|
|
2496
2511
|
if (!isValidMax)
|
|
2497
2512
|
return false;
|
|
2498
|
-
const isAllowedDate = this.
|
|
2499
|
-
|
|
2500
|
-
(Array.isArray(this.allowedDates) &&
|
|
2501
|
-
this.allowedDates.indexOf(dayjs(value, format).format(this.dateFormat)) !== -1);
|
|
2502
|
-
if (!isAllowedDate)
|
|
2503
|
-
return false;
|
|
2504
|
-
return true;
|
|
2513
|
+
const isAllowedDate = this.getAllowedDates(dayjs(value, format).toDate());
|
|
2514
|
+
return isAllowedDate;
|
|
2505
2515
|
}
|
|
2506
2516
|
isValidFormatDate(value, format, strict = true) {
|
|
2507
2517
|
return dayjs(value, format, strict).isValid();
|
|
@@ -2516,16 +2526,7 @@ class DateInput extends TextInput {
|
|
|
2516
2526
|
this.value = this.dateObject.format(this.dateFormat);
|
|
2517
2527
|
}
|
|
2518
2528
|
getAllowedDates(date) {
|
|
2519
|
-
|
|
2520
|
-
return true;
|
|
2521
|
-
if (this.allowedDates.length === 0)
|
|
2522
|
-
return false;
|
|
2523
|
-
const dayjsDate = dayjs(date);
|
|
2524
|
-
const dateString = dayjsDate.format(this.dateFormat);
|
|
2525
|
-
if (this.allowedDates instanceof Function) {
|
|
2526
|
-
return this.allowedDates(dateString);
|
|
2527
|
-
}
|
|
2528
|
-
return this.allowedDates.indexOf(dateString) !== -1;
|
|
2529
|
+
return isDateAllowed(date, this.dateFormat, this.allowedDates);
|
|
2529
2530
|
}
|
|
2530
2531
|
formatISODateValue(value) {
|
|
2531
2532
|
if (value && this.isValidFormatDate(value, this.dateFormat)) {
|
|
@@ -2557,7 +2558,8 @@ class DateInput extends TextInput {
|
|
|
2557
2558
|
this.showDatePicker = false;
|
|
2558
2559
|
}
|
|
2559
2560
|
}
|
|
2560
|
-
onMounted() {
|
|
2561
|
+
onMounted(element) {
|
|
2562
|
+
super.onMounted(element);
|
|
2561
2563
|
if (!this.value)
|
|
2562
2564
|
return;
|
|
2563
2565
|
this.setDateValue(this.formatter(this.value));
|
|
@@ -3573,9 +3575,41 @@ class Iterable extends ComponentRender {
|
|
|
3573
3575
|
return this.datasource.data;
|
|
3574
3576
|
}
|
|
3575
3577
|
changeDefaultSlotNames(slot) {
|
|
3576
|
-
|
|
3577
|
-
|
|
3578
|
-
|
|
3578
|
+
return this.recursiveReplace(slot, /<<NAME>>/g, this.name);
|
|
3579
|
+
}
|
|
3580
|
+
/**
|
|
3581
|
+
* Recursively replaces a pattern in all string values within an object/array tree
|
|
3582
|
+
* @param obj The object or array to process
|
|
3583
|
+
* @param pattern The regex pattern to search for
|
|
3584
|
+
* @param replacement The replacement string
|
|
3585
|
+
* @returns A new object/array with replaced values
|
|
3586
|
+
*/
|
|
3587
|
+
recursiveReplace(obj, pattern, replacement) {
|
|
3588
|
+
// Handle null or undefined
|
|
3589
|
+
if (obj === null || obj === undefined) {
|
|
3590
|
+
return obj;
|
|
3591
|
+
}
|
|
3592
|
+
// Handle string values - perform replacement
|
|
3593
|
+
if (typeof obj === 'string') {
|
|
3594
|
+
return obj.replace(pattern, replacement);
|
|
3595
|
+
}
|
|
3596
|
+
// Handle arrays - recursively process each element
|
|
3597
|
+
if (Array.isArray(obj)) {
|
|
3598
|
+
return obj.map((item) => this.recursiveReplace(item, pattern, replacement));
|
|
3599
|
+
}
|
|
3600
|
+
// Handle objects - recursively process each property value
|
|
3601
|
+
if (this.isObject(obj)) {
|
|
3602
|
+
const newObj = {};
|
|
3603
|
+
for (const key in obj) {
|
|
3604
|
+
newObj[key] = this.recursiveReplace(obj[key], pattern, replacement);
|
|
3605
|
+
}
|
|
3606
|
+
return newObj;
|
|
3607
|
+
}
|
|
3608
|
+
// For all other types (functions, numbers, booleans, etc.), return as-is
|
|
3609
|
+
return obj;
|
|
3610
|
+
}
|
|
3611
|
+
isObject(value) {
|
|
3612
|
+
return typeof value === 'object';
|
|
3579
3613
|
}
|
|
3580
3614
|
findRow(key) {
|
|
3581
3615
|
return this.getData().find((row) => this.getRowKey(row) === key);
|
|
@@ -12561,6 +12595,7 @@ FormatterParserProvider.registerParser('ZdTime', (value, { displayFormat = Confi
|
|
|
12561
12595
|
InputFactory.register('ZdTime', Time);
|
|
12562
12596
|
|
|
12563
12597
|
class DateRange extends TextInput {
|
|
12598
|
+
allowedDates;
|
|
12564
12599
|
/**
|
|
12565
12600
|
* Input auto complete.
|
|
12566
12601
|
*/
|
|
@@ -12664,6 +12699,7 @@ class DateRange extends TextInput {
|
|
|
12664
12699
|
else {
|
|
12665
12700
|
this.appendIcon = this.getInitValue('appendIcon', props.appendIcon, 'calendar');
|
|
12666
12701
|
}
|
|
12702
|
+
this.allowedDates = this.getInitValue('allowedDates', props.allowedDates, this.allowedDates);
|
|
12667
12703
|
this.autocomplete = this.getInitValue('autocomplete', props.autocomplete, this.autocomplete);
|
|
12668
12704
|
this.dateFormat = this.getInitValue('dateFormat', props.dateFormat, this.dateFormat);
|
|
12669
12705
|
this.dateValidation = this.dateValidation.bind(this);
|
|
@@ -12741,7 +12777,6 @@ class DateRange extends TextInput {
|
|
|
12741
12777
|
this.internalValue = value;
|
|
12742
12778
|
const [startDate, endDate] = value;
|
|
12743
12779
|
const isStartValid = this.isValidFormatDate(startDate, this.dateFormat);
|
|
12744
|
-
// if end date is not defined, no need to validate it
|
|
12745
12780
|
const isEndValid = !endDate || this.isValidFormatDate(endDate, this.dateFormat);
|
|
12746
12781
|
const areDatesValid = isStartValid && isEndValid;
|
|
12747
12782
|
if (areDatesValid) {
|
|
@@ -12842,6 +12877,9 @@ class DateRange extends TextInput {
|
|
|
12842
12877
|
const isValidMax = !maxDate || date.isBefore(maxDate) || date.isSame(maxDate);
|
|
12843
12878
|
if (!isValidMax)
|
|
12844
12879
|
return false;
|
|
12880
|
+
if (!this.getAllowedDates(dayjs(value, format).toDate())) {
|
|
12881
|
+
return false;
|
|
12882
|
+
}
|
|
12845
12883
|
return true;
|
|
12846
12884
|
}
|
|
12847
12885
|
isValidFormatDate(value, format, strict = true) {
|
|
@@ -12998,9 +13036,19 @@ class DateRange extends TextInput {
|
|
|
12998
13036
|
return [arr[0]];
|
|
12999
13037
|
return [arr[0], arr[arr.length - 1]];
|
|
13000
13038
|
}
|
|
13001
|
-
setNativeDate(
|
|
13039
|
+
setNativeDate(dates) {
|
|
13002
13040
|
this.dateError = false;
|
|
13003
|
-
|
|
13041
|
+
const dayjsDates = (dates || []).map((d) => dayjs(d));
|
|
13042
|
+
const [start, end] = this.getExtremities(dayjsDates);
|
|
13043
|
+
if (start && end) {
|
|
13044
|
+
for (let d = start; d.isBefore(end) || d.isSame(end); d = d.add(1, 'day')) {
|
|
13045
|
+
if (!this.getAllowedDates(d.toDate())) {
|
|
13046
|
+
this.dateError = true;
|
|
13047
|
+
return;
|
|
13048
|
+
}
|
|
13049
|
+
}
|
|
13050
|
+
}
|
|
13051
|
+
this.dateObject = (dates || []).map((obj) => dayjs(obj));
|
|
13004
13052
|
const extremityDates = this.getExtremities(this.dateObject);
|
|
13005
13053
|
this.value = extremityDates
|
|
13006
13054
|
.filter((obj) => obj !== null)
|
|
@@ -13010,6 +13058,9 @@ class DateRange extends TextInput {
|
|
|
13010
13058
|
getNativeDate() {
|
|
13011
13059
|
return this.dateObject.filter((obj) => obj !== null).map((obj) => obj.toDate());
|
|
13012
13060
|
}
|
|
13061
|
+
getAllowedDates(date) {
|
|
13062
|
+
return isDateAllowed(date, this.dateFormat, this.allowedDates);
|
|
13063
|
+
}
|
|
13013
13064
|
getMaskValue() {
|
|
13014
13065
|
let mask = '';
|
|
13015
13066
|
if (typeof this.mask === 'function') {
|
package/dist/zd-common.min.js
CHANGED
|
@@ -2287,6 +2287,18 @@ FormatterParserProvider.registerParser('ZdTextInput', (value, { valueWithPrefix
|
|
|
2287
2287
|
});
|
|
2288
2288
|
InputFactory.register('ZdTextInput', TextInput);
|
|
2289
2289
|
|
|
2290
|
+
function isDateAllowed(date, dateFormat, allowedDates) {
|
|
2291
|
+
if (!allowedDates)
|
|
2292
|
+
return true;
|
|
2293
|
+
if (allowedDates.length === 0)
|
|
2294
|
+
return false;
|
|
2295
|
+
const dateString = dayjs(date).format(dateFormat);
|
|
2296
|
+
if (allowedDates instanceof Function) {
|
|
2297
|
+
return allowedDates(dateString);
|
|
2298
|
+
}
|
|
2299
|
+
return allowedDates.indexOf(dateString) !== -1;
|
|
2300
|
+
}
|
|
2301
|
+
|
|
2290
2302
|
/**
|
|
2291
2303
|
* Base class for Date component.
|
|
2292
2304
|
*/
|
|
@@ -2426,6 +2438,9 @@ class DateInput extends TextInput {
|
|
|
2426
2438
|
if (this.isValidFormatDate(value, this.dateFormat)) {
|
|
2427
2439
|
this.dateObject = dayjs(value, this.dateFormat);
|
|
2428
2440
|
}
|
|
2441
|
+
else {
|
|
2442
|
+
this.dateObject = null;
|
|
2443
|
+
}
|
|
2429
2444
|
}
|
|
2430
2445
|
get displayValue() {
|
|
2431
2446
|
return this.internalDisplayValue;
|
|
@@ -2495,13 +2510,8 @@ class DateInput extends TextInput {
|
|
|
2495
2510
|
const isValidMax = !maxDate || date.isBefore(maxDate) || date.isSame(maxDate);
|
|
2496
2511
|
if (!isValidMax)
|
|
2497
2512
|
return false;
|
|
2498
|
-
const isAllowedDate = this.
|
|
2499
|
-
|
|
2500
|
-
(Array.isArray(this.allowedDates) &&
|
|
2501
|
-
this.allowedDates.indexOf(dayjs(value, format).format(this.dateFormat)) !== -1);
|
|
2502
|
-
if (!isAllowedDate)
|
|
2503
|
-
return false;
|
|
2504
|
-
return true;
|
|
2513
|
+
const isAllowedDate = this.getAllowedDates(dayjs(value, format).toDate());
|
|
2514
|
+
return isAllowedDate;
|
|
2505
2515
|
}
|
|
2506
2516
|
isValidFormatDate(value, format, strict = true) {
|
|
2507
2517
|
return dayjs(value, format, strict).isValid();
|
|
@@ -2516,16 +2526,7 @@ class DateInput extends TextInput {
|
|
|
2516
2526
|
this.value = this.dateObject.format(this.dateFormat);
|
|
2517
2527
|
}
|
|
2518
2528
|
getAllowedDates(date) {
|
|
2519
|
-
|
|
2520
|
-
return true;
|
|
2521
|
-
if (this.allowedDates.length === 0)
|
|
2522
|
-
return false;
|
|
2523
|
-
const dayjsDate = dayjs(date);
|
|
2524
|
-
const dateString = dayjsDate.format(this.dateFormat);
|
|
2525
|
-
if (this.allowedDates instanceof Function) {
|
|
2526
|
-
return this.allowedDates(dateString);
|
|
2527
|
-
}
|
|
2528
|
-
return this.allowedDates.indexOf(dateString) !== -1;
|
|
2529
|
+
return isDateAllowed(date, this.dateFormat, this.allowedDates);
|
|
2529
2530
|
}
|
|
2530
2531
|
formatISODateValue(value) {
|
|
2531
2532
|
if (value && this.isValidFormatDate(value, this.dateFormat)) {
|
|
@@ -2557,7 +2558,8 @@ class DateInput extends TextInput {
|
|
|
2557
2558
|
this.showDatePicker = false;
|
|
2558
2559
|
}
|
|
2559
2560
|
}
|
|
2560
|
-
onMounted() {
|
|
2561
|
+
onMounted(element) {
|
|
2562
|
+
super.onMounted(element);
|
|
2561
2563
|
if (!this.value)
|
|
2562
2564
|
return;
|
|
2563
2565
|
this.setDateValue(this.formatter(this.value));
|
|
@@ -3573,9 +3575,41 @@ class Iterable extends ComponentRender {
|
|
|
3573
3575
|
return this.datasource.data;
|
|
3574
3576
|
}
|
|
3575
3577
|
changeDefaultSlotNames(slot) {
|
|
3576
|
-
|
|
3577
|
-
|
|
3578
|
-
|
|
3578
|
+
return this.recursiveReplace(slot, /<<NAME>>/g, this.name);
|
|
3579
|
+
}
|
|
3580
|
+
/**
|
|
3581
|
+
* Recursively replaces a pattern in all string values within an object/array tree
|
|
3582
|
+
* @param obj The object or array to process
|
|
3583
|
+
* @param pattern The regex pattern to search for
|
|
3584
|
+
* @param replacement The replacement string
|
|
3585
|
+
* @returns A new object/array with replaced values
|
|
3586
|
+
*/
|
|
3587
|
+
recursiveReplace(obj, pattern, replacement) {
|
|
3588
|
+
// Handle null or undefined
|
|
3589
|
+
if (obj === null || obj === undefined) {
|
|
3590
|
+
return obj;
|
|
3591
|
+
}
|
|
3592
|
+
// Handle string values - perform replacement
|
|
3593
|
+
if (typeof obj === 'string') {
|
|
3594
|
+
return obj.replace(pattern, replacement);
|
|
3595
|
+
}
|
|
3596
|
+
// Handle arrays - recursively process each element
|
|
3597
|
+
if (Array.isArray(obj)) {
|
|
3598
|
+
return obj.map((item) => this.recursiveReplace(item, pattern, replacement));
|
|
3599
|
+
}
|
|
3600
|
+
// Handle objects - recursively process each property value
|
|
3601
|
+
if (this.isObject(obj)) {
|
|
3602
|
+
const newObj = {};
|
|
3603
|
+
for (const key in obj) {
|
|
3604
|
+
newObj[key] = this.recursiveReplace(obj[key], pattern, replacement);
|
|
3605
|
+
}
|
|
3606
|
+
return newObj;
|
|
3607
|
+
}
|
|
3608
|
+
// For all other types (functions, numbers, booleans, etc.), return as-is
|
|
3609
|
+
return obj;
|
|
3610
|
+
}
|
|
3611
|
+
isObject(value) {
|
|
3612
|
+
return typeof value === 'object';
|
|
3579
3613
|
}
|
|
3580
3614
|
findRow(key) {
|
|
3581
3615
|
return this.getData().find((row) => this.getRowKey(row) === key);
|
|
@@ -12561,6 +12595,7 @@ FormatterParserProvider.registerParser('ZdTime', (value, { displayFormat = Confi
|
|
|
12561
12595
|
InputFactory.register('ZdTime', Time);
|
|
12562
12596
|
|
|
12563
12597
|
class DateRange extends TextInput {
|
|
12598
|
+
allowedDates;
|
|
12564
12599
|
/**
|
|
12565
12600
|
* Input auto complete.
|
|
12566
12601
|
*/
|
|
@@ -12664,6 +12699,7 @@ class DateRange extends TextInput {
|
|
|
12664
12699
|
else {
|
|
12665
12700
|
this.appendIcon = this.getInitValue('appendIcon', props.appendIcon, 'calendar');
|
|
12666
12701
|
}
|
|
12702
|
+
this.allowedDates = this.getInitValue('allowedDates', props.allowedDates, this.allowedDates);
|
|
12667
12703
|
this.autocomplete = this.getInitValue('autocomplete', props.autocomplete, this.autocomplete);
|
|
12668
12704
|
this.dateFormat = this.getInitValue('dateFormat', props.dateFormat, this.dateFormat);
|
|
12669
12705
|
this.dateValidation = this.dateValidation.bind(this);
|
|
@@ -12741,7 +12777,6 @@ class DateRange extends TextInput {
|
|
|
12741
12777
|
this.internalValue = value;
|
|
12742
12778
|
const [startDate, endDate] = value;
|
|
12743
12779
|
const isStartValid = this.isValidFormatDate(startDate, this.dateFormat);
|
|
12744
|
-
// if end date is not defined, no need to validate it
|
|
12745
12780
|
const isEndValid = !endDate || this.isValidFormatDate(endDate, this.dateFormat);
|
|
12746
12781
|
const areDatesValid = isStartValid && isEndValid;
|
|
12747
12782
|
if (areDatesValid) {
|
|
@@ -12842,6 +12877,9 @@ class DateRange extends TextInput {
|
|
|
12842
12877
|
const isValidMax = !maxDate || date.isBefore(maxDate) || date.isSame(maxDate);
|
|
12843
12878
|
if (!isValidMax)
|
|
12844
12879
|
return false;
|
|
12880
|
+
if (!this.getAllowedDates(dayjs(value, format).toDate())) {
|
|
12881
|
+
return false;
|
|
12882
|
+
}
|
|
12845
12883
|
return true;
|
|
12846
12884
|
}
|
|
12847
12885
|
isValidFormatDate(value, format, strict = true) {
|
|
@@ -12998,9 +13036,19 @@ class DateRange extends TextInput {
|
|
|
12998
13036
|
return [arr[0]];
|
|
12999
13037
|
return [arr[0], arr[arr.length - 1]];
|
|
13000
13038
|
}
|
|
13001
|
-
setNativeDate(
|
|
13039
|
+
setNativeDate(dates) {
|
|
13002
13040
|
this.dateError = false;
|
|
13003
|
-
|
|
13041
|
+
const dayjsDates = (dates || []).map((d) => dayjs(d));
|
|
13042
|
+
const [start, end] = this.getExtremities(dayjsDates);
|
|
13043
|
+
if (start && end) {
|
|
13044
|
+
for (let d = start; d.isBefore(end) || d.isSame(end); d = d.add(1, 'day')) {
|
|
13045
|
+
if (!this.getAllowedDates(d.toDate())) {
|
|
13046
|
+
this.dateError = true;
|
|
13047
|
+
return;
|
|
13048
|
+
}
|
|
13049
|
+
}
|
|
13050
|
+
}
|
|
13051
|
+
this.dateObject = (dates || []).map((obj) => dayjs(obj));
|
|
13004
13052
|
const extremityDates = this.getExtremities(this.dateObject);
|
|
13005
13053
|
this.value = extremityDates
|
|
13006
13054
|
.filter((obj) => obj !== null)
|
|
@@ -13010,6 +13058,9 @@ class DateRange extends TextInput {
|
|
|
13010
13058
|
getNativeDate() {
|
|
13011
13059
|
return this.dateObject.filter((obj) => obj !== null).map((obj) => obj.toDate());
|
|
13012
13060
|
}
|
|
13061
|
+
getAllowedDates(date) {
|
|
13062
|
+
return isDateAllowed(date, this.dateFormat, this.allowedDates);
|
|
13063
|
+
}
|
|
13013
13064
|
getMaskValue() {
|
|
13014
13065
|
let mask = '';
|
|
13015
13066
|
if (typeof this.mask === 'function') {
|
package/jest.config.cjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zeedhi/common",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.6",
|
|
4
4
|
"description": "Zeedhi Common",
|
|
5
5
|
"author": "Zeedhi <zeedhi@teknisa.com>",
|
|
6
6
|
"license": "ISC",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"@zeedhi/autonumeric": "^4.6.3",
|
|
24
|
-
"@zeedhi/core": "^3.0.
|
|
24
|
+
"@zeedhi/core": "^3.0.6",
|
|
25
25
|
"lodash.clonedeep": "^4.5.0",
|
|
26
26
|
"lodash.debounce": "^4.0.8",
|
|
27
27
|
"lodash.get": "^4.4.2",
|
|
@@ -42,5 +42,8 @@
|
|
|
42
42
|
"lodash.times": "^4.3.2",
|
|
43
43
|
"mockdate": "^3.0.5"
|
|
44
44
|
},
|
|
45
|
-
"
|
|
45
|
+
"env": {
|
|
46
|
+
"NODE_ENV": "production"
|
|
47
|
+
},
|
|
48
|
+
"gitHead": "8968e2b143f77acec2e51a6ca22f2e25646d0078"
|
|
46
49
|
}
|
|
@@ -3,6 +3,7 @@ import isUndefined from 'lodash.isundefined';
|
|
|
3
3
|
import { InputFactory } from '../zd-input/input-factory';
|
|
4
4
|
import { TextInput } from '../zd-text-input/text-input';
|
|
5
5
|
import { IDateInput } from './interfaces';
|
|
6
|
+
import { isDateAllowed } from '../../utils/date-utils/date-utils';
|
|
6
7
|
|
|
7
8
|
/**
|
|
8
9
|
* Base class for Date component.
|
|
@@ -175,6 +176,8 @@ export class DateInput extends TextInput implements IDateInput {
|
|
|
175
176
|
}
|
|
176
177
|
if (this.isValidFormatDate(value, this.dateFormat)) {
|
|
177
178
|
this.dateObject = dayjs(value, this.dateFormat);
|
|
179
|
+
} else {
|
|
180
|
+
this.dateObject = null;
|
|
178
181
|
}
|
|
179
182
|
}
|
|
180
183
|
|
|
@@ -252,15 +255,9 @@ export class DateInput extends TextInput implements IDateInput {
|
|
|
252
255
|
const isValidMax = !maxDate || date.isBefore(maxDate) || date.isSame(maxDate);
|
|
253
256
|
if (!isValidMax) return false;
|
|
254
257
|
|
|
255
|
-
const isAllowedDate =
|
|
256
|
-
this.allowedDates === undefined ||
|
|
257
|
-
(this.allowedDates instanceof Function && this.allowedDates(dayjs(value, format).format(this.dateFormat))) ||
|
|
258
|
-
(Array.isArray(this.allowedDates) &&
|
|
259
|
-
this.allowedDates.indexOf(dayjs(value, format).format(this.dateFormat)) !== -1);
|
|
260
|
-
|
|
261
|
-
if (!isAllowedDate) return false;
|
|
258
|
+
const isAllowedDate = this.getAllowedDates(dayjs(value, format).toDate());
|
|
262
259
|
|
|
263
|
-
return
|
|
260
|
+
return isAllowedDate;
|
|
264
261
|
}
|
|
265
262
|
|
|
266
263
|
public isValidFormatDate(value: string, format: string, strict = true): boolean {
|
|
@@ -280,18 +277,7 @@ export class DateInput extends TextInput implements IDateInput {
|
|
|
280
277
|
}
|
|
281
278
|
|
|
282
279
|
public getAllowedDates(date: Date) {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
if (this.allowedDates.length === 0) return false;
|
|
286
|
-
|
|
287
|
-
const dayjsDate = dayjs(date);
|
|
288
|
-
const dateString = dayjsDate.format(this.dateFormat);
|
|
289
|
-
|
|
290
|
-
if (this.allowedDates instanceof Function) {
|
|
291
|
-
return this.allowedDates(dateString);
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
return this.allowedDates.indexOf(dateString) !== -1;
|
|
280
|
+
return isDateAllowed(date, this.dateFormat, this.allowedDates);
|
|
295
281
|
}
|
|
296
282
|
|
|
297
283
|
public formatISODateValue(value: string): string {
|
|
@@ -329,7 +315,9 @@ export class DateInput extends TextInput implements IDateInput {
|
|
|
329
315
|
}
|
|
330
316
|
}
|
|
331
317
|
|
|
332
|
-
public onMounted() {
|
|
318
|
+
public onMounted(element: any) {
|
|
319
|
+
super.onMounted(element);
|
|
320
|
+
|
|
333
321
|
if (!this.value) return;
|
|
334
322
|
|
|
335
323
|
this.setDateValue(this.formatter(this.value));
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { Config, DateHelper, FormatterParserProvider, I18n, Mask, Utils, dayjs } from '@zeedhi/core';
|
|
2
2
|
import isUndefined from 'lodash.isundefined';
|
|
3
3
|
import { IDateRange } from './interfaces';
|
|
4
|
-
|
|
4
|
+
import { isDateAllowed } from '../../utils/date-utils/date-utils';
|
|
5
5
|
import { InputFactory } from '../zd-input/input-factory';
|
|
6
6
|
import { TextInput } from '../zd-text-input/text-input';
|
|
7
7
|
|
|
8
8
|
export class DateRange extends TextInput implements IDateRange {
|
|
9
|
+
|
|
10
|
+
public allowedDates?: string[] | ((date: string) => boolean);
|
|
9
11
|
/**
|
|
10
12
|
* Input auto complete.
|
|
11
13
|
*/
|
|
@@ -134,6 +136,7 @@ export class DateRange extends TextInput implements IDateRange {
|
|
|
134
136
|
} else {
|
|
135
137
|
this.appendIcon = this.getInitValue('appendIcon', props.appendIcon, 'calendar');
|
|
136
138
|
}
|
|
139
|
+
this.allowedDates = this.getInitValue('allowedDates', props.allowedDates, this.allowedDates);
|
|
137
140
|
this.autocomplete = this.getInitValue('autocomplete', props.autocomplete, this.autocomplete);
|
|
138
141
|
this.dateFormat = this.getInitValue('dateFormat', props.dateFormat, this.dateFormat);
|
|
139
142
|
this.dateValidation = this.dateValidation.bind(this);
|
|
@@ -223,7 +226,6 @@ export class DateRange extends TextInput implements IDateRange {
|
|
|
223
226
|
|
|
224
227
|
const [startDate, endDate] = value;
|
|
225
228
|
const isStartValid = this.isValidFormatDate(startDate, this.dateFormat);
|
|
226
|
-
// if end date is not defined, no need to validate it
|
|
227
229
|
const isEndValid = !endDate || this.isValidFormatDate(endDate, this.dateFormat);
|
|
228
230
|
const areDatesValid = isStartValid && isEndValid;
|
|
229
231
|
|
|
@@ -328,6 +330,10 @@ export class DateRange extends TextInput implements IDateRange {
|
|
|
328
330
|
const isValidMax = !maxDate || date.isBefore(maxDate) || date.isSame(maxDate);
|
|
329
331
|
if (!isValidMax) return false;
|
|
330
332
|
|
|
333
|
+
if (!this.getAllowedDates(dayjs(value, format).toDate())) {
|
|
334
|
+
return false;
|
|
335
|
+
}
|
|
336
|
+
|
|
331
337
|
return true;
|
|
332
338
|
}
|
|
333
339
|
|
|
@@ -515,9 +521,22 @@ export class DateRange extends TextInput implements IDateRange {
|
|
|
515
521
|
return [arr[0], arr[arr.length - 1]];
|
|
516
522
|
}
|
|
517
523
|
|
|
518
|
-
public setNativeDate(
|
|
524
|
+
public setNativeDate(dates: Date[]) {
|
|
519
525
|
this.dateError = false;
|
|
520
|
-
|
|
526
|
+
|
|
527
|
+
const dayjsDates = (dates || []).map((d) => dayjs(d));
|
|
528
|
+
const [start, end] = this.getExtremities(dayjsDates);
|
|
529
|
+
|
|
530
|
+
if (start && end) {
|
|
531
|
+
for (let d = start; d.isBefore(end) || d.isSame(end); d = d.add(1, 'day')) {
|
|
532
|
+
if (!this.getAllowedDates(d.toDate())) {
|
|
533
|
+
this.dateError = true;
|
|
534
|
+
return;
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
|
|
539
|
+
this.dateObject = (dates || []).map((obj) => dayjs(obj));
|
|
521
540
|
|
|
522
541
|
const extremityDates = this.getExtremities(this.dateObject);
|
|
523
542
|
this.value = extremityDates
|
|
@@ -531,6 +550,10 @@ export class DateRange extends TextInput implements IDateRange {
|
|
|
531
550
|
return this.dateObject.filter((obj): obj is dayjs.Dayjs => obj !== null).map((obj) => obj.toDate());
|
|
532
551
|
}
|
|
533
552
|
|
|
553
|
+
public getAllowedDates(date: Date) {
|
|
554
|
+
return isDateAllowed(date, this.dateFormat, this.allowedDates);
|
|
555
|
+
}
|
|
556
|
+
|
|
534
557
|
public getMaskValue() {
|
|
535
558
|
let mask: any = '';
|
|
536
559
|
|
|
@@ -234,9 +234,47 @@ export abstract class Iterable<T extends Column = Column>
|
|
|
234
234
|
}
|
|
235
235
|
|
|
236
236
|
protected changeDefaultSlotNames(slot: IComponentRender[]) {
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
237
|
+
return this.recursiveReplace(slot, /<<NAME>>/g, this.name);
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* Recursively replaces a pattern in all string values within an object/array tree
|
|
242
|
+
* @param obj The object or array to process
|
|
243
|
+
* @param pattern The regex pattern to search for
|
|
244
|
+
* @param replacement The replacement string
|
|
245
|
+
* @returns A new object/array with replaced values
|
|
246
|
+
*/
|
|
247
|
+
private recursiveReplace(obj: unknown, pattern: RegExp, replacement: string): any {
|
|
248
|
+
// Handle null or undefined
|
|
249
|
+
if (obj === null || obj === undefined) {
|
|
250
|
+
return obj;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
// Handle string values - perform replacement
|
|
254
|
+
if (typeof obj === 'string') {
|
|
255
|
+
return obj.replace(pattern, replacement);
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// Handle arrays - recursively process each element
|
|
259
|
+
if (Array.isArray(obj)) {
|
|
260
|
+
return obj.map((item) => this.recursiveReplace(item, pattern, replacement));
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Handle objects - recursively process each property value
|
|
264
|
+
if (this.isObject(obj)) {
|
|
265
|
+
const newObj: IDictionary = {};
|
|
266
|
+
for (const key in obj) {
|
|
267
|
+
newObj[key] = this.recursiveReplace(obj[key], pattern, replacement);
|
|
268
|
+
}
|
|
269
|
+
return newObj;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
// For all other types (functions, numbers, booleans, etc.), return as-is
|
|
273
|
+
return obj;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
private isObject(value: unknown): value is IDictionary {
|
|
277
|
+
return typeof value === 'object';
|
|
240
278
|
}
|
|
241
279
|
|
|
242
280
|
public findRow(key: string | number) {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { dayjs } from '@zeedhi/core';
|
|
2
|
+
|
|
3
|
+
export function isDateAllowed(
|
|
4
|
+
date: Date,
|
|
5
|
+
dateFormat: string,
|
|
6
|
+
allowedDates?: ((date: string) => boolean) | string[],
|
|
7
|
+
): boolean {
|
|
8
|
+
if (!allowedDates) return true;
|
|
9
|
+
|
|
10
|
+
if (allowedDates.length === 0) return false;
|
|
11
|
+
|
|
12
|
+
const dateString = dayjs(date).format(dateFormat);
|
|
13
|
+
|
|
14
|
+
if (allowedDates instanceof Function) {
|
|
15
|
+
return allowedDates(dateString);
|
|
16
|
+
}
|
|
17
|
+
return allowedDates.indexOf(dateString) !== -1;
|
|
18
|
+
}
|