@abgov/jsonforms-components 1.34.4 → 1.35.1

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/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { jsx, Fragment, jsxs } from 'react/jsx-runtime';
2
2
  import React, { createContext, useContext, useReducer, useMemo, useEffect, useState, useRef, useCallback } from 'react';
3
- import { GoAFormItem, GoAInput, GoATextArea, GoACallout, GoAInputDate, GoAInputDateTime, GoAInputTime, GoARadioGroup, GoARadioItem, GoACheckbox, GoAGrid, GoAFormStepper, GoAFormStep, GoAPages, GoAButton, GoAModal, GoAButtonGroup, GoAIconButton, GoAFileUploadInput, GoACircularProgress, GoAContainer, GoADropdown, GoADropdownItem, GoASkeleton, GoADetails } from '@abgov/react-components';
3
+ import { GoAFormItem, GoAInput, GoATextArea, GoACallout, GoAInputDate, GoAInputDateTime, GoAInputTime, GoARadioGroup, GoARadioItem, GoACheckbox, GoAGrid, GoAFormStepper, GoAFormStep, GoAPages, GoAButton, GoAModal, GoAButtonGroup, GoAIconButton, GoAFileUploadInput, GoACircularProgress, GoAContainer, GoADropdown, GoADropdownItem, GoADetails, GoASkeleton } from '@abgov/react-components';
4
4
  import styled from 'styled-components';
5
5
  import axios from 'axios';
6
6
  import get$1 from 'lodash/get';
@@ -7008,6 +7008,188 @@ const validatePostalCode = values => {
7008
7008
  return postalCodeRegex.test(values);
7009
7009
  };
7010
7010
 
