@ongov/ontario-design-system-component-library 5.0.0-alpha.1 → 5.0.0-alpha.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/dist/cjs/app-globals-6f6b30a8.js.map +1 -1
- package/dist/cjs/ontario-accordion_44.cjs.entry.js +19 -7
- package/dist/cjs/ontario-accordion_44.cjs.entry.js.map +1 -1
- package/dist/collection/components/ontario-date-input/test/ontario-date-input.spec.js +58 -0
- package/dist/collection/components/ontario-date-input/test/ontario-date-input.spec.js.map +1 -1
- package/dist/collection/components/ontario-date-input/utils/date-validation-utils.js +14 -4
- package/dist/collection/components/ontario-date-input/utils/date-validation-utils.js.map +1 -1
- package/dist/collection/fonts/open-sans-400/LICENSE.txt +0 -0
- package/dist/collection/fonts/open-sans-400/open-sans-400.eot +0 -0
- package/dist/collection/fonts/open-sans-400/open-sans-400.svg +0 -0
- package/dist/collection/fonts/open-sans-400/open-sans-400.ttf +0 -0
- package/dist/collection/fonts/open-sans-400/open-sans-400.woff +0 -0
- package/dist/collection/fonts/open-sans-400/open-sans-400.woff2 +0 -0
- package/dist/collection/fonts/open-sans-700/LICENSE.txt +0 -0
- package/dist/collection/fonts/open-sans-700/open-sans-700.eot +0 -0
- package/dist/collection/fonts/open-sans-700/open-sans-700.svg +0 -0
- package/dist/collection/fonts/open-sans-700/open-sans-700.ttf +0 -0
- package/dist/collection/utils/helper/utils.js +4 -2
- package/dist/collection/utils/helper/utils.js.map +1 -1
- package/dist/collection/utils/helper/utils.spec.js +99 -1
- package/dist/collection/utils/helper/utils.spec.js.map +1 -1
- package/dist/components/ontario-date-input.js +13 -3
- package/dist/components/ontario-date-input.js.map +1 -1
- package/dist/components/ontario-header.js +2 -2
- package/dist/components/utils.js +4 -2
- package/dist/components/utils.js.map +1 -1
- package/dist/esm/app-globals-70748594.js.map +1 -1
- package/dist/esm/ontario-accordion_44.entry.js +19 -7
- package/dist/esm/ontario-accordion_44.entry.js.map +1 -1
- package/dist/esm/polyfills/core-js.js +0 -0
- package/dist/esm/polyfills/dom.js +0 -0
- package/dist/esm/polyfills/es5-html-element.js +0 -0
- package/dist/esm/polyfills/index.js +0 -0
- package/dist/esm/polyfills/system.js +0 -0
- package/dist/ontario-design-system-components/fonts/open-sans-400/LICENSE.txt +0 -0
- package/dist/ontario-design-system-components/fonts/open-sans-400/open-sans-400.eot +0 -0
- package/dist/ontario-design-system-components/fonts/open-sans-400/open-sans-400.svg +0 -0
- package/dist/ontario-design-system-components/fonts/open-sans-400/open-sans-400.ttf +0 -0
- package/dist/ontario-design-system-components/fonts/open-sans-400/open-sans-400.woff +0 -0
- package/dist/ontario-design-system-components/fonts/open-sans-400/open-sans-400.woff2 +0 -0
- package/dist/ontario-design-system-components/fonts/open-sans-700/LICENSE.txt +0 -0
- package/dist/ontario-design-system-components/fonts/open-sans-700/open-sans-700.eot +0 -0
- package/dist/ontario-design-system-components/fonts/open-sans-700/open-sans-700.svg +0 -0
- package/dist/ontario-design-system-components/fonts/open-sans-700/open-sans-700.ttf +0 -0
- package/dist/ontario-design-system-components/ontario-design-system-components.esm.js +1 -1
- package/dist/ontario-design-system-components/p-103a233b.js.map +1 -1
- package/dist/ontario-design-system-components/{p-9c3a1be9.entry.js → p-ac4e76b2.entry.js} +8 -6
- package/dist/ontario-design-system-components/p-ac4e76b2.entry.js.map +1 -0
- package/dist/types/components/ontario-date-input/utils/date-validation-utils.d.ts +14 -0
- package/package.json +3 -3
- package/src/components/ontario-date-input/test/ontario-date-input.spec.tsx +76 -0
- package/src/components/ontario-date-input/utils/date-validation-utils.ts +18 -4
- package/src/config.json +1 -4
- package/src/utils/helper/utils.spec.ts +127 -1
- package/src/utils/helper/utils.ts +4 -2
- package/www/build/ontario-design-system-components.esm.js +1 -1
- package/www/build/p-103a233b.js.map +1 -1
- package/www/build/{p-9c3a1be9.entry.js → p-ac4e76b2.entry.js} +8 -6
- package/www/build/p-ac4e76b2.entry.js.map +1 -0
- package/www/build/{p-84035ac3.js → p-c9a9b857.js} +1 -1
- package/www/fonts/open-sans-400/LICENSE.txt +0 -0
- package/www/fonts/open-sans-400/open-sans-400.eot +0 -0
- package/www/fonts/open-sans-400/open-sans-400.svg +0 -0
- package/www/fonts/open-sans-400/open-sans-400.ttf +0 -0
- package/www/fonts/open-sans-400/open-sans-400.woff +0 -0
- package/www/fonts/open-sans-400/open-sans-400.woff2 +0 -0
- package/www/fonts/open-sans-700/LICENSE.txt +0 -0
- package/www/fonts/open-sans-700/open-sans-700.eot +0 -0
- package/www/fonts/open-sans-700/open-sans-700.svg +0 -0
- package/www/fonts/open-sans-700/open-sans-700.ttf +0 -0
- package/www/index.html +2 -2
- package/dist/ontario-design-system-components/p-9c3a1be9.entry.js.map +0 -1
- package/www/build/p-9c3a1be9.entry.js.map +0 -1
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { newSpecPage } from '@stencil/core/testing';
|
|
2
2
|
import { OntarioDateInput } from '../ontario-date-input';
|
|
3
|
+
import { isInvalidYear } from '../utils';
|
|
3
4
|
describe('ontario-date-input', () => {
|
|
4
5
|
it('renders deafult state', async () => {
|
|
5
6
|
const page = await newSpecPage({
|
|
@@ -117,4 +118,61 @@ describe('ontario-date-input', () => {
|
|
|
117
118
|
`);
|
|
118
119
|
});
|
|
119
120
|
});
|
|
121
|
+
describe('date-validation-utils', () => {
|
|
122
|
+
it('is invalid year value - undefined string', () => {
|
|
123
|
+
// Note: Type system doesn't like `undefined` as `any` lets us force it for testing purposes
|
|
124
|
+
const value = undefined;
|
|
125
|
+
const isInvalidYearResult = isInvalidYear(value);
|
|
126
|
+
expect(isInvalidYearResult).toEqual(true);
|
|
127
|
+
});
|
|
128
|
+
it('is invalid year value - null string', () => {
|
|
129
|
+
// Note: Type system doesn't like `null` as `any` lets us force it for testing purposes
|
|
130
|
+
const value = null;
|
|
131
|
+
const isInvalidYearResult = isInvalidYear(value);
|
|
132
|
+
expect(isInvalidYearResult).toEqual(true);
|
|
133
|
+
});
|
|
134
|
+
it('is invalid year value - empty string', () => {
|
|
135
|
+
const value = ''; // Empty string
|
|
136
|
+
const isInvalidYearResult = isInvalidYear(value);
|
|
137
|
+
expect(isInvalidYearResult).toEqual(true);
|
|
138
|
+
});
|
|
139
|
+
it('is invalid year value - written out number', () => {
|
|
140
|
+
const value = 'two-thousand';
|
|
141
|
+
const isInvalidYearResult = isInvalidYear(value);
|
|
142
|
+
expect(isInvalidYearResult).toEqual(true);
|
|
143
|
+
});
|
|
144
|
+
it('is valid year value', () => {
|
|
145
|
+
const value = '2000';
|
|
146
|
+
const isValidYear = !isInvalidYear(value);
|
|
147
|
+
expect(isValidYear).toEqual(true);
|
|
148
|
+
});
|
|
149
|
+
it('is valid year when in range', () => {
|
|
150
|
+
const value = '2000';
|
|
151
|
+
const minYear = 1;
|
|
152
|
+
const maxYear = 9999;
|
|
153
|
+
const isValidYear = !isInvalidYear(value, minYear, maxYear);
|
|
154
|
+
expect(isValidYear).toEqual(true);
|
|
155
|
+
});
|
|
156
|
+
it('is valid year when in range but is minYear', () => {
|
|
157
|
+
const value = '2000';
|
|
158
|
+
const minYear = 2000;
|
|
159
|
+
const maxYear = 9999;
|
|
160
|
+
const isValidYear = !isInvalidYear(value, minYear, maxYear);
|
|
161
|
+
expect(isValidYear).toEqual(true);
|
|
162
|
+
});
|
|
163
|
+
it('is valid year when in range but is maxYear', () => {
|
|
164
|
+
const value = '2000';
|
|
165
|
+
const minYear = 1;
|
|
166
|
+
const maxYear = 2000;
|
|
167
|
+
const isValidYear = !isInvalidYear(value, minYear, maxYear);
|
|
168
|
+
expect(isValidYear).toEqual(true);
|
|
169
|
+
});
|
|
170
|
+
it('is invalid year when out of range', () => {
|
|
171
|
+
const value = '2000';
|
|
172
|
+
const minYear = 1;
|
|
173
|
+
const maxYear = 1999;
|
|
174
|
+
const isValidYear = !isInvalidYear(value, minYear, maxYear);
|
|
175
|
+
expect(isValidYear).toEqual(false);
|
|
176
|
+
});
|
|
177
|
+
});
|
|
120
178
|
//# sourceMappingURL=ontario-date-input.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ontario-date-input.spec.js","sourceRoot":"","sources":["../../../../src/components/ontario-date-input/test/ontario-date-input.spec.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE;IACnC,EAAE,CAAC,uBAAuB,EAAE,KAAK,IAAI,EAAE;QACtC,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC9B,UAAU,EAAE,CAAC,gBAAgB,CAAC;YAC9B,IAAI,EAAE,sFAAsF;SAC5F,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAgD3B,CAAC,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;QAC1C,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC;YAC9B,UAAU,EAAE,CAAC,gBAAgB,CAAC;YAC9B,IAAI,EAAE;;;;;;;;;;;IAWL;SACD,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0C7B,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC,CAAC,CAAC","sourcesContent":["import { newSpecPage } from '@stencil/core/testing';\nimport { OntarioDateInput } from '../ontario-date-input';\n\ndescribe('ontario-date-input', () => {\n\tit('renders deafult state', async () => {\n\t\tconst page = await newSpecPage({\n\t\t\tcomponents: [OntarioDateInput],\n\t\t\thtml: `<ontario-date-input language=\"en\" element-id=\"date-id-example\"></ontario-date-input>`,\n\t\t});\n\t\texpect(page.root).toEqualHtml(`\n\t\t\t<ontario-date-input element-id=\"date-id-example\" language=\"en\">\n\t\t\t\t<mock:shadow-root>\n\t\t\t\t\t<div class=\"ontario-form-group\">\n\t\t\t\t\t\t<fieldset class=\"ontario-fieldset\" role=\"group\">\n\t\t\t\t\t\t\t<legend class=\"ontario-fieldset__legend\">\n\t\t\t\t\t\t\t\tExact date\n\t\t\t\t\t\t\t\t<span class=\"ontario-label__flag\">\n\t\t\t\t\t\t\t\t\t(optional)\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</legend>\n\t\t\t\t\t\t\t<div class=\"ontario-error-messaging ontario-error__hidden\" role=\"alert\">\n\t\t\t\t\t\t\t\t<ontario-icon-alert-error></ontario-icon-alert-error>\n\t\t\t\t\t\t\t\t<div class=\"ontario-error-messaging__content\"></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"ontario-date__group\">\n\t\t\t\t\t\t\t\t<div class=\"ontario-date__group-input\">\n\t\t\t\t\t\t\t\t\t<label htmlfor=\"year-date-id-example\">\n\t\t\t\t\t\t\t\t\t\tYear\n\t\t\t\t\t\t\t\t\t\t<span class=\"ontario-show-for-sr\">\n\t\t\t\t\t\t\t\t\t\t\t(1 or 2 digits)\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t<input aria-describedby=\"date-input-hint-date-id-example\" class=\"ontario-input ontario-input--4-char-width\" id=\"year-date-id-example\" inputmode=\"numeric\" type=\"text\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"ontario-date__group-input\">\n\t\t\t\t\t\t\t\t\t<label htmlfor=\"month-date-id-example\">\n\t\t\t\t\t\t\t\t\t\tMonth\n\t\t\t\t\t\t\t\t\t\t<span class=\"ontario-show-for-sr\">\n\t\t\t\t\t\t\t\t\t\t\t(1 or 2 digits)\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t<input aria-describedby=\"date-input-hint-date-id-example\" class=\"ontario-input ontario-input--4-char-width\" id=\"month-date-id-example\" inputmode=\"numeric\" type=\"text\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"ontario-date__group-input\">\n\t\t\t\t\t\t\t\t\t<label htmlfor=\"day-date-id-example\">\n\t\t\t\t\t\t\t\t\t\tDay\n\t\t\t\t\t\t\t\t\t\t<span class=\"ontario-show-for-sr\">\n\t\t\t\t\t\t\t\t\t\t\t(4 digits)\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t<input aria-describedby=\"date-input-hint-date-id-example\" class=\"ontario-input ontario-input--4-char-width\" id=\"day-date-id-example\" inputmode=\"numeric\" type=\"text\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</fieldset>\n\t\t\t\t\t</div>\n\t\t\t\t</mock:shadow-root>\n\t\t\t</ontario-date-input>\n `);\n\t});\n\n\tit('should render custom prop', async () => {\n\t\tconst page = await newSpecPage({\n\t\t\tcomponents: [OntarioDateInput],\n\t\t\thtml: `\n\t\t\t\t<ontario-date-input\n\t\t\t\t\telement-id=\"date-id-example\"\n\t\t\t\t\tplaceholder='{ \"day\": \"D\", \"month\": \"M\", \"year\": \"YY\" }'\n\t\t\t\t\tmin-year=\"500\"\n\t\t\t\t\tmax-year=\"1000\"\n\t\t\t\t\trequired=\"true\"\n\t\t\t\t\thint-text=\"Example 1990 12\"\n\t\t\t\t\tdate-options='[\"month\", \"year\"]'\n\t\t\t\t\tcaption='{ \"captionText\": \"Enter Date\", \"captionType\": \"default\" }'\n\t\t\t\t></ontario-date-input>\n\t\t\t`,\n\t\t});\n\n\t\texpect(page.root).toEqualHtml(`\n\t\t\t<ontario-date-input element-id=\"date-id-example\" caption=\"{ "captionText": "Enter Date", "captionType": "default" }\" date-options=\"["month", "year"]\" hint-text=\"Example 1990 12\" max-year=\"1000\" min-year=\"500\" placeholder=\"{ "day": "D", "month": "M", "year": "YY" }\" required=\"true\">\n\t\t\t\t<mock:shadow-root>\n\t\t\t\t\t<div class=\"ontario-form-group\">\n\t\t\t\t\t\t<fieldset class=\"ontario-fieldset\" role=\"group\">\n\t\t\t\t\t\t\t<legend class=\"ontario-fieldset__legend\">\n\t\t\t\t\t\t\t\tEnter Date\n\t\t\t\t\t\t\t\t<span class=\"ontario-label__flag\">\n\t\t\t\t\t\t\t\t\t(required)\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</legend>\n\t\t\t\t\t\t\t<p class=\"ontario-hint\" id=\"date-input-hint-date-id-example\">\n\t\t\t\t\t\t\t\tExample 1990 12\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<div class=\"ontario-error-messaging ontario-error__hidden\" role=\"alert\">\n\t\t\t\t\t\t\t\t<ontario-icon-alert-error></ontario-icon-alert-error>\n\t\t\t\t\t\t\t\t<div class=\"ontario-error-messaging__content\"></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"ontario-date__group\">\n\t\t\t\t\t\t\t\t<div class=\"ontario-date__group-input\">\n\t\t\t\t\t\t\t\t\t<label htmlfor=\"year-date-id-example\">\n\t\t\t\t\t\t\t\t\t\tYear\n\t\t\t\t\t\t\t\t\t\t<span class=\"ontario-show-for-sr\">\n\t\t\t\t\t\t\t\t\t\t\t(1 or 2 digits)\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t<input aria-describedby=\"date-input-hint-date-id-example\" class=\"ontario-input ontario-input--4-char-width\" id=\"year-date-id-example\" inputmode=\"numeric\" placeholder=\"YY\" required=\"\" type=\"text\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"ontario-date__group-input\">\n\t\t\t\t\t\t\t\t\t<label htmlfor=\"month-date-id-example\">\n\t\t\t\t\t\t\t\t\t\tMonth\n\t\t\t\t\t\t\t\t\t\t<span class=\"ontario-show-for-sr\">\n\t\t\t\t\t\t\t\t\t\t\t(1 or 2 digits)\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t<input aria-describedby=\"date-input-hint-date-id-example\" class=\"ontario-input ontario-input--4-char-width\" id=\"month-date-id-example\" inputmode=\"numeric\" placeholder=\"M\" required=\"\" type=\"text\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</fieldset>\n\t\t\t\t\t</div>\n\t\t\t\t</mock:shadow-root>\n\t\t\t</ontario-date-input>\n\t\t`);\n\t});\n});\n"]}
|
|
1
|
+
{"version":3,"file":"ontario-date-input.spec.js","sourceRoot":"","sources":["../../../../src/components/ontario-date-input/test/ontario-date-input.spec.tsx"],"names":[],"mappings":"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","sourcesContent":["import { newSpecPage } from '@stencil/core/testing';\nimport { OntarioDateInput } from '../ontario-date-input';\nimport { isInvalidYear } from '../utils';\n\ndescribe('ontario-date-input', () => {\n\tit('renders deafult state', async () => {\n\t\tconst page = await newSpecPage({\n\t\t\tcomponents: [OntarioDateInput],\n\t\t\thtml: `<ontario-date-input language=\"en\" element-id=\"date-id-example\"></ontario-date-input>`,\n\t\t});\n\t\texpect(page.root).toEqualHtml(`\n\t\t\t<ontario-date-input element-id=\"date-id-example\" language=\"en\">\n\t\t\t\t<mock:shadow-root>\n\t\t\t\t\t<div class=\"ontario-form-group\">\n\t\t\t\t\t\t<fieldset class=\"ontario-fieldset\" role=\"group\">\n\t\t\t\t\t\t\t<legend class=\"ontario-fieldset__legend\">\n\t\t\t\t\t\t\t\tExact date\n\t\t\t\t\t\t\t\t<span class=\"ontario-label__flag\">\n\t\t\t\t\t\t\t\t\t(optional)\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</legend>\n\t\t\t\t\t\t\t<div class=\"ontario-error-messaging ontario-error__hidden\" role=\"alert\">\n\t\t\t\t\t\t\t\t<ontario-icon-alert-error></ontario-icon-alert-error>\n\t\t\t\t\t\t\t\t<div class=\"ontario-error-messaging__content\"></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"ontario-date__group\">\n\t\t\t\t\t\t\t\t<div class=\"ontario-date__group-input\">\n\t\t\t\t\t\t\t\t\t<label htmlfor=\"year-date-id-example\">\n\t\t\t\t\t\t\t\t\t\tYear\n\t\t\t\t\t\t\t\t\t\t<span class=\"ontario-show-for-sr\">\n\t\t\t\t\t\t\t\t\t\t\t(1 or 2 digits)\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t<input aria-describedby=\"date-input-hint-date-id-example\" class=\"ontario-input ontario-input--4-char-width\" id=\"year-date-id-example\" inputmode=\"numeric\" type=\"text\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"ontario-date__group-input\">\n\t\t\t\t\t\t\t\t\t<label htmlfor=\"month-date-id-example\">\n\t\t\t\t\t\t\t\t\t\tMonth\n\t\t\t\t\t\t\t\t\t\t<span class=\"ontario-show-for-sr\">\n\t\t\t\t\t\t\t\t\t\t\t(1 or 2 digits)\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t<input aria-describedby=\"date-input-hint-date-id-example\" class=\"ontario-input ontario-input--4-char-width\" id=\"month-date-id-example\" inputmode=\"numeric\" type=\"text\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"ontario-date__group-input\">\n\t\t\t\t\t\t\t\t\t<label htmlfor=\"day-date-id-example\">\n\t\t\t\t\t\t\t\t\t\tDay\n\t\t\t\t\t\t\t\t\t\t<span class=\"ontario-show-for-sr\">\n\t\t\t\t\t\t\t\t\t\t\t(4 digits)\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t<input aria-describedby=\"date-input-hint-date-id-example\" class=\"ontario-input ontario-input--4-char-width\" id=\"day-date-id-example\" inputmode=\"numeric\" type=\"text\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</fieldset>\n\t\t\t\t\t</div>\n\t\t\t\t</mock:shadow-root>\n\t\t\t</ontario-date-input>\n `);\n\t});\n\n\tit('should render custom prop', async () => {\n\t\tconst page = await newSpecPage({\n\t\t\tcomponents: [OntarioDateInput],\n\t\t\thtml: `\n\t\t\t\t<ontario-date-input\n\t\t\t\t\telement-id=\"date-id-example\"\n\t\t\t\t\tplaceholder='{ \"day\": \"D\", \"month\": \"M\", \"year\": \"YY\" }'\n\t\t\t\t\tmin-year=\"500\"\n\t\t\t\t\tmax-year=\"1000\"\n\t\t\t\t\trequired=\"true\"\n\t\t\t\t\thint-text=\"Example 1990 12\"\n\t\t\t\t\tdate-options='[\"month\", \"year\"]'\n\t\t\t\t\tcaption='{ \"captionText\": \"Enter Date\", \"captionType\": \"default\" }'\n\t\t\t\t></ontario-date-input>\n\t\t\t`,\n\t\t});\n\n\t\texpect(page.root).toEqualHtml(`\n\t\t\t<ontario-date-input element-id=\"date-id-example\" caption=\"{ "captionText": "Enter Date", "captionType": "default" }\" date-options=\"["month", "year"]\" hint-text=\"Example 1990 12\" max-year=\"1000\" min-year=\"500\" placeholder=\"{ "day": "D", "month": "M", "year": "YY" }\" required=\"true\">\n\t\t\t\t<mock:shadow-root>\n\t\t\t\t\t<div class=\"ontario-form-group\">\n\t\t\t\t\t\t<fieldset class=\"ontario-fieldset\" role=\"group\">\n\t\t\t\t\t\t\t<legend class=\"ontario-fieldset__legend\">\n\t\t\t\t\t\t\t\tEnter Date\n\t\t\t\t\t\t\t\t<span class=\"ontario-label__flag\">\n\t\t\t\t\t\t\t\t\t(required)\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</legend>\n\t\t\t\t\t\t\t<p class=\"ontario-hint\" id=\"date-input-hint-date-id-example\">\n\t\t\t\t\t\t\t\tExample 1990 12\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t<div class=\"ontario-error-messaging ontario-error__hidden\" role=\"alert\">\n\t\t\t\t\t\t\t\t<ontario-icon-alert-error></ontario-icon-alert-error>\n\t\t\t\t\t\t\t\t<div class=\"ontario-error-messaging__content\"></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"ontario-date__group\">\n\t\t\t\t\t\t\t\t<div class=\"ontario-date__group-input\">\n\t\t\t\t\t\t\t\t\t<label htmlfor=\"year-date-id-example\">\n\t\t\t\t\t\t\t\t\t\tYear\n\t\t\t\t\t\t\t\t\t\t<span class=\"ontario-show-for-sr\">\n\t\t\t\t\t\t\t\t\t\t\t(1 or 2 digits)\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t<input aria-describedby=\"date-input-hint-date-id-example\" class=\"ontario-input ontario-input--4-char-width\" id=\"year-date-id-example\" inputmode=\"numeric\" placeholder=\"YY\" required=\"\" type=\"text\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"ontario-date__group-input\">\n\t\t\t\t\t\t\t\t\t<label htmlfor=\"month-date-id-example\">\n\t\t\t\t\t\t\t\t\t\tMonth\n\t\t\t\t\t\t\t\t\t\t<span class=\"ontario-show-for-sr\">\n\t\t\t\t\t\t\t\t\t\t\t(1 or 2 digits)\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t\t<input aria-describedby=\"date-input-hint-date-id-example\" class=\"ontario-input ontario-input--4-char-width\" id=\"month-date-id-example\" inputmode=\"numeric\" placeholder=\"M\" required=\"\" type=\"text\">\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</fieldset>\n\t\t\t\t\t</div>\n\t\t\t\t</mock:shadow-root>\n\t\t\t</ontario-date-input>\n\t\t`);\n\t});\n});\n\ndescribe('date-validation-utils', () => {\n\tit('is invalid year value - undefined string', () => {\n\t\t// Note: Type system doesn't like `undefined` as `any` lets us force it for testing purposes\n\t\tconst value: any = undefined;\n\n\t\tconst isInvalidYearResult = isInvalidYear(value);\n\t\texpect(isInvalidYearResult).toEqual(true);\n\t});\n\n\tit('is invalid year value - null string', () => {\n\t\t// Note: Type system doesn't like `null` as `any` lets us force it for testing purposes\n\t\tconst value: any = null;\n\n\t\tconst isInvalidYearResult = isInvalidYear(value);\n\t\texpect(isInvalidYearResult).toEqual(true);\n\t});\n\n\tit('is invalid year value - empty string', () => {\n\t\tconst value = ''; // Empty string\n\n\t\tconst isInvalidYearResult = isInvalidYear(value);\n\t\texpect(isInvalidYearResult).toEqual(true);\n\t});\n\n\tit('is invalid year value - written out number', () => {\n\t\tconst value = 'two-thousand';\n\n\t\tconst isInvalidYearResult = isInvalidYear(value);\n\t\texpect(isInvalidYearResult).toEqual(true);\n\t});\n\n\tit('is valid year value', () => {\n\t\tconst value = '2000';\n\n\t\tconst isValidYear = !isInvalidYear(value);\n\t\texpect(isValidYear).toEqual(true);\n\t});\n\n\tit('is valid year when in range', () => {\n\t\tconst value = '2000';\n\t\tconst minYear = 1;\n\t\tconst maxYear = 9999;\n\n\t\tconst isValidYear = !isInvalidYear(value, minYear, maxYear);\n\t\texpect(isValidYear).toEqual(true);\n\t});\n\n\tit('is valid year when in range but is minYear', () => {\n\t\tconst value = '2000';\n\t\tconst minYear = 2000;\n\t\tconst maxYear = 9999;\n\n\t\tconst isValidYear = !isInvalidYear(value, minYear, maxYear);\n\t\texpect(isValidYear).toEqual(true);\n\t});\n\n\tit('is valid year when in range but is maxYear', () => {\n\t\tconst value = '2000';\n\t\tconst minYear = 1;\n\t\tconst maxYear = 2000;\n\n\t\tconst isValidYear = !isInvalidYear(value, minYear, maxYear);\n\t\texpect(isValidYear).toEqual(true);\n\t});\n\n\tit('is invalid year when out of range', () => {\n\t\tconst value = '2000';\n\t\tconst minYear = 1;\n\t\tconst maxYear = 1999;\n\n\t\tconst isValidYear = !isInvalidYear(value, minYear, maxYear);\n\t\texpect(isValidYear).toEqual(false);\n\t});\n});\n"]}
|
|
@@ -27,15 +27,25 @@ const isInvalidMonth = (value) => {
|
|
|
27
27
|
const month = Number(value);
|
|
28
28
|
return month < MONTH_MIN_VALUE || month > MONTH_MAX_VALUE;
|
|
29
29
|
};
|
|
30
|
-
|
|
31
|
-
*
|
|
30
|
+
/**
|
|
31
|
+
* Valid value year against minimum and maximum year range (defaulted if not provided.)
|
|
32
|
+
*
|
|
33
|
+
* Year field should be a number and not written out; it has no concept of positive and negative.
|
|
34
|
+
*
|
|
35
|
+
* Suggestion:
|
|
36
|
+
* - `< 0` B.C.E.
|
|
37
|
+
* - `>= 0` A.C.E.
|
|
38
|
+
*
|
|
39
|
+
* @param value value to check for validity
|
|
40
|
+
* @param minYear minimum valid year to validate against
|
|
41
|
+
* @param maxYear maximum valid year to validate against
|
|
32
42
|
*/
|
|
33
|
-
const isInvalidYear = (value, minYear = YEAR_MIN_VALUE, maxYear = YEAR_MAX_VALUE) => {
|
|
43
|
+
export const isInvalidYear = (value, minYear = YEAR_MIN_VALUE, maxYear = YEAR_MAX_VALUE) => {
|
|
34
44
|
if (!isNumber(value)) {
|
|
35
45
|
return true;
|
|
36
46
|
}
|
|
37
47
|
const year = Number(value);
|
|
38
|
-
return year
|
|
48
|
+
return year < minYear || year > maxYear;
|
|
39
49
|
};
|
|
40
50
|
/**
|
|
41
51
|
* Helper function to get error message for birthdate validation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date-validation-utils.js","sourceRoot":"","sources":["../../../../src/components/ontario-date-input/utils/date-validation-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,aAAa,EACb,aAAa,EACb,eAAe,EACf,eAAe,EACf,cAAc,EACd,cAAc,GACd,MAAM,cAAc,CAAC;AAEtB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEhE;;GAEG;AACH,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,EAAE;IACtC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE1B,OAAO,GAAG,GAAG,aAAa,IAAI,GAAG,GAAG,aAAa,CAAC;AACnD,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,EAAE;IACxC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAE5B,OAAO,KAAK,GAAG,eAAe,IAAI,KAAK,GAAG,eAAe,CAAC;AAC3D,CAAC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"date-validation-utils.js","sourceRoot":"","sources":["../../../../src/components/ontario-date-input/utils/date-validation-utils.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n\tDAY_MIN_VALUE,\n\tDAY_MAX_VALUE,\n\tMONTH_MIN_VALUE,\n\tMONTH_MAX_VALUE,\n\tYEAR_MIN_VALUE,\n\tYEAR_MAX_VALUE,\n} from '../constants';\nimport { DateValidatorReturnType } from '../ontario-date-input-interface';\nimport { isNumber, isEmpty } from '../../../utils/helper/utils';\nimport { Translations } from '../../../translations';\n/*\n * Day field should be a number, not negative, no greater than “31”\n */\nconst isInvalidDay = (value: string) => {\n\tif (!isNumber(value)) {\n\t\treturn true;\n\t}\n\n\tconst day = Number(value);\n\n\treturn day < DAY_MIN_VALUE || day > DAY_MAX_VALUE;\n};\n\n/*\n * Month field should be a number, not negative, no greater than “12”\n */\nconst isInvalidMonth = (value: string) => {\n\tif (!isNumber(value)) {\n\t\treturn true;\n\t}\n\n\tconst month = Number(value);\n\n\treturn month < MONTH_MIN_VALUE || month > MONTH_MAX_VALUE;\n};\n\n/**\n * Valid value year against minimum and maximum year range (defaulted if not provided.)\n *\n * Year field should be a number and not written out; it has no concept of positive and negative.\n *\n * Suggestion:\n * - `< 0` B.C.E.\n * - `>= 0` A.C.E.\n *\n * @param value value to check for validity\n * @param minYear minimum valid year to validate against\n * @param maxYear maximum valid year to validate against\n */\nexport const isInvalidYear = (\n\tvalue: string | number,\n\tminYear: number = YEAR_MIN_VALUE,\n\tmaxYear: number = YEAR_MAX_VALUE,\n) => {\n\tif (!isNumber(value)) {\n\t\treturn true;\n\t}\n\n\tconst year = Number(value);\n\n\treturn year < minYear || year > maxYear;\n};\n\ntype GetDateErrorArg = {\n\tdayValue: string;\n\tmonthValue: string;\n\tyearValue: string;\n\terrorMessages: Translations['dateInput']['error']['en'];\n\tminYear?: number;\n\tmaxYear?: number;\n\tdayVisible: boolean;\n\tmonthVisible: boolean;\n\tyearVisible: boolean;\n};\n/**\n * Helper function to get error message for birthdate validation\n */\nexport const getDateErrorMessage = ({\n\tdayValue,\n\tmonthValue,\n\tyearValue,\n\terrorMessages,\n\tminYear,\n\tmaxYear,\n\tdayVisible,\n\tmonthVisible,\n\tyearVisible,\n}: GetDateErrorArg): DateValidatorReturnType => {\n\tconst {\n\t\temptyDay,\n\t\temptyMonth,\n\t\temptyYear,\n\t\temptyDayAndMonth,\n\t\temptyDayAndYear,\n\t\temptyMonthAndYear,\n\t\tinvalidDate,\n\t\tinvalidDay,\n\t\tinvalidMonth,\n\t\tinvalidYear,\n\t} = errorMessages;\n\n\tlet error = '';\n\tlet dayInvalid = false;\n\tlet monthInvalid = false;\n\tlet yearInvalid = false;\n\n\tconst isDayEmpty = dayVisible && isEmpty(dayValue);\n\tconst isMonthEmpty = monthVisible && isEmpty(monthValue);\n\tconst isYearEmpty = yearVisible && isEmpty(yearValue);\n\t/*\n\t * If one ore more fields are valid but others are empty:\n\t * 1 field empty:\n\t * Day as empty - “Enter the day.”\n\t * Month as empty - “Enter the month.”\n\t * Year as empty - “Enter the year.”\n\t * 2 fields empty:\n\t * Month and day empty - “Enter the month and day.”\n\t * Year and day empty - “Enter the year and day.”\n\t * Year and month empty - “Enter the year and month.”\n\t */\n\tif (isDayEmpty && isMonthEmpty && isYearEmpty) {\n\t\terror = invalidDate;\n\t\tdayInvalid = true;\n\t\tmonthInvalid = true;\n\t\tyearInvalid = true;\n\t} else if (isDayEmpty && isMonthEmpty) {\n\t\terror = emptyDayAndMonth;\n\t\tdayInvalid = true;\n\t\tmonthInvalid = true;\n\t} else if (isDayEmpty && isYearEmpty) {\n\t\terror = emptyDayAndYear;\n\t\tdayInvalid = true;\n\t\tyearInvalid = true;\n\t} else if (isMonthEmpty && isYearEmpty) {\n\t\terror = emptyMonthAndYear;\n\t\tyearInvalid = true;\n\t\tmonthInvalid = true;\n\t} else if (isDayEmpty) {\n\t\terror = emptyDay;\n\t\tdayInvalid = true;\n\t} else if (isMonthEmpty) {\n\t\terror = emptyMonth;\n\t\tmonthInvalid = true;\n\t} else if (isYearEmpty) {\n\t\terror = emptyYear;\n\t\tyearInvalid = true;\n\t}\n\n\tconst isDayInvalid = dayVisible && isInvalidDay(dayValue);\n\tconst isMonthInvalid = monthVisible && isInvalidMonth(monthValue);\n\tconst isYearInvalid = yearVisible && isInvalidYear(yearValue, minYear, maxYear);\n\t/*\n\t * If only one error, specify where the error occurs\n\t * E.g. “Enter a valid day.”, “Enter a valid month.” Or “Enter a valid year.”\n\t * If 2 or more fields have error (or all 3), say “Enter a valid date.”\n\t * If one or more fields are invalid but the others are empty say: “Enter a valid date.”\n\t */\n\tif (isEmpty(error)) {\n\t\tif (isDayInvalid && isMonthInvalid && isYearInvalid) {\n\t\t\terror = invalidDate;\n\t\t\tdayInvalid = true;\n\t\t\tmonthInvalid = true;\n\t\t\tyearInvalid = true;\n\t\t} else if (isDayInvalid && isMonthInvalid) {\n\t\t\terror = invalidDate;\n\t\t\tdayInvalid = true;\n\t\t\tmonthInvalid = true;\n\t\t} else if (isDayInvalid && isYearInvalid) {\n\t\t\terror = invalidDate;\n\t\t\tdayInvalid = true;\n\t\t\tyearInvalid = true;\n\t\t} else if (isMonthInvalid && isYearInvalid) {\n\t\t\terror = invalidDate;\n\t\t\tmonthInvalid = true;\n\t\t\tyearInvalid = true;\n\t\t} else if (isYearInvalid) {\n\t\t\terror = invalidYear;\n\t\t\tyearInvalid = true;\n\t\t} else if (isMonthInvalid) {\n\t\t\terror = invalidMonth;\n\t\t\tmonthInvalid = true;\n\t\t} else if (isDayInvalid) {\n\t\t\terror = invalidDay;\n\t\t\tdayInvalid = true;\n\t\t}\n\t}\n\n\treturn { errorMessage: error, dayInvalid, monthInvalid, yearInvalid };\n};\n"]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -56,7 +56,8 @@ export function removeObjectsBySpecificKey(objects, key, value) {
|
|
|
56
56
|
* @returns {boolean}
|
|
57
57
|
*/
|
|
58
58
|
export function isNumber(value) {
|
|
59
|
-
|
|
59
|
+
if (value === undefined || value === null) return false;
|
|
60
|
+
return isNaN(Number(value)) === false;
|
|
60
61
|
}
|
|
61
62
|
export function isEmpty(str) {
|
|
62
63
|
return !str || (str === null || str === void 0 ? void 0 : str.length) <= 0;
|
|
@@ -69,7 +70,8 @@ export function isEmpty(str) {
|
|
|
69
70
|
* @returns {string[]}
|
|
70
71
|
*/
|
|
71
72
|
export function retrieveEnumKeys(enumObject) {
|
|
72
|
-
|
|
73
|
+
if (enumObject === undefined || enumObject === null) return new Array(0);
|
|
74
|
+
return Object.keys(enumObject).filter((key) => !isNumber(key));
|
|
73
75
|
}
|
|
74
76
|
/**
|
|
75
77
|
* Prints an array as a comma delimited list, with the last element being preceded by a conjunction.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils/helper/utils.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,MAAM,CAAC,KAAyB,EAAE,MAA0B,EAAE,IAAwB;IACrG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAI,GAAQ,EAAE,GAAY;IAC9D,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,EAAE,CAAC;YAC9C,KAAK,EAAE,CAAC;YACR,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACf,OAAO,IAAI,CAAC;YACb,CAAC;QACF,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAI,OAAY,EAAE,GAAY;IAC/D,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,IAAW,EAAE,OAAiB;IAChE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,OAAO,GAAQ,EAAE,CAAC;QACxB,MAAM,SAAS,GAAQ,EAAE,CAAC;QAE1B,uCAAuC;QACvC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YACjC,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;gBACpB,qCAAqC;gBACrC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;oBAC1B,IAAI,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;wBACzB,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACrC,CAAC;gBACF,CAAC,CAAC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACP,sBAAsB;gBACtB,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YAC5B,CAAC;QACF,CAAC,CAAC,CAAC;QAEH,uBAAS,IAAI,EAAE,OAAO,IAAK,SAAS,EAAG;IACxC,CAAC,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAI,OAAY,EAAE,GAAY,EAAE,KAAuB;IAChG,MAAM,cAAc,GAAQ,EAAE,CAAC;IAC/B,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE;QAC9C,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,KAAK,EAAE,CAAC;YACxB,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzB,OAAO,KAAK,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC;IACb,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAsB;IAC9C,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/utils/helper/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { Conjunction } from './utils-types';\n\nexport function format(first: string | undefined, middle: string | undefined, last: string | undefined): string {\n\treturn (first || '') + (middle ? ` ${middle}` : '') + (last ? ` ${last}` : '');\n}\n\nexport function hasMultipleTrueValues<T>(arr: T[], key: keyof T): boolean {\n\tlet count = 0;\n\n\tfor (const obj of arr) {\n\t\tif (obj[key] === true || obj[key] === 'true') {\n\t\t\tcount++;\n\t\t\tif (count > 1) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false;\n}\n\nexport function extractValuesByKey<T>(objects: T[], key: keyof T): Array<T[keyof T]> {\n\treturn objects.map((obj) => obj[key]);\n}\n\nexport function organizeObjectKeys(data: any[], columns: string[]): any[] {\n\treturn data.map((item) => {\n\t\tconst newData: any = {};\n\t\tconst otherKeys: any = {};\n\n\t\t// Iterate through each key in the item\n\t\tObject.keys(item).forEach((key) => {\n\t\t\tif (key === 'data') {\n\t\t\t\t// Organize keys in the 'data' object\n\t\t\t\tcolumns.forEach((column) => {\n\t\t\t\t\tif (column in item.data) {\n\t\t\t\t\t\tnewData[column] = item.data[column];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Preserve other keys\n\t\t\t\totherKeys[key] = item[key];\n\t\t\t}\n\t\t});\n\n\t\treturn { data: newData, ...otherKeys };\n\t});\n}\n\nexport function removeObjectsBySpecificKey<T>(objects: T[], key: keyof T, value: boolean | 'true'): [T[], T[]] {\n\tconst removedObjects: T[] = [];\n\tconst filteredObjects = objects.filter((obj) => {\n\t\tif (obj[key] === value) {\n\t\t\tremovedObjects.push(obj);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t});\n\treturn [filteredObjects, removedObjects];\n}\n\n/**\n * Takes an input value and determines whether or not it is a number.\n *\n * @param {string | number} value - The value you would like to test against.\n *\n * @returns {boolean}\n */\nexport function isNumber(value: string | number): boolean {\n\tif (value === undefined || value === null) return false;\n\treturn isNaN(Number(value)) === false;\n}\n\nexport function isEmpty(str: string | undefined | null): boolean {\n\treturn !str || str?.length <= 0;\n}\n\n/**\n * Retrieves the keys from an enum and lists them in an array.\n *\n * @param {object} enumObject - The enum you wish to get the keys of.\n *\n * @returns {string[]}\n */\nexport function retrieveEnumKeys(enumObject: object): string[] {\n\tif (enumObject === undefined || enumObject === null) return new Array<string>(0);\n\treturn Object.keys(enumObject).filter((key) => !isNumber(key));\n}\n\n/**\n * Prints an array as a comma delimited list, with the last element being preceded by a conjunction.\n * As per ontario.ca content guidelines, there is no Oxford comma.\n *\n * @param {Array<any>} arr - The array that you wish to print.\n * @param {Conjunction} conjunctionType - Whether you want the sentence to end with 'and value.' or 'or value.'\n *\n * @returns {string}\n */\nexport function printArray(arr: Array<any>, conjunctionType: Conjunction = 'and'): string {\n\treturn [...arr].reduce(\n\t\t(text, value, i, array) => text + (i < array.length - 1 ? ', ' : ` ${conjunctionType} `) + value,\n\t);\n}\n\n/**\n * Grabs the HTML element of the page.\n *\n * More targetted than document.documentElement as the documentElement could\n * in theory be any element that is the top level. e.g. <div> if the page is not\n * set up to be semantically correct.\n *\n * @returns {HTMLElement}\n */\nexport function getRootHTMLElement(): HTMLElement {\n\treturn document.getElementsByTagName('html')[0];\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { format } from './utils';
|
|
1
|
+
import { format, isNumber, retrieveEnumKeys } from './utils';
|
|
2
2
|
describe('format', () => {
|
|
3
3
|
it('returns empty string for no names defined', () => {
|
|
4
4
|
expect(format(undefined, undefined, undefined)).toEqual('');
|
|
@@ -13,4 +13,102 @@ describe('format', () => {
|
|
|
13
13
|
expect(format('Joseph', 'Quincy', 'Publique')).toEqual('Joseph Quincy Publique');
|
|
14
14
|
});
|
|
15
15
|
});
|
|
16
|
+
describe('isNumber', () => {
|
|
17
|
+
it('should return false if value is undefined', () => {
|
|
18
|
+
const value = undefined;
|
|
19
|
+
const result = isNumber(value);
|
|
20
|
+
expect(result).toEqual(false);
|
|
21
|
+
});
|
|
22
|
+
it('should return false if value that is null', () => {
|
|
23
|
+
const value = null;
|
|
24
|
+
const result = isNumber(value);
|
|
25
|
+
expect(result).toEqual(false);
|
|
26
|
+
});
|
|
27
|
+
it('should return true if value is a number', () => {
|
|
28
|
+
const value = 2000;
|
|
29
|
+
const result = isNumber(value);
|
|
30
|
+
expect(result).toEqual(true);
|
|
31
|
+
});
|
|
32
|
+
it('should return true if value is a number as a string', () => {
|
|
33
|
+
const value = '2000';
|
|
34
|
+
const result = isNumber(value);
|
|
35
|
+
expect(result).toEqual(true);
|
|
36
|
+
});
|
|
37
|
+
it('should return false if value is not a number string', () => {
|
|
38
|
+
const value = 'two-thousand';
|
|
39
|
+
const result = isNumber(value);
|
|
40
|
+
expect(result).toEqual(false);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
describe('isNumber', () => {
|
|
44
|
+
it('should return false if value is undefined', () => {
|
|
45
|
+
const value = undefined;
|
|
46
|
+
const result = isNumber(value);
|
|
47
|
+
expect(result).toEqual(false);
|
|
48
|
+
});
|
|
49
|
+
it('should return false if value that is null', () => {
|
|
50
|
+
const value = null;
|
|
51
|
+
const result = isNumber(value);
|
|
52
|
+
expect(result).toEqual(false);
|
|
53
|
+
});
|
|
54
|
+
it('should return true if value is a number', () => {
|
|
55
|
+
const value = 2000;
|
|
56
|
+
const result = isNumber(value);
|
|
57
|
+
expect(result).toEqual(true);
|
|
58
|
+
});
|
|
59
|
+
it('should return true if value is a number as a string', () => {
|
|
60
|
+
const value = '2000';
|
|
61
|
+
const result = isNumber(value);
|
|
62
|
+
expect(result).toEqual(true);
|
|
63
|
+
});
|
|
64
|
+
it('should return false if value is not a number string', () => {
|
|
65
|
+
const value = 'two-thousand';
|
|
66
|
+
const result = isNumber(value);
|
|
67
|
+
expect(result).toEqual(false);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
var ColourEnumNumeric;
|
|
71
|
+
(function (ColourEnumNumeric) {
|
|
72
|
+
ColourEnumNumeric[(ColourEnumNumeric['RED'] = 0)] = 'RED';
|
|
73
|
+
ColourEnumNumeric[(ColourEnumNumeric['ORANGE'] = 1)] = 'ORANGE';
|
|
74
|
+
ColourEnumNumeric[(ColourEnumNumeric['YELLOW'] = 2)] = 'YELLOW';
|
|
75
|
+
ColourEnumNumeric[(ColourEnumNumeric['GREEN'] = 3)] = 'GREEN';
|
|
76
|
+
ColourEnumNumeric[(ColourEnumNumeric['BLUE'] = 4)] = 'BLUE';
|
|
77
|
+
ColourEnumNumeric[(ColourEnumNumeric['INDIGO'] = 5)] = 'INDIGO';
|
|
78
|
+
ColourEnumNumeric[(ColourEnumNumeric['VIOLET'] = 6)] = 'VIOLET';
|
|
79
|
+
})(ColourEnumNumeric || (ColourEnumNumeric = {}));
|
|
80
|
+
var ColourEnumString;
|
|
81
|
+
(function (ColourEnumString) {
|
|
82
|
+
ColourEnumString['red'] = 'Red';
|
|
83
|
+
ColourEnumString['orange'] = 'Orange';
|
|
84
|
+
ColourEnumString['yellow'] = 'Yellow';
|
|
85
|
+
ColourEnumString['green'] = 'Green';
|
|
86
|
+
ColourEnumString['blue'] = 'Blue';
|
|
87
|
+
ColourEnumString['indigo'] = 'Indigo';
|
|
88
|
+
ColourEnumString['violet'] = 'Violet';
|
|
89
|
+
})(ColourEnumString || (ColourEnumString = {}));
|
|
90
|
+
describe('retrieveEnumKeys', () => {
|
|
91
|
+
it('should return empty array if enumObject is undefined', () => {
|
|
92
|
+
const expectedResult = new Array(0);
|
|
93
|
+
const enumObject = undefined;
|
|
94
|
+
const result = retrieveEnumKeys(enumObject);
|
|
95
|
+
expect(result).toEqual(expectedResult);
|
|
96
|
+
});
|
|
97
|
+
it('should return empty array if enumObject is null', () => {
|
|
98
|
+
const expectedResult = new Array(0);
|
|
99
|
+
const enumObject = null;
|
|
100
|
+
const result = retrieveEnumKeys(enumObject);
|
|
101
|
+
expect(result).toEqual(expectedResult);
|
|
102
|
+
});
|
|
103
|
+
it('should return keys from numerical enum', () => {
|
|
104
|
+
const expectedResult = ['RED', 'ORANGE', 'YELLOW', 'GREEN', 'BLUE', 'INDIGO', 'VIOLET'];
|
|
105
|
+
const result = retrieveEnumKeys(ColourEnumNumeric);
|
|
106
|
+
expect(result).toEqual(expectedResult);
|
|
107
|
+
});
|
|
108
|
+
it('should return keys from string enum', () => {
|
|
109
|
+
const expectedResult = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'];
|
|
110
|
+
const result = retrieveEnumKeys(ColourEnumString);
|
|
111
|
+
expect(result).toEqual(expectedResult);
|
|
112
|
+
});
|
|
113
|
+
});
|
|
16
114
|
//# sourceMappingURL=utils.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../../../src/utils/helper/utils.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.spec.js","sourceRoot":"","sources":["../../../src/utils/helper/utils.spec.ts"],"names":[],"mappings":"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","sourcesContent":["import { format, isNumber, retrieveEnumKeys } from './utils';\n\ndescribe('format', () => {\n\tit('returns empty string for no names defined', () => {\n\t\texpect(format(undefined, undefined, undefined)).toEqual('');\n\t});\n\n\tit('formats just first names', () => {\n\t\texpect(format('Joseph', undefined, undefined)).toEqual('Joseph');\n\t});\n\n\tit('formats first and last names', () => {\n\t\texpect(format('Joseph', undefined, 'Publique')).toEqual('Joseph Publique');\n\t});\n\n\tit('formats first, middle and last names', () => {\n\t\texpect(format('Joseph', 'Quincy', 'Publique')).toEqual('Joseph Quincy Publique');\n\t});\n});\n\ndescribe('isNumber', () => {\n\tit('should return false if value is undefined', () => {\n\t\tconst value: any = undefined;\n\n\t\tconst result = isNumber(value);\n\t\texpect(result).toEqual(false);\n\t});\n\n\tit('should return false if value that is null', () => {\n\t\tconst value: any = null;\n\n\t\tconst result = isNumber(value);\n\t\texpect(result).toEqual(false);\n\t});\n\n\tit('should return true if value is a number', () => {\n\t\tconst value: number = 2000;\n\n\t\tconst result = isNumber(value);\n\t\texpect(result).toEqual(true);\n\t});\n\n\tit('should return true if value is a number as a string', () => {\n\t\tconst value: string = '2000';\n\n\t\tconst result = isNumber(value);\n\t\texpect(result).toEqual(true);\n\t});\n\n\tit('should return false if value is not a number string', () => {\n\t\tconst value: string = 'two-thousand';\n\n\t\tconst result = isNumber(value);\n\t\texpect(result).toEqual(false);\n\t});\n});\n\ndescribe('isNumber', () => {\n\tit('should return false if value is undefined', () => {\n\t\tconst value: any = undefined;\n\n\t\tconst result = isNumber(value);\n\t\texpect(result).toEqual(false);\n\t});\n\n\tit('should return false if value that is null', () => {\n\t\tconst value: any = null;\n\n\t\tconst result = isNumber(value);\n\t\texpect(result).toEqual(false);\n\t});\n\n\tit('should return true if value is a number', () => {\n\t\tconst value: number = 2000;\n\n\t\tconst result = isNumber(value);\n\t\texpect(result).toEqual(true);\n\t});\n\n\tit('should return true if value is a number as a string', () => {\n\t\tconst value: string = '2000';\n\n\t\tconst result = isNumber(value);\n\t\texpect(result).toEqual(true);\n\t});\n\n\tit('should return false if value is not a number string', () => {\n\t\tconst value: string = 'two-thousand';\n\n\t\tconst result = isNumber(value);\n\t\texpect(result).toEqual(false);\n\t});\n});\n\nenum ColourEnumNumeric {\n\tRED,\n\tORANGE,\n\tYELLOW,\n\tGREEN,\n\tBLUE,\n\tINDIGO,\n\tVIOLET,\n}\n\nenum ColourEnumString {\n\t'red' = 'Red',\n\t'orange' = 'Orange',\n\t'yellow' = 'Yellow',\n\t'green' = 'Green',\n\t'blue' = 'Blue',\n\t'indigo' = 'Indigo',\n\t'violet' = 'Violet',\n}\n\ndescribe('retrieveEnumKeys', () => {\n\tit('should return empty array if enumObject is undefined', () => {\n\t\tconst expectedResult = new Array<string>(0);\n\t\tconst enumObject: any = undefined;\n\n\t\tconst result = retrieveEnumKeys(enumObject);\n\t\texpect(result).toEqual(expectedResult);\n\t});\n\n\tit('should return empty array if enumObject is null', () => {\n\t\tconst expectedResult = new Array<string>(0);\n\t\tconst enumObject: any = null;\n\n\t\tconst result = retrieveEnumKeys(enumObject);\n\t\texpect(result).toEqual(expectedResult);\n\t});\n\n\tit('should return keys from numerical enum', () => {\n\t\tconst expectedResult = ['RED', 'ORANGE', 'YELLOW', 'GREEN', 'BLUE', 'INDIGO', 'VIOLET'];\n\n\t\tconst result = retrieveEnumKeys(ColourEnumNumeric);\n\t\texpect(result).toEqual(expectedResult);\n\t});\n\n\tit('should return keys from string enum', () => {\n\t\tconst expectedResult = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'];\n\n\t\tconst result = retrieveEnumKeys(ColourEnumString);\n\t\texpect(result).toEqual(expectedResult);\n\t});\n});\n"]}
|
|
@@ -89,15 +89,25 @@ const isInvalidMonth = (value) => {
|
|
|
89
89
|
const month = Number(value);
|
|
90
90
|
return month < MONTH_MIN_VALUE || month > MONTH_MAX_VALUE;
|
|
91
91
|
};
|
|
92
|
-
|
|
93
|
-
*
|
|
92
|
+
/**
|
|
93
|
+
* Valid value year against minimum and maximum year range (defaulted if not provided.)
|
|
94
|
+
*
|
|
95
|
+
* Year field should be a number and not written out; it has no concept of positive and negative.
|
|
96
|
+
*
|
|
97
|
+
* Suggestion:
|
|
98
|
+
* - `< 0` B.C.E.
|
|
99
|
+
* - `>= 0` A.C.E.
|
|
100
|
+
*
|
|
101
|
+
* @param value value to check for validity
|
|
102
|
+
* @param minYear minimum valid year to validate against
|
|
103
|
+
* @param maxYear maximum valid year to validate against
|
|
94
104
|
*/
|
|
95
105
|
const isInvalidYear = (value, minYear = YEAR_MIN_VALUE, maxYear = YEAR_MAX_VALUE) => {
|
|
96
106
|
if (!isNumber(value)) {
|
|
97
107
|
return true;
|
|
98
108
|
}
|
|
99
109
|
const year = Number(value);
|
|
100
|
-
return year
|
|
110
|
+
return year < minYear || year > maxYear;
|
|
101
111
|
};
|
|
102
112
|
/**
|
|
103
113
|
* Helper function to get error message for birthdate validation
|