@mtes-mct/monitor-ui 4.0.7 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/assets/stylesheets/rsuite-override.css +0 -24
- package/cypress/commands/fill/fillDatePicker.d.ts +1 -0
- package/cypress/commands/fill/fillDateRangePicker.d.ts +1 -1
- package/cypress/commands/fill/index.d.ts +1 -1
- package/cypress/index.d.ts +15 -2
- package/cypress/index.js +147 -19
- package/cypress/index.js.map +1 -1
- package/fields/DatePicker/CalendarPicker.d.ts +11 -3
- package/fields/DatePicker/index.d.ts +24 -5
- package/fields/DateRangePicker/DateInput.d.ts +22 -4
- package/fields/DateRangePicker/NumberInput.d.ts +2 -2
- package/fields/DateRangePicker/RangeCalendarPicker.d.ts +11 -1
- package/fields/DateRangePicker/TimeInput.d.ts +8 -4
- package/fields/DateRangePicker/index.d.ts +26 -5
- package/fields/DateRangePicker/types.d.ts +11 -2
- package/fields/DateRangePicker/utils.d.ts +35 -5
- package/fields/MultiZoneEditor/index.d.ts +2 -1
- package/hooks/useClickOutsideEffect.d.ts +4 -2
- package/index.d.ts +1 -1
- package/index.js +369 -195
- package/index.js.map +1 -1
- package/package.json +2 -2
- package/utils/{dayjs.d.ts → customDayjs.d.ts} +1 -1
- package/utils/getLocalizedDayjs.d.ts +18 -2
- package/utils/getUtcizedDayjs.d.ts +5 -2
- package/utils/isDaylightSavingTimeDate.d.ts +21 -0
- package/utils/getUtcDayjs.d.ts +0 -2
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,17 @@
|
|
|
1
|
+
# [4.1.0](https://github.com/MTES-MCT/monitor-ui/compare/v4.0.7...v4.1.0) (2023-04-05)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
### Features
|
|
5
|
+
|
|
6
|
+
* **fields:** Add isAddButtonDisabled to MultiZoneEditor ([3457bc5](https://github.com/MTES-MCT/monitor-ui/commit/3457bc5114de8f040b77daf78678eb8655448737))
|
|
7
|
+
|
|
8
|
+
## [4.0.7](https://github.com/MTES-MCT/monitor-ui/compare/v4.0.6...v4.0.7) (2023-04-03)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **cypress:** add number to fill command type ([db11067](https://github.com/MTES-MCT/monitor-ui/commit/db11067d9a0f3523bef61b390bd38f8c9c3c6ed4))
|
|
14
|
+
|
|
1
15
|
## [4.0.6](https://github.com/MTES-MCT/monitor-ui/compare/v4.0.5...v4.0.6) (2023-03-30)
|
|
2
16
|
|
|
3
17
|
|
|
@@ -514,30 +514,6 @@ label:hover .rs-checkbox-wrapper .rs-checkbox-inner:before {
|
|
|
514
514
|
border-color: transparent var(--slateGray) transparent transparent;
|
|
515
515
|
}
|
|
516
516
|
|
|
517
|
-
.rs-calendar-table-cell-is-today .rs-calendar-table-cell-content {
|
|
518
|
-
border: 1px solid var(--slateGray) !important;
|
|
519
|
-
}
|
|
520
|
-
|
|
521
|
-
.rs-calendar,
|
|
522
|
-
.rs-calendar-header,
|
|
523
|
-
.rs-calendar-table-cell-content {
|
|
524
|
-
box-sizing: border-box !important;
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
.rs-calendar-table-cell-content {
|
|
528
|
-
border-radius: 2px !important;
|
|
529
|
-
}
|
|
530
|
-
|
|
531
|
-
.rs-calendar-table-cell-selected .rs-calendar-table-cell-content {
|
|
532
|
-
color: #f0f0f0;
|
|
533
|
-
border-color: var(--charcoal);
|
|
534
|
-
background-color: var(--charcoal);
|
|
535
|
-
}
|
|
536
|
-
|
|
537
|
-
.rs-calendar-table-cell-in-range::before {
|
|
538
|
-
background-color: #e0e0e0;
|
|
539
|
-
}
|
|
540
|
-
|
|
541
517
|
.rs-picker-toolbar-right-btn-ok {
|
|
542
518
|
padding: 5px 10px;
|
|
543
519
|
font-size: 13px;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function fillDatePicker(fieldsetElement: HTMLElement, dateOrDateWithTimeTuple: Cypress.DateTuple | Cypress.DateWithTimeTuple | undefined): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function fillDateRangePicker(
|
|
1
|
+
export declare function fillDateRangePicker(fieldsetElement: HTMLElement, dateOrDateWithTimeTupleRange: [Cypress.DateTuple, Cypress.DateTuple] | [Cypress.DateWithTimeTuple, Cypress.DateWithTimeTuple] | undefined): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare function fill(label: string | undefined, value: boolean | number | string | string[] | undefined, leftRetries?: number): void;
|
|
1
|
+
export declare function fill(label: string | undefined, value: boolean | number | string | string[] | (Cypress.DateTuple | Cypress.DateWithTimeTuple) | ([Cypress.DateTuple, Cypress.DateTuple] | [Cypress.DateWithTimeTuple, Cypress.DateWithTimeTuple]) | undefined, leftRetries?: number): void;
|
package/cypress/index.d.ts
CHANGED
|
@@ -10,9 +10,22 @@ declare namespace Cypress {
|
|
|
10
10
|
}>
|
|
11
11
|
): Chainable<JQuery<HTMLButtonElement>>
|
|
12
12
|
clickLink(linkText: string): Chainable<JQuery<HTMLAnchorElement>>
|
|
13
|
-
clickOutside(xPosition?: number, yPosition?: number):
|
|
14
|
-
fill(
|
|
13
|
+
clickOutside(xPosition?: number, yPosition?: number): void
|
|
14
|
+
fill(
|
|
15
|
+
label: string,
|
|
16
|
+
value:
|
|
17
|
+
| boolean
|
|
18
|
+
| number
|
|
19
|
+
| string
|
|
20
|
+
| string[]
|
|
21
|
+
| (DateTuple | DateWithTimeTuple)
|
|
22
|
+
| ([Cypress.DateTuple, Cypress.DateTuple] | [Cypress.DateWithTimeTuple, Cypress.DateWithTimeTuple])
|
|
23
|
+
| undefined
|
|
24
|
+
): Chainable<Element>
|
|
15
25
|
forceClick(): Chainable<JQuery<HTMLElement>>
|
|
16
26
|
getDataCy(dataCy: string): Chainable<JQuery<HTMLElement>>
|
|
17
27
|
}
|
|
28
|
+
|
|
29
|
+
type DateTuple = [number, number, number]
|
|
30
|
+
type DateWithTimeTuple = [number, number, number, number, number]
|
|
18
31
|
}
|
package/cypress/index.js
CHANGED
|
@@ -674,6 +674,114 @@ function checkMultiRadioOption(fieldsetElement, value) {
|
|
|
674
674
|
return fieldsetElement;
|
|
675
675
|
}
|
|
676
676
|
|
|
677
|
+
function fillDatePicker(fieldsetElement, dateOrDateWithTimeTuple) {
|
|
678
|
+
const inputElements = fieldsetElement.querySelectorAll('input');
|
|
679
|
+
if (inputElements.length !== 4 && inputElements.length !== 6) {
|
|
680
|
+
throw new Error(`Expected to find 4 or 6 inputs within in DatePicker but found ${inputElements.length}.`);
|
|
681
|
+
}
|
|
682
|
+
const hasTimeInput = inputElements.length !== 4;
|
|
683
|
+
const fieldsetElementOffsetLeft = fieldsetElement.offsetLeft
|
|
684
|
+
? fieldsetElement.offsetLeft
|
|
685
|
+
: (() => {
|
|
686
|
+
if (!fieldsetElement.offsetParent) {
|
|
687
|
+
throw new Error('`fieldsetElement.offsetParent` is undefined.');
|
|
688
|
+
}
|
|
689
|
+
return fieldsetElement.offsetParent.offsetLeft;
|
|
690
|
+
})();
|
|
691
|
+
const fieldsetElementOffsetTop = fieldsetElement.offsetTop !== 0
|
|
692
|
+
? fieldsetElement.offsetTop
|
|
693
|
+
: (() => {
|
|
694
|
+
if (!fieldsetElement.offsetParent) {
|
|
695
|
+
throw new Error('`fieldsetElement.offsetParent` is undefined.');
|
|
696
|
+
}
|
|
697
|
+
return fieldsetElement.offsetParent.offsetTop;
|
|
698
|
+
})();
|
|
699
|
+
if (!dateOrDateWithTimeTuple) {
|
|
700
|
+
cy.wrap(fieldsetElement).get('[aria-label="Jour"]').clear();
|
|
701
|
+
cy.wrap(fieldsetElement).get('[aria-label="Mois"]').clear();
|
|
702
|
+
cy.wrap(fieldsetElement).get('[aria-label="Année"]').clear();
|
|
703
|
+
if (hasTimeInput) {
|
|
704
|
+
cy.wrap(fieldsetElement).get('[aria-label="Heure"]').clear();
|
|
705
|
+
cy.wrap(fieldsetElement).get('[aria-label="Minute"]').clear();
|
|
706
|
+
}
|
|
707
|
+
cy.clickOutside(fieldsetElementOffsetLeft, fieldsetElementOffsetTop - 1);
|
|
708
|
+
cy.wait(250);
|
|
709
|
+
return;
|
|
710
|
+
}
|
|
711
|
+
const [year, month, day, hour, minute] = dateOrDateWithTimeTuple;
|
|
712
|
+
cy.wrap(fieldsetElement).get('[aria-label="Jour"]').type(String(day).padStart(2, '0'));
|
|
713
|
+
cy.wrap(fieldsetElement).get('[aria-label="Mois"]').type(String(month).padStart(2, '0'));
|
|
714
|
+
cy.wrap(fieldsetElement).get('[aria-label="Année"]').type(String(year));
|
|
715
|
+
if (hasTimeInput) {
|
|
716
|
+
cy.wrap(fieldsetElement).get('[aria-label="Heure"]').type(String(hour).padStart(2, '0'));
|
|
717
|
+
cy.wrap(fieldsetElement).get('[aria-label="Minute"]').type(String(minute).padStart(2, '0'));
|
|
718
|
+
}
|
|
719
|
+
cy.clickOutside(fieldsetElementOffsetLeft, fieldsetElementOffsetTop - 1);
|
|
720
|
+
cy.wait(250);
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
function fillDateRangePicker(fieldsetElement, dateOrDateWithTimeTupleRange) {
|
|
724
|
+
const inputElements = fieldsetElement.querySelectorAll('input');
|
|
725
|
+
if (inputElements.length !== 7 && inputElements.length !== 11) {
|
|
726
|
+
throw new Error(`Expected to find 7 or 11 inputs within in DatePicker but found ${inputElements.length}.`);
|
|
727
|
+
}
|
|
728
|
+
const hasTimeInput = inputElements.length !== 7;
|
|
729
|
+
const fieldsetElementOffsetLeft = fieldsetElement.offsetLeft
|
|
730
|
+
? fieldsetElement.offsetLeft
|
|
731
|
+
: (() => {
|
|
732
|
+
if (!fieldsetElement.offsetParent) {
|
|
733
|
+
throw new Error('`fieldsetElement.offsetParent` is undefined.');
|
|
734
|
+
}
|
|
735
|
+
return fieldsetElement.offsetParent.offsetLeft;
|
|
736
|
+
})();
|
|
737
|
+
const fieldsetElementOffsetTop = fieldsetElement.offsetTop !== 0
|
|
738
|
+
? fieldsetElement.offsetTop
|
|
739
|
+
: (() => {
|
|
740
|
+
if (!fieldsetElement.offsetParent) {
|
|
741
|
+
throw new Error('`fieldsetElement.offsetParent` is undefined.');
|
|
742
|
+
}
|
|
743
|
+
return fieldsetElement.offsetParent.offsetTop;
|
|
744
|
+
})();
|
|
745
|
+
if (!dateOrDateWithTimeTupleRange) {
|
|
746
|
+
cy.wrap(fieldsetElement).get('[aria-label="Jour de début"]').clear();
|
|
747
|
+
cy.wrap(fieldsetElement).get('[aria-label="Mois de début"]').clear();
|
|
748
|
+
cy.wrap(fieldsetElement).get('[aria-label="Année de début"]').clear();
|
|
749
|
+
if (hasTimeInput) {
|
|
750
|
+
cy.wrap(fieldsetElement).get('[aria-label="Heure de début"]').clear();
|
|
751
|
+
cy.wrap(fieldsetElement).get('[aria-label="Minute de début"]').clear();
|
|
752
|
+
}
|
|
753
|
+
cy.wrap(fieldsetElement).get('[aria-label="Jour de fin"]').clear();
|
|
754
|
+
cy.wrap(fieldsetElement).get('[aria-label="Mois de fin"]').clear();
|
|
755
|
+
cy.wrap(fieldsetElement).get('[aria-label="Année de fin"]').clear();
|
|
756
|
+
if (hasTimeInput) {
|
|
757
|
+
cy.wrap(fieldsetElement).get('[aria-label="Heure de fin"]').clear();
|
|
758
|
+
cy.wrap(fieldsetElement).get('[aria-label="Minute de fin"]').clear();
|
|
759
|
+
}
|
|
760
|
+
cy.clickOutside(fieldsetElementOffsetLeft, fieldsetElementOffsetTop - 1);
|
|
761
|
+
cy.wait(250);
|
|
762
|
+
return;
|
|
763
|
+
}
|
|
764
|
+
const [startDateOrDateWithTimeTuple, endDateOrDateWithTimeTuple] = dateOrDateWithTimeTupleRange;
|
|
765
|
+
const [startYear, startMonth, startDay, startHour, startMinute] = startDateOrDateWithTimeTuple;
|
|
766
|
+
const [endYear, endMonth, endDay, endHour, endMinute] = endDateOrDateWithTimeTuple;
|
|
767
|
+
cy.wrap(fieldsetElement).get('[aria-label="Jour de début"]').type(String(startDay).padStart(2, '0'));
|
|
768
|
+
cy.wrap(fieldsetElement).get('[aria-label="Mois de début"]').type(String(startMonth).padStart(2, '0'));
|
|
769
|
+
cy.wrap(fieldsetElement).get('[aria-label="Année de début"]').type(String(startYear));
|
|
770
|
+
if (hasTimeInput) {
|
|
771
|
+
cy.wrap(fieldsetElement).get('[aria-label="Heure de début"]').type(String(startHour).padStart(2, '0'));
|
|
772
|
+
cy.wrap(fieldsetElement).get('[aria-label="Minute de début"]').type(String(startMinute).padStart(2, '0'));
|
|
773
|
+
}
|
|
774
|
+
cy.wrap(fieldsetElement).get('[aria-label="Jour de fin"]').type(String(endDay).padStart(2, '0'));
|
|
775
|
+
cy.wrap(fieldsetElement).get('[aria-label="Mois de fin"]').type(String(endMonth).padStart(2, '0'));
|
|
776
|
+
cy.wrap(fieldsetElement).get('[aria-label="Année de fin"]').type(String(endYear));
|
|
777
|
+
if (hasTimeInput) {
|
|
778
|
+
cy.wrap(fieldsetElement).get('[aria-label="Heure de fin"]').type(String(endHour).padStart(2, '0'));
|
|
779
|
+
cy.wrap(fieldsetElement).get('[aria-label="Minute de fin"]').type(String(endMinute).padStart(2, '0'));
|
|
780
|
+
}
|
|
781
|
+
cy.clickOutside(fieldsetElementOffsetLeft, fieldsetElementOffsetTop - 1);
|
|
782
|
+
cy.wait(250);
|
|
783
|
+
}
|
|
784
|
+
|
|
677
785
|
function fillTextarea(textareaElement, value) {
|
|
678
786
|
if (value) {
|
|
679
787
|
cy.wrap(textareaElement).scrollIntoView().type(value, { delay: 1, force: true });
|
|
@@ -697,6 +805,22 @@ function pickMultiSelectOptions(cypressMultiSelectInputElement, values) {
|
|
|
697
805
|
if (!fieldElement) {
|
|
698
806
|
throw new Error('`fieldElement` is undefined.');
|
|
699
807
|
}
|
|
808
|
+
const fieldElementOffsetLeft = fieldElement.offsetLeft
|
|
809
|
+
? fieldElement.offsetLeft
|
|
810
|
+
: (() => {
|
|
811
|
+
if (!fieldElement.offsetParent) {
|
|
812
|
+
throw new Error('`fieldElement.offsetParent` is undefined.');
|
|
813
|
+
}
|
|
814
|
+
return fieldElement.offsetParent.offsetLeft;
|
|
815
|
+
})();
|
|
816
|
+
const fieldElementOffsetTop = fieldElement.offsetTop !== 0
|
|
817
|
+
? fieldElement.offsetTop
|
|
818
|
+
: (() => {
|
|
819
|
+
if (!fieldElement.offsetParent) {
|
|
820
|
+
throw new Error('`fieldElement.offsetParent` is undefined.');
|
|
821
|
+
}
|
|
822
|
+
return fieldElement.offsetParent.offsetTop;
|
|
823
|
+
})();
|
|
700
824
|
cy.wrap(fieldElement).scrollIntoView();
|
|
701
825
|
const maybeCleanButton = fieldElement.querySelector('.rs-picker-toggle-clean');
|
|
702
826
|
if (maybeCleanButton) {
|
|
@@ -705,7 +829,7 @@ function pickMultiSelectOptions(cypressMultiSelectInputElement, values) {
|
|
|
705
829
|
if (!values) {
|
|
706
830
|
return;
|
|
707
831
|
}
|
|
708
|
-
cy.wrap(fieldElement).find('.rs-picker-toggle
|
|
832
|
+
cy.wrap(fieldElement).find('.rs-picker-toggle').forceClick();
|
|
709
833
|
cy.get('.rs-picker-picker-check-menu').then(([multiSelectMenuElement]) => {
|
|
710
834
|
if (!multiSelectMenuElement) {
|
|
711
835
|
throw new Error('`multiSelectMenuElement` is undefined.');
|
|
@@ -721,24 +845,8 @@ function pickMultiSelectOptions(cypressMultiSelectInputElement, values) {
|
|
|
721
845
|
.scrollIntoView()
|
|
722
846
|
.forceClick();
|
|
723
847
|
});
|
|
724
|
-
const offsetLeft = fieldElement.offsetLeft
|
|
725
|
-
? fieldElement.offsetLeft
|
|
726
|
-
: (() => {
|
|
727
|
-
if (!fieldElement.offsetParent) {
|
|
728
|
-
throw new Error('`fieldElement.offsetParent` is undefined.');
|
|
729
|
-
}
|
|
730
|
-
return fieldElement.offsetParent.offsetLeft;
|
|
731
|
-
})();
|
|
732
|
-
const offsetTop = fieldElement.offsetTop !== 0
|
|
733
|
-
? fieldElement.offsetTop
|
|
734
|
-
: (() => {
|
|
735
|
-
if (!fieldElement.offsetParent) {
|
|
736
|
-
throw new Error('`fieldElement.offsetParent` is undefined.');
|
|
737
|
-
}
|
|
738
|
-
return fieldElement.offsetParent.offsetTop;
|
|
739
|
-
})();
|
|
740
848
|
// TODO Investigate that (this should be -1).
|
|
741
|
-
cy.clickOutside(
|
|
849
|
+
cy.clickOutside(fieldElementOffsetLeft, fieldElementOffsetTop - 16);
|
|
742
850
|
cy.wait(250);
|
|
743
851
|
});
|
|
744
852
|
});
|
|
@@ -760,7 +868,7 @@ function pickSelectOption(cypressSelectInputElement, value) {
|
|
|
760
868
|
if (!value) {
|
|
761
869
|
return;
|
|
762
870
|
}
|
|
763
|
-
cy.wrap(fieldElement).find('.rs-picker-toggle
|
|
871
|
+
cy.wrap(fieldElement).find('.rs-picker-toggle').forceClick();
|
|
764
872
|
cy.get('.rs-picker-select-menu').then(([selectMenuElement]) => {
|
|
765
873
|
if (!selectMenuElement) {
|
|
766
874
|
throw new Error('`selectMenuElement` is undefined.');
|
|
@@ -919,6 +1027,26 @@ function fill(label, value, leftRetries = RETRIES) {
|
|
|
919
1027
|
if (!fieldsetElement || fieldsetElement.tagName !== 'FIELDSET') {
|
|
920
1028
|
throw new Error(`Could not find parent fieldset of legend element with text "${label}".`);
|
|
921
1029
|
}
|
|
1030
|
+
if (fieldsetElement.classList.contains('Field-DatePicker')) {
|
|
1031
|
+
if ((!Array.isArray(value) || (value.length !== 3 && value.length !== 5) || typeof value[0] !== 'number') &&
|
|
1032
|
+
value !== undefined) {
|
|
1033
|
+
throw new Error('`value` should be of type `[number, number, number]`, `[number, number, number, number, number]` or `undefined`.');
|
|
1034
|
+
}
|
|
1035
|
+
fillDatePicker(fieldsetElement, value);
|
|
1036
|
+
return;
|
|
1037
|
+
}
|
|
1038
|
+
if (fieldsetElement.classList.contains('Field-DateRangePicker')) {
|
|
1039
|
+
if ((!Array.isArray(value) ||
|
|
1040
|
+
value.length !== 2 ||
|
|
1041
|
+
!Array.isArray(value[0]) ||
|
|
1042
|
+
(value[0].length !== 3 && value[0].length !== 5) ||
|
|
1043
|
+
(value[1].length !== 3 && value[1].length !== 5)) &&
|
|
1044
|
+
value !== undefined) {
|
|
1045
|
+
throw new Error('`value` should be of type `[[number, number, number], [number, number, number]]` or ``[[number, number, number, number, number], [number, number, number, number, number]]`` or `undefined`.');
|
|
1046
|
+
}
|
|
1047
|
+
fillDateRangePicker(fieldsetElement, value);
|
|
1048
|
+
return;
|
|
1049
|
+
}
|
|
922
1050
|
const isMultiCheckbox = Boolean(fieldsetElement.querySelector('input[type="checkbox"]'));
|
|
923
1051
|
const isMultiRadio = Boolean(fieldsetElement.querySelector('input[type="radio"]'));
|
|
924
1052
|
if (isMultiCheckbox) {
|