7011
+ let _ = t => t,
7012
+ _t;
7013
+ const HelpContentDiv = styled.div(_t || (_t = _`
7014
+ .parent-label {
7015
+ font-size: 24px;
7016
+ margin-bottom: var(--goa-space-m);
7017
+ font-weight: bold;
7018
+ }
7019
+
7020
+ .child-label {
7021
+ font-size: 18px;
7022
+ margin-bottom: var(--goa-space-xs);
7023
+ font-weight: bold;
7024
+ }
7025
+ .parent-margin {
7026
+ margin-bottom: var(--goa-space-l);
7027
+ }
7028
+ .child-margin {
7029
+ margin-bottom: var(--goa-space-2xs);
7030
+ }
7031
+ ul {
7032
+ margin: 0 0 0 var(--goa-space-xs);
7033
+ }
7034
+ .single-line {
7035
+ margin: var(--goa-space-2xs) 0 var(--goa-space-2xs) 0;
7036
+ }
7037
+ `));
7038
+
7039
+ const linkLength = 40;
7040
+ const invalidExtensions = ['exe'];
7041
+ const RenderLink = props => {
7042
+ var _a;
7043
+ const {
7044
+ link,
7045
+ help
7046
+ } = props;
7047
+ const [linkValid, setLinkValid] = useState(null);
7048
+ let error = undefined;
7049
+ let linkLabel = link && (link === null || link === void 0 ? void 0 : link.length) > linkLength ? `${link === null || link === void 0 ? void 0 : link.slice(0, linkLength)}...` : link;
7050
+ let linkUrl = link;
7051
+ if (help) {
7052
+ linkLabel = help;
7053
+ }
7054
+ const count = ((_a = link === null || link === void 0 ? void 0 : link.split('.')) === null || _a === void 0 ? void 0 : _a.length) || 0;
7055
+ const extension = link === null || link === void 0 ? void 0 : link.split('.')[count - 1];
7056
+ if (invalidExtensions.includes(extension || '')) {
7057
+ linkUrl = '';
7058
+ linkLabel = '';
7059
+ error = `Invalid extension: ${extension}`;
7060
+ }
7061
+ useEffect(() => {
7062
+ if (linkUrl) {
7063
+ setLinkValid(isValidHref(linkUrl));
7064
+ }
7065
+ }, [linkUrl]);
7066
+ if (!linkLabel && !error) {
7067
+ linkLabel = 'Link';
7068
+ }
7069
+ if (linkValid === false) {
7070
+ linkLabel = '';
7071
+ error = 'Invalid Link';
7072
+ }
7073
+ return jsx(GoAFormItem, {
7074
+ error: error,
7075
+ label: "",
7076
+ children: jsx("div", {
7077
+ "data-testid": "link-jsonform",
7078
+ children: linkUrl && linkValid ? jsx("div", {
7079
+ children: jsxs("a", {
7080
+ href: link,
7081
+ rel: "noopener noreferrer",
7082
+ target: "_blank",
7083
+ children: [linkLabel, isMailToHref(link !== null && link !== void 0 ? link : '') ? jsx(GoAContextMenuIcon, {
7084
+ type: "mail",
7085
+ title: "Email",
7086
+ testId: "mail-icon"
7087
+ }) : jsx(GoAIconButton, {
7088
+ icon: "open",
7089
+ title: "Open",
7090
+ testId: "open-icon",
7091
+ size: "small"
7092
+ })]
7093
+ })
7094
+ }) : linkLabel
7095
+ })
7096
+ });
7097
+ };
7098
+
7099
+ const HelpContentReviewComponent = () => {
7100
+ return jsx(Fragment, {});
7101
+ };
7102
+ const HelpContentComponent = _a => {
7103
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
7104
+ var {
7105
+ isParent = true,
7106
+ showLabel = true
7107
+ } = _a,
7108
+ props = __rest(_a, ["isParent", "showLabel"]);
7109
+ const labelClass = isParent ? 'parent-label' : 'child-label';
7110
+ const marginClass = isParent ? 'parent-margin' : 'child-margin';
7111
+ // eslint-disable-next-line
7112
+ const {
7113
+ uischema,
7114
+ visible,
7115
+ label
7116
+ } = props;
7117
+ const link = (_b = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _b === void 0 ? void 0 : _b.link;
7118
+ const renderHelp = () => {
7119
+ var _a, _b, _c;
7120
+ return Array.isArray((_a = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _a === void 0 ? void 0 : _a.help) ? jsx("ul", {
7121
+ children: (_b = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _b === void 0 ? void 0 : _b.help.map((line, index) => jsx("li", {
7122
+ children: `${line}`
7123
+ }, index))
7124
+ }) : jsx("p", {
7125
+ className: "single-line",
7126
+ children: (_c = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _c === void 0 ? void 0 : _c.help
7127
+ });
7128
+ };
7129
+ const renderImage = ({
7130
+ height,
7131
+ width,
7132
+ alt,
7133
+ src
7134
+ }) => {
7135
+ return jsx("img", {
7136
+ src: src,
7137
+ width: width,
7138
+ height: height,
7139
+ alt: alt
7140
+ });
7141
+ };
7142
+ const textVariant = !((_c = uischema.options) === null || _c === void 0 ? void 0 : _c.variant) || ((_d = uischema.options) === null || _d === void 0 ? void 0 : _d.variant) !== 'details' && ((_e = uischema.options) === null || _e === void 0 ? void 0 : _e.variant) !== 'hyperlink';
7143
+ return jsx(Visible, {
7144
+ visible: visible,
7145
+ children: jsx(HelpContentDiv, {
7146
+ "aria-label": (_f = uischema.options) === null || _f === void 0 ? void 0 : _f.ariaLabel,
7147
+ children: jsxs("div", {
7148
+ className: marginClass,
7149
+ children: [label && showLabel && (!((_g = uischema.options) === null || _g === void 0 ? void 0 : _g.variant) || ((_h = uischema.options) === null || _h === void 0 ? void 0 : _h.variant) === 'hyperlink') && jsxs("div", {
7150
+ className: labelClass,
7151
+ "data-testid": label,
7152
+ children: [label, jsx("br", {})]
7153
+ }), ((_j = uischema.options) === null || _j === void 0 ? void 0 : _j.variant) && ((_k = uischema.options) === null || _k === void 0 ? void 0 : _k.variant) === 'img' && renderImage(uischema.options), ((_l = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _l === void 0 ? void 0 : _l.variant) && ((_m = uischema.options) === null || _m === void 0 ? void 0 : _m.variant) === 'hyperlink' && link && RenderLink(uischema === null || uischema === void 0 ? void 0 : uischema.options), textVariant && renderHelp(), ((_o = uischema.options) === null || _o === void 0 ? void 0 : _o.variant) && ((_p = uischema.options) === null || _p === void 0 ? void 0 : _p.variant) === 'details' && jsxs(GoADetails, {
7154
+ heading: label ? label : '',
7155
+ mt: "3xs",
7156
+ mb: "none",
7157
+ children: [renderHelp(), (uischema === null || uischema === void 0 ? void 0 : uischema.elements) && ((_q = uischema === null || uischema === void 0 ? void 0 : uischema.elements) === null || _q === void 0 ? void 0 : _q.length) > 0 && jsx(HelpContents, {
7158
+ elements: uischema === null || uischema === void 0 ? void 0 : uischema.elements
7159
+ })]
7160
+ }), (uischema === null || uischema === void 0 ? void 0 : uischema.elements) && (uischema === null || uischema === void 0 ? void 0 : uischema.elements.length) > 0 && ((_r = uischema.options) === null || _r === void 0 ? void 0 : _r.variant) !== 'details' && jsx(HelpContents, {
7161
+ elements: uischema.elements,
7162
+ isParent: false
7163
+ })]
7164
+ })
7165
+ })
7166
+ });
7167
+ };
7168
+ const HelpContents = ({
7169
+ elements,
7170
+ isParent: _isParent = false
7171
+ }) => jsx("div", {
7172
+ children: elements === null || elements === void 0 ? void 0 : elements.map((element, index) => {
7173
+ return jsx(HelpContentComponent, {
7174
+ uischema: element,
7175
+ label: element.label,
7176
+ errors: '',
7177
+ data: undefined,
7178
+ enabled: false,
7179
+ visible: true,
7180
+ path: '',
7181
+ handleChange: () => {},
7182
+ rootSchema: {},
7183
+ id: '',
7184
+ schema: {},
7185
+ isParent: _isParent
7186
+ }, `${element.label}-help-content-${index}`);
7187
+ })
7188
+ });
7189
+ const HelpContentTester = rankWith(1, uiTypeIs('HelpContent'));
7190
+ const HelpContent = withJsonFormsControlProps(HelpContentComponent);
7191
+ const HelpReviewContent = withJsonFormsControlProps(HelpContentReviewComponent);
7192
+
7011
7193
  const ADDRESS_PATH = 'api/gateway/v1/address/v1/find';
7012
7194
  const AddressLookUpControl = props => {
7013
7195
  var _a, _b, _c;
@@ -7044,21 +7226,35 @@ const AddressLookUpControl = props => {
7044
7226
  };
7045
7227
  const handleInputChange = (field, value) => {
7046
7228
  var _a, _b;
7229
+ let newAddress;
7047
7230
  if (field === 'postalCode') {
7048
7231
  const validatePc = validatePostalCode(value);
7049
- if (!validatePc && value.length >= 5) {
7232
+ if (!validatePc && value.length >= 4) {
7050
7233
  const postalCodeErrorMessage = (_b = (_a = schema.errorMessage) === null || _a === void 0 ? void 0 : _a.properties) === null || _b === void 0 ? void 0 : _b.postalCode;
7051
7234
  setPostalCodeErrorMsg(postalCodeErrorMessage !== null && postalCodeErrorMessage !== void 0 ? postalCodeErrorMessage : '');
7052
7235
  } else {
7053
7236
  setPostalCodeErrorMsg('');
7054
7237
  }
7238
+ if (value.length >= 4 && value.indexOf(' ') === -1) {
7239
+ value = value.slice(0, 3) + ' ' + value.slice(3);
7240
+ }
7241
+ newAddress = Object.assign(Object.assign({}, address), {
7242
+ [field]: value.toUpperCase()
7243
+ });
7244
+ } else {
7245
+ newAddress = Object.assign(Object.assign({}, address), {
7246
+ [field]: value
7247
+ });
7055
7248
  }
7056
- const newAddress = Object.assign(Object.assign({}, address), {
7057
- [field]: value
7058
- });
7059
7249
  setAddress(newAddress);
7060
7250
  updateFormData(newAddress);
7061
7251
  };
7252
+ const renderHelp = () => {
7253
+ return jsx(HelpContentComponent, Object.assign({}, props, {
7254
+ isParent: true,
7255
+ showLabel: false
7256
+ }));
7257
+ };
7062
7258
  useEffect(() => {
7063
7259
  const fetchSuggestions = () => __awaiter(void 0, void 0, void 0, function* () {
7064
7260
  if (searchTerm.length > 2) {
@@ -7090,7 +7286,7 @@ const AddressLookUpControl = props => {
7090
7286
  setSuggestions([]);
7091
7287
  };
7092
7288
  return jsxs("div", {
7093
- children: [jsx(GoAFormItem, {
7289
+ children: [renderHelp(), jsx(GoAFormItem, {
7094
7290
  label: label,
7095
7291
  children: jsxs(SearchBox, {
7096
7292
  children: [jsx(GoAInput, {
@@ -7286,187 +7482,6 @@ const GoAGroupControlComponent = props => {
7286
7482
  const GoAGroupLayoutTester = rankWith(1, uiTypeIs('Group'));
7287
7483
  const GoAGroupControl = withJsonFormsLayoutProps(GoAGroupControlComponent, true);
7288
7484
 
7289
- let _ = t => t,
7290
- _t;
7291
- const HelpContentDiv = styled.div(_t || (_t = _`
7292
- .parent-label {
7293
- font-size: 24px;
7294
- margin-bottom: var(--goa-space-m);
7295
- font-weight: bold;
7296
- }
7297
-
7298
- .child-label {
7299
- font-size: 18px;
7300
- margin-bottom: var(--goa-space-xs);
7301
- font-weight: bold;
7302
- }
7303
- .parent-margin {
7304
- margin-bottom: var(--goa-space-l);
7305
- }
7306
- .child-margin {
7307
- margin-bottom: var(--goa-space-2xs);
7308
- }
7309
- ul {
7310
- margin: 0 0 0 var(--goa-space-xs);
7311
- }
7312
- .single-line {
7313
- margin: var(--goa-space-2xs) 0 var(--goa-space-2xs) 0;
7314
- }
7315
- `));
7316
-
7317
- const linkLength = 40;
7318
- const invalidExtensions = ['exe'];
7319
- const RenderLink = props => {
7320
- var _a;
7321
- const {
7322
- link,
7323
- help
7324
- } = props;
7325
- const [linkValid, setLinkValid] = useState(null);
7326
- let error = undefined;
7327
- let linkLabel = link && (link === null || link === void 0 ? void 0 : link.length) > linkLength ? `${link === null || link === void 0 ? void 0 : link.slice(0, linkLength)}...` : link;
7328
- let linkUrl = link;
7329
- if (help) {
7330
- linkLabel = help;
7331
- }
7332
- const count = ((_a = link === null || link === void 0 ? void 0 : link.split('.')) === null || _a === void 0 ? void 0 : _a.length) || 0;
7333
- const extension = link === null || link === void 0 ? void 0 : link.split('.')[count - 1];
7334
- if (invalidExtensions.includes(extension || '')) {
7335
- linkUrl = '';
7336
- linkLabel = '';
7337
- error = `Invalid extension: ${extension}`;
7338
- }
7339
- useEffect(() => {
7340
- if (linkUrl) {
7341
- setLinkValid(isValidHref(linkUrl));
7342
- }
7343
- }, [linkUrl]);
7344
- if (!linkLabel && !error) {
7345
- linkLabel = 'Link';
7346
- }
7347
- if (linkValid === false) {
7348
- linkLabel = '';
7349
- error = 'Invalid Link';
7350
- }
7351
- return jsx(GoAFormItem, {
7352
- error: error,
7353
- label: "",
7354
- children: jsx("div", {
7355
- "data-testid": "link-jsonform",
7356
- children: linkUrl && linkValid ? jsx("div", {
7357
- children: jsxs("a", {
7358
- href: link,
7359
- rel: "noopener noreferrer",
7360
- target: "_blank",
7361
- children: [linkLabel, isMailToHref(link !== null && link !== void 0 ? link : '') ? jsx(GoAContextMenuIcon, {
7362
- type: "mail",
7363
- title: "Email",
7364
- testId: "mail-icon"
7365
- }) : jsx(GoAIconButton, {
7366
- icon: "open",
7367
- title: "Open",
7368
- testId: "open-icon",
7369
- size: "small"
7370
- })]
7371
- })
7372
- }) : linkLabel
7373
- })
7374
- });
7375
- };
7376
-
7377
- const HelpContentReviewComponent = () => {
7378
- return jsx(Fragment, {});
7379
- };
7380
- const HelpContentComponent = _a => {
7381
- var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
7382
- var {
7383
- isParent = true
7384
- } = _a,
7385
- props = __rest(_a, ["isParent"]);
7386
- const labelClass = isParent ? 'parent-label' : 'child-label';
7387
- const marginClass = isParent ? 'parent-margin' : 'child-margin';
7388
- // eslint-disable-next-line
7389
- const {
7390
- uischema,
7391
- visible,
7392
- label
7393
- } = props;
7394
- const link = (_b = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _b === void 0 ? void 0 : _b.link;
7395
- const renderHelp = () => {
7396
- var _a, _b, _c;
7397
- return Array.isArray((_a = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _a === void 0 ? void 0 : _a.help) ? jsx("ul", {
7398
- children: (_b = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _b === void 0 ? void 0 : _b.help.map((line, index) => jsx("li", {
7399
- children: `${line}`
7400
- }, index))
7401
- }) : jsx("p", {
7402
- className: "single-line",
7403
- children: (_c = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _c === void 0 ? void 0 : _c.help
7404
- });
7405
- };
7406
- const renderImage = ({
7407
- height,
7408
- width,
7409
- alt,
7410
- src
7411
- }) => {
7412
- return jsx("img", {
7413
- src: src,
7414
- width: width,
7415
- height: height,
7416
- alt: alt
7417
- });
7418
- };
7419
- const textVariant = !((_c = uischema.options) === null || _c === void 0 ? void 0 : _c.variant) || ((_d = uischema.options) === null || _d === void 0 ? void 0 : _d.variant) !== 'details' && ((_e = uischema.options) === null || _e === void 0 ? void 0 : _e.variant) !== 'hyperlink';
7420
- return jsx(Visible, {
7421
- visible: visible,
7422
- children: jsx(HelpContentDiv, {
7423
- "aria-label": (_f = uischema.options) === null || _f === void 0 ? void 0 : _f.ariaLabel,
7424
- children: jsxs("div", {
7425
- className: marginClass,
7426
- children: [label && (!((_g = uischema.options) === null || _g === void 0 ? void 0 : _g.variant) || ((_h = uischema.options) === null || _h === void 0 ? void 0 : _h.variant) === 'hyperlink') && jsxs("div", {
7427
- className: labelClass,
7428
- "data-testid": label,
7429
- children: [label, jsx("br", {})]
7430
- }), ((_j = uischema.options) === null || _j === void 0 ? void 0 : _j.variant) && ((_k = uischema.options) === null || _k === void 0 ? void 0 : _k.variant) === 'img' && renderImage(uischema.options), ((_l = uischema === null || uischema === void 0 ? void 0 : uischema.options) === null || _l === void 0 ? void 0 : _l.variant) && ((_m = uischema.options) === null || _m === void 0 ? void 0 : _m.variant) === 'hyperlink' && link && RenderLink(uischema === null || uischema === void 0 ? void 0 : uischema.options), textVariant && renderHelp(), ((_o = uischema.options) === null || _o === void 0 ? void 0 : _o.variant) && ((_p = uischema.options) === null || _p === void 0 ? void 0 : _p.variant) === 'details' && jsxs(GoADetails, {
7431
- heading: label ? label : '',
7432
- mt: "3xs",
7433
- mb: "none",
7434
- children: [renderHelp(), (uischema === null || uischema === void 0 ? void 0 : uischema.elements) && ((_q = uischema === null || uischema === void 0 ? void 0 : uischema.elements) === null || _q === void 0 ? void 0 : _q.length) > 0 && jsx(HelpContents, {
7435
- elements: uischema === null || uischema === void 0 ? void 0 : uischema.elements
7436
- })]
7437
- }), (uischema === null || uischema === void 0 ? void 0 : uischema.elements) && (uischema === null || uischema === void 0 ? void 0 : uischema.elements.length) > 0 && ((_r = uischema.options) === null || _r === void 0 ? void 0 : _r.variant) !== 'details' && jsx(HelpContents, {
7438
- elements: uischema.elements,
7439
- isParent: false
7440
- })]
7441
- })
7442
- })
7443
- });
7444
- };
7445
- const HelpContents = ({
7446
- elements,
7447
- isParent: _isParent = false
7448
- }) => jsx("div", {
7449
- children: elements === null || elements === void 0 ? void 0 : elements.map((element, index) => {
7450
- return jsx(HelpContentComponent, {
7451
- uischema: element,
7452
- label: element.label,
7453
- errors: '',
7454
- data: undefined,
7455
- enabled: false,
7456
- visible: true,
7457
- path: '',
7458
- handleChange: () => {},
7459
- rootSchema: {},
7460
- id: '',
7461
- schema: {},
7462
- isParent: _isParent
7463
- }, `${element.label}-help-content-${index}`);
7464
- })
7465
- });
7466
- const HelpContentTester = rankWith(1, uiTypeIs('HelpContent'));
7467
- const HelpContent = withJsonFormsControlProps(HelpContentComponent);
7468
- const HelpReviewContent = withJsonFormsControlProps(HelpContentReviewComponent);
7469
-
7470
7485
  const isNullSchema = schema => {
7471
7486
  return schema === undefined || schema === null;
7472
7487
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@abgov/jsonforms-components",
3
- "version": "1.34.4",
3
+ "version": "1.35.1",
4
4
  "license": "Apache-2.0",
5
5
  "description": "Government of Alberta - React renderers for JSON Forms based on the design system.",
6
6
  "repository": "https://github.com/GovAlta/adsp-monorepo",
@@ -15,12 +15,14 @@ interface CustomControlElement extends ControlElement {
15
15
  options?: OptionProps;
16
16
  elements?: CustomControlElement[];
17
17
  }
18
+ interface ExtraHelpContentProps {
19
+ isParent?: boolean;
20
+ showLabel?: boolean;
21
+ }
18
22
  interface CustomControlProps extends ControlProps {
19
23
  uischema: CustomControlElement;
20
24
  }
21
- export declare const HelpContentComponent: ({ isParent, ...props }: CustomControlProps & {
22
- isParent?: boolean;
23
- }) => JSX.Element;
25
+ export declare const HelpContentComponent: ({ isParent, showLabel, ...props }: CustomControlProps & ExtraHelpContentProps) => JSX.Element;
24
26
  export declare const HelpContentTester: RankedTester;
25
27
  export declare const HelpContent: React.ComponentType<import("@jsonforms/core").OwnPropsOfControl>;
26
28
  export declare const HelpReviewContent: React.ComponentType<import("@jsonforms/core").OwnPropsOfControl>;