@onewelcome/react-lib-components 2.1.0 → 2.2.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/dist/cjs/DataGrid/DataGridActions/DataGridColumnsToggle.cjs.js +1 -1
- package/dist/cjs/Form/Checkbox/Checkbox.cjs.js +1 -1
- package/dist/cjs/Form/Toggle/Toggle.cjs.js +1 -1
- package/dist/cjs/components/Form/Checkbox/Checkbox.d.ts +2 -3
- package/dist/cjs/components/Form/Toggle/Toggle.d.ts +2 -2
- package/dist/esm/DataGrid/DataGridActions/DataGridColumnsToggle.esm.js +1 -1
- package/dist/esm/Form/Checkbox/Checkbox.esm.js +1 -1
- package/dist/esm/Form/Toggle/Toggle.esm.js +1 -1
- package/dist/esm/components/Form/Checkbox/Checkbox.d.ts +2 -3
- package/dist/esm/components/Form/Toggle/Toggle.d.ts +2 -2
- package/package.json +1 -1
- package/src/components/DataGrid/DataGridActions/DataGridColumnsToggle.tsx +2 -3
- package/src/components/Form/Checkbox/Checkbox.test.tsx +16 -5
- package/src/components/Form/Checkbox/Checkbox.tsx +5 -17
- package/src/components/Form/Toggle/Toggle.test.tsx +10 -8
- package/src/components/Form/Toggle/Toggle.tsx +28 -24
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),a=require("../../Button/IconButton.cjs.js"),t=require("../../Form/Toggle/Toggle.cjs.js"),l=require("../../Icon/Icon.cjs.js"),o=require("../../Popover/Popover.cjs.js"),r=require("../../Typography/Typography.cjs.js"),n=require("../../src/util/helper.cjs.js"),c=require("./DataGridColumnsToggle.module.cjs.js"),s=require("react-dom");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=u(e);const i=d.default.forwardRef((({open:u,headers:i,titleLabel:m="Show columns",closeButtonTitle:f="Close show columns dialog",onClose:g,onToggleClicked:p,className:j,domRoot:h=document.body,...v},y)=>{const[T]=e.useState(n.generateID()),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),a=require("../../Button/IconButton.cjs.js"),t=require("../../Form/Toggle/Toggle.cjs.js"),l=require("../../Icon/Icon.cjs.js"),o=require("../../Popover/Popover.cjs.js"),r=require("../../Typography/Typography.cjs.js"),n=require("../../src/util/helper.cjs.js"),c=require("./DataGridColumnsToggle.module.cjs.js"),s=require("react-dom");function u(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var d=u(e);const i=d.default.forwardRef((({open:u,headers:i,titleLabel:m="Show columns",closeButtonTitle:f="Close show columns dialog",onClose:g,onToggleClicked:p,className:j,domRoot:h=document.body,...v},y)=>{const[T]=e.useState(n.generateID()),b=T+"_header",q=i.map((e=>d.default.createElement(t.Toggle,{key:e.name,name:e.name,checked:!e.hidden,onChange:()=>p(e.name),label:e.headline})));return d.default.createElement(o.Popover,{...v,ref:y,className:`${c.default.popover} ${j}`,show:u,role:"dialog","aria-modal":"true","aria-labelledby":b},u&&s.createPortal(d.default.createElement("div",{className:c.default.backdrop,onClick:()=>g()}),h),u&&d.default.createElement(e.Fragment,null,d.default.createElement("div",{className:c.default.header},d.default.createElement(r.Typography,{id:b,className:c.default.title,tag:"span",variant:"h4"},m),d.default.createElement(a.IconButton,{onClick:g,className:`${c.default["close-btn"]}`,title:f},d.default.createElement(l.Icon,{icon:l.Icons.Times}))),d.default.createElement("div",{className:c.default.content},q)))}));exports.DataGridColumnsToggle=i;
|
|
2
2
|
//# sourceMappingURL=DataGridColumnsToggle.cjs.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../../Icon/Icon.cjs.js"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),r=require("../../Icon/Icon.cjs.js"),a=require("./Checkbox.module.cjs.js"),t=require("../../src/hooks/useFormSelector.cjs.js"),o=require("../FormSelectorWrapper/FormSelectorWrapper.cjs.js");function l(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var n=l(e);const c=e=>{var r;return!!(null===(r=null==e?void 0:e.props)||void 0===r?void 0:r["data-toggle"])},d=n.default.forwardRef((({children:l,name:s,helperText:i,helperProps:p,indeterminate:u,parentErrorId:f,errorMessage:m,disabled:h,label:b,parentHelperId:I,className:k,error:x,checked:E=!1,formSelectorWrapperProps:j,onChange:v,...y},g)=>{const{errorId:C,identifier:S,describedBy:q}=t.useFormSelector({name:s,helperText:i,parentErrorId:f,errorMessage:m,error:x,parentHelperId:I});e.useEffect((()=>{if(!s)throw new Error("Please pass a 'name' prop to your <Checkbox> component.");if("object"==typeof l&&!c(l)&&void 0===u)throw new Error("If you have nested checkboxes you have to manage the indeterminate state by passing a boolean to the `indeterminate` prop.")}),[]);const N=[a.default.input,h?a.default.disabled:""];return n.default.createElement(o.FormSelectorWrapper,{...j,className:`${a.default["checkbox-wrapper"]} ${k||""}`,containerProps:{className:a.default["checkbox-container"]},helperText:i,helperProps:p,parentErrorId:f,errorId:C,errorMessage:m,error:x,disabled:h,identifier:S,nestedChildren:"object"==typeof l&&!c(l)&&n.default.createElement("ul",{className:a.default["checkbox-list"]},n.default.Children.map(l,(e=>n.default.createElement("li",null,n.default.createElement(d,{...e.props,parentHelperId:I,parentErrorId:f,error:x,disabled:e.props.disabled?e.props.disabled:h},e.props.children)))))},n.default.createElement("input",{...y,ref:g,disabled:h,className:`${a.default["native-input"]} ${x?a.default.error:""}`,checked:E,onChange:e=>{h||null==v||v(e)},"aria-invalid":x,"aria-checked":u?"mixed":E,"aria-describedby":q,id:`${S}-checkbox`,name:s,type:"checkbox"}),n.default.Children.toArray(l).filter(c),u&&n.default.createElement(r.Icon,{className:N.join(" "),icon:r.Icons.MinusSquare}),E&&!u&&n.default.createElement(r.Icon,{className:N.join(" "),icon:r.Icons.CheckmarkSquare}),!E&&!u&&n.default.createElement(r.Icon,{className:N.join(" "),icon:r.Icons.Square}),n.default.createElement("label",{htmlFor:`${S}-checkbox`},b||("string"==typeof l?l:void 0)))}));exports.Checkbox=d;
|
|
2
2
|
//# sourceMappingURL=Checkbox.cjs.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),a=require("../Checkbox/Checkbox.cjs.js"),l=require("./Toggle.module.cjs.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=t(e);const d=r.default.forwardRef((({
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("react"),a=require("../Checkbox/Checkbox.cjs.js"),l=require("./Toggle.module.cjs.js");function t(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var r=t(e);const d=r.default.forwardRef((({checked:e,disabled:t,helperProps:d,className:c,label:s,...u},o)=>{const f=[l.default["toggle-wrapper"]];return c&&f.push(c),r.default.createElement("div",{className:f.join(" ")},r.default.createElement(a.Checkbox,{...u,ref:o,checked:e,className:l.default.checkbox,helperProps:{className:l.default["toggle-helper"],...d},disabled:t,label:s},r.default.createElement("span",{"data-toggle":"true","aria-hidden":"true",className:`${l.default.toggle} ${e?l.default.checked:""} ${t?l.default.disabled:""} `})))}));exports.Toggle=d;
|
|
2
2
|
//# sourceMappingURL=Toggle.cjs.js.map
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import React, { ComponentPropsWithRef
|
|
1
|
+
import React, { ComponentPropsWithRef } from "react";
|
|
2
2
|
import { Props as FormHelperTextProps } from "../FormHelperText/FormHelperText";
|
|
3
3
|
import { Props as FormSelectorWrapperProps } from "../FormSelectorWrapper/FormSelectorWrapper";
|
|
4
4
|
import { FormSelector } from "../form.interfaces";
|
|
5
5
|
export interface Props extends ComponentPropsWithRef<"input">, FormSelector {
|
|
6
|
-
|
|
7
|
-
label?: string;
|
|
6
|
+
label?: string | React.ReactElement;
|
|
8
7
|
indeterminate?: boolean;
|
|
9
8
|
helperProps?: FormHelperTextProps;
|
|
10
9
|
formSelectorWrapperProps?: FormSelectorWrapperProps;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { ComponentPropsWithRef } from "react";
|
|
2
2
|
import { Props as CheckboxProps } from "../Checkbox/Checkbox";
|
|
3
|
-
export interface Props extends ComponentPropsWithRef<"input">, Omit<CheckboxProps, "indeterminate" | "errorMessage" | "error" | "
|
|
4
|
-
|
|
3
|
+
export interface Props extends ComponentPropsWithRef<"input">, Omit<CheckboxProps, "indeterminate" | "errorMessage" | "error" | "label"> {
|
|
4
|
+
label?: string | React.ReactElement;
|
|
5
5
|
}
|
|
6
6
|
export declare const Toggle: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e,{useState as o,Fragment as m}from"react";import{IconButton as t}from"../../Button/IconButton.esm.js";import{Toggle as a}from"../../Form/Toggle/Toggle.esm.js";import{Icon as r,Icons as l}from"../../Icon/Icon.esm.js";import{Popover as s}from"../../Popover/Popover.esm.js";import{Typography as n}from"../../Typography/Typography.esm.js";import{generateID as c}from"../../src/util/helper.esm.js";import i from"./DataGridColumnsToggle.module.esm.js";import{createPortal as d}from"react-dom";const p=e.forwardRef((({open:p,headers:g,titleLabel:h="Show columns",closeButtonTitle:f="Close show columns dialog",onClose:u,onToggleClicked:E,className:T,domRoot:
|
|
1
|
+
import e,{useState as o,Fragment as m}from"react";import{IconButton as t}from"../../Button/IconButton.esm.js";import{Toggle as a}from"../../Form/Toggle/Toggle.esm.js";import{Icon as r,Icons as l}from"../../Icon/Icon.esm.js";import{Popover as s}from"../../Popover/Popover.esm.js";import{Typography as n}from"../../Typography/Typography.esm.js";import{generateID as c}from"../../src/util/helper.esm.js";import i from"./DataGridColumnsToggle.module.esm.js";import{createPortal as d}from"react-dom";const p=e.forwardRef((({open:p,headers:g,titleLabel:h="Show columns",closeButtonTitle:f="Close show columns dialog",onClose:u,onToggleClicked:E,className:T,domRoot:b=document.body,...j},v)=>{const[y]=o(c()),C=y+"_header",N=g.map((o=>e.createElement(a,{key:o.name,name:o.name,checked:!o.hidden,onChange:()=>E(o.name),label:o.headline})));return e.createElement(s,{...j,ref:v,className:`${i.popover} ${T}`,show:p,role:"dialog","aria-modal":"true","aria-labelledby":C},p&&d(e.createElement("div",{className:i.backdrop,onClick:()=>u()}),b),p&&e.createElement(m,null,e.createElement("div",{className:i.header},e.createElement(n,{id:C,className:i.title,tag:"span",variant:"h4"},h),e.createElement(t,{onClick:u,className:`${i["close-btn"]}`,title:f},e.createElement(r,{icon:l.Times}))),e.createElement("div",{className:i.content},N)))}));export{p as DataGridColumnsToggle};
|
|
2
2
|
//# sourceMappingURL=DataGridColumnsToggle.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e,{useEffect as r}from"react";import{Icon as o,Icons as a}from"../../Icon/Icon.esm.js";import t from"./Checkbox.module.esm.js";import{useFormSelector as n}from"../../src/hooks/useFormSelector.esm.js";import{FormSelectorWrapper as s}from"../FormSelectorWrapper/FormSelectorWrapper.esm.js";const c=e=>{var r;return
|
|
1
|
+
import e,{useEffect as r}from"react";import{Icon as o,Icons as a}from"../../Icon/Icon.esm.js";import t from"./Checkbox.module.esm.js";import{useFormSelector as n}from"../../src/hooks/useFormSelector.esm.js";import{FormSelectorWrapper as s}from"../FormSelectorWrapper/FormSelectorWrapper.esm.js";const c=e=>{var r;return!!(null===(r=null==e?void 0:e.props)||void 0===r?void 0:r["data-toggle"])},i=e.forwardRef((({children:l,name:p,helperText:d,helperProps:m,indeterminate:h,parentErrorId:b,errorMessage:u,disabled:f,label:k,parentHelperId:E,className:x,error:I,checked:y=!1,formSelectorWrapperProps:g,onChange:v,...j},C)=>{const{errorId:N,identifier:S,describedBy:w}=n({name:p,helperText:d,parentErrorId:b,errorMessage:u,error:I,parentHelperId:E});r((()=>{if(!p)throw new Error("Please pass a 'name' prop to your <Checkbox> component.");if("object"==typeof l&&!c(l)&&void 0===h)throw new Error("If you have nested checkboxes you have to manage the indeterminate state by passing a boolean to the `indeterminate` prop.")}),[]);const $=[t.input,f?t.disabled:""];return e.createElement(s,{...g,className:`${t["checkbox-wrapper"]} ${x||""}`,containerProps:{className:t["checkbox-container"]},helperText:d,helperProps:m,parentErrorId:b,errorId:N,errorMessage:u,error:I,disabled:f,identifier:S,nestedChildren:"object"==typeof l&&!c(l)&&e.createElement("ul",{className:t["checkbox-list"]},e.Children.map(l,(r=>e.createElement("li",null,e.createElement(i,{...r.props,parentHelperId:E,parentErrorId:b,error:I,disabled:r.props.disabled?r.props.disabled:f},r.props.children)))))},e.createElement("input",{...j,ref:C,disabled:f,className:`${t["native-input"]} ${I?t.error:""}`,checked:y,onChange:e=>{f||null==v||v(e)},"aria-invalid":I,"aria-checked":h?"mixed":y,"aria-describedby":w,id:`${S}-checkbox`,name:p,type:"checkbox"}),e.Children.toArray(l).filter(c),h&&e.createElement(o,{className:$.join(" "),icon:a.MinusSquare}),y&&!h&&e.createElement(o,{className:$.join(" "),icon:a.CheckmarkSquare}),!y&&!h&&e.createElement(o,{className:$.join(" "),icon:a.Square}),e.createElement("label",{htmlFor:`${S}-checkbox`},k||("string"==typeof l?l:void 0)))}));export{i as Checkbox};
|
|
2
2
|
//# sourceMappingURL=Checkbox.esm.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import e from"react";import{Checkbox as
|
|
1
|
+
import e from"react";import{Checkbox as a}from"../Checkbox/Checkbox.esm.js";import r from"./Toggle.module.esm.js";const l=e.forwardRef((({checked:l,disabled:s,helperProps:o,className:c,label:t,...m},d)=>{const p=[r["toggle-wrapper"]];return c&&p.push(c),e.createElement("div",{className:p.join(" ")},e.createElement(a,{...m,ref:d,checked:l,className:r.checkbox,helperProps:{className:r["toggle-helper"],...o},disabled:s,label:t},e.createElement("span",{"data-toggle":"true","aria-hidden":"true",className:`${r.toggle} ${l?r.checked:""} ${s?r.disabled:""} `})))}));export{l as Toggle};
|
|
2
2
|
//# sourceMappingURL=Toggle.esm.js.map
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import React, { ComponentPropsWithRef
|
|
1
|
+
import React, { ComponentPropsWithRef } from "react";
|
|
2
2
|
import { Props as FormHelperTextProps } from "../FormHelperText/FormHelperText";
|
|
3
3
|
import { Props as FormSelectorWrapperProps } from "../FormSelectorWrapper/FormSelectorWrapper";
|
|
4
4
|
import { FormSelector } from "../form.interfaces";
|
|
5
5
|
export interface Props extends ComponentPropsWithRef<"input">, FormSelector {
|
|
6
|
-
|
|
7
|
-
label?: string;
|
|
6
|
+
label?: string | React.ReactElement;
|
|
8
7
|
indeterminate?: boolean;
|
|
9
8
|
helperProps?: FormHelperTextProps;
|
|
10
9
|
formSelectorWrapperProps?: FormSelectorWrapperProps;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React, { ComponentPropsWithRef } from "react";
|
|
2
2
|
import { Props as CheckboxProps } from "../Checkbox/Checkbox";
|
|
3
|
-
export interface Props extends ComponentPropsWithRef<"input">, Omit<CheckboxProps, "indeterminate" | "errorMessage" | "error" | "
|
|
4
|
-
|
|
3
|
+
export interface Props extends ComponentPropsWithRef<"input">, Omit<CheckboxProps, "indeterminate" | "errorMessage" | "error" | "label"> {
|
|
4
|
+
label?: string | React.ReactElement;
|
|
5
5
|
}
|
|
6
6
|
export declare const Toggle: React.ForwardRefExoticComponent<Omit<Props, "ref"> & React.RefAttributes<HTMLInputElement>>;
|
package/package.json
CHANGED
|
@@ -58,9 +58,8 @@ const DataGridColumnsToggleComponent: ForwardRefRenderFunction<HTMLDivElement, P
|
|
|
58
58
|
name={item.name}
|
|
59
59
|
checked={!item.hidden}
|
|
60
60
|
onChange={() => onToggleClicked(item.name)}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
</Toggle>
|
|
61
|
+
label={item.headline}
|
|
62
|
+
/>
|
|
64
63
|
));
|
|
65
64
|
|
|
66
65
|
const handleBackdropClick = () => onClose();
|
|
@@ -159,7 +159,7 @@ describe("Checkbox should have proper attributes", () => {
|
|
|
159
159
|
it("should have a correctly linked label element", () => {
|
|
160
160
|
const { checkbox, container } = createCheckbox(defaultParams => ({
|
|
161
161
|
...defaultParams,
|
|
162
|
-
|
|
162
|
+
label: "Label"
|
|
163
163
|
}));
|
|
164
164
|
|
|
165
165
|
const id = checkbox.getAttribute("id");
|
|
@@ -168,6 +168,19 @@ describe("Checkbox should have proper attributes", () => {
|
|
|
168
168
|
expect(label).toBeTruthy();
|
|
169
169
|
expect(label).toHaveTextContent("Label");
|
|
170
170
|
});
|
|
171
|
+
|
|
172
|
+
it("should have a react element as label", () => {
|
|
173
|
+
const { checkbox, container } = createCheckbox(defaultParams => ({
|
|
174
|
+
...defaultParams,
|
|
175
|
+
label: <span>Label element</span>
|
|
176
|
+
}));
|
|
177
|
+
|
|
178
|
+
const id = checkbox.getAttribute("id");
|
|
179
|
+
const label = container.querySelector(`label[for=${id}]`);
|
|
180
|
+
|
|
181
|
+
expect(label).toBeTruthy();
|
|
182
|
+
expect(label).toHaveTextContent("Label element");
|
|
183
|
+
});
|
|
171
184
|
});
|
|
172
185
|
|
|
173
186
|
describe("Checkbox should be interactive", () => {
|
|
@@ -207,7 +220,6 @@ describe("missing attributes gets us errors", () => {
|
|
|
207
220
|
// @ts-ignore: mandatory props (test for non-typescript react projects)
|
|
208
221
|
createCheckbox(defaultParams => ({
|
|
209
222
|
...defaultParams,
|
|
210
|
-
name: "testing",
|
|
211
223
|
children: <Checkbox name="test">Test</Checkbox>
|
|
212
224
|
}));
|
|
213
225
|
} catch (e: any) {
|
|
@@ -215,7 +227,7 @@ describe("missing attributes gets us errors", () => {
|
|
|
215
227
|
}
|
|
216
228
|
|
|
217
229
|
const expected =
|
|
218
|
-
"If you
|
|
230
|
+
"If you have nested checkboxes you have to manage the indeterminate state by passing a boolean to the `indeterminate` prop.";
|
|
219
231
|
|
|
220
232
|
expect(actual).toEqual(expected);
|
|
221
233
|
|
|
@@ -264,8 +276,7 @@ describe("missing attributes gets us errors", () => {
|
|
|
264
276
|
actual = e.message;
|
|
265
277
|
}
|
|
266
278
|
|
|
267
|
-
const expected =
|
|
268
|
-
"Please make sure to pass either a string or more Checkbox components as a child of your Checkbox component.";
|
|
279
|
+
const expected = "Please pass a 'name' prop to your <Checkbox> component.";
|
|
269
280
|
|
|
270
281
|
expect(actual).toEqual(expected);
|
|
271
282
|
|
|
@@ -31,11 +31,10 @@ import {
|
|
|
31
31
|
} from "../FormSelectorWrapper/FormSelectorWrapper";
|
|
32
32
|
import { FormSelector } from "../form.interfaces";
|
|
33
33
|
|
|
34
|
-
const isToggle = (children: ReactNode) => (children as ReactElement)?.props?.["data-toggle"];
|
|
34
|
+
const isToggle = (children: ReactNode) => !!(children as ReactElement)?.props?.["data-toggle"];
|
|
35
35
|
|
|
36
36
|
export interface Props extends ComponentPropsWithRef<"input">, FormSelector {
|
|
37
|
-
|
|
38
|
-
label?: string;
|
|
37
|
+
label?: string | React.ReactElement;
|
|
39
38
|
indeterminate?: boolean;
|
|
40
39
|
helperProps?: FormHelperTextProps;
|
|
41
40
|
formSelectorWrapperProps?: FormSelectorWrapperProps;
|
|
@@ -85,24 +84,13 @@ const CheckboxComponent: ForwardRefRenderFunction<HTMLInputElement, Props> = (
|
|
|
85
84
|
}, []);
|
|
86
85
|
|
|
87
86
|
const determineLabel = () => {
|
|
87
|
+
// this should be temporary, for backwards compatibility;
|
|
88
|
+
// once the components implementing checkboxes in microfrontends are updated, only label should be returned
|
|
88
89
|
if (label) {
|
|
89
90
|
return label;
|
|
90
|
-
} else if (children ===
|
|
91
|
-
throw new Error(
|
|
92
|
-
"Please make sure to pass either a string or more Checkbox components as a child of your Checkbox component."
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
if (
|
|
97
|
-
typeof children === "string" ||
|
|
98
|
-
(typeof children === "object" && (children as ReactElement).type === "span")
|
|
99
|
-
) {
|
|
91
|
+
} else if (typeof children === "string") {
|
|
100
92
|
return children;
|
|
101
93
|
}
|
|
102
|
-
|
|
103
|
-
throw new Error(
|
|
104
|
-
"If you pass Checkboxes as a child component (to create nested checkbox tree) you need to pass a label to the parent checkbox."
|
|
105
|
-
);
|
|
106
94
|
};
|
|
107
95
|
|
|
108
96
|
const renderNestedCheckboxes = () => (
|
|
@@ -17,10 +17,12 @@
|
|
|
17
17
|
import React, { useRef, useEffect } from "react";
|
|
18
18
|
import { Toggle, Props } from "./Toggle";
|
|
19
19
|
import { render } from "@testing-library/react";
|
|
20
|
+
import { Checkbox } from "../Checkbox/Checkbox";
|
|
20
21
|
|
|
21
22
|
const defaultParams: Props = {
|
|
22
|
-
children: "
|
|
23
|
-
name: "example toggle"
|
|
23
|
+
children: "Helper text",
|
|
24
|
+
name: "example toggle",
|
|
25
|
+
label: "Label"
|
|
24
26
|
};
|
|
25
27
|
|
|
26
28
|
const createToggle = (params?: (defaultParams: Props) => Props) => {
|
|
@@ -28,11 +30,7 @@ const createToggle = (params?: (defaultParams: Props) => Props) => {
|
|
|
28
30
|
if (params) {
|
|
29
31
|
parameters = params(defaultParams);
|
|
30
32
|
}
|
|
31
|
-
const queries = render(
|
|
32
|
-
<Toggle {...parameters} data-testid="toggle">
|
|
33
|
-
toggle content
|
|
34
|
-
</Toggle>
|
|
35
|
-
);
|
|
33
|
+
const queries = render(<Toggle {...parameters} data-testid="toggle"></Toggle>);
|
|
36
34
|
const toggle = queries.getByTestId("toggle");
|
|
37
35
|
|
|
38
36
|
return {
|
|
@@ -72,7 +70,11 @@ describe("ref should work", () => {
|
|
|
72
70
|
}
|
|
73
71
|
}, [ref]);
|
|
74
72
|
|
|
75
|
-
return
|
|
73
|
+
return (
|
|
74
|
+
<Toggle {...defaultParams} data-ref="testing" ref={ref}>
|
|
75
|
+
test label
|
|
76
|
+
</Toggle>
|
|
77
|
+
);
|
|
76
78
|
};
|
|
77
79
|
|
|
78
80
|
const refCheck = (ref: React.RefObject<HTMLElement>) => {
|
|
@@ -20,33 +20,37 @@ import classes from "./Toggle.module.scss";
|
|
|
20
20
|
|
|
21
21
|
export interface Props
|
|
22
22
|
extends ComponentPropsWithRef<"input">,
|
|
23
|
-
Omit<CheckboxProps, "indeterminate" | "errorMessage" | "error" | "
|
|
24
|
-
|
|
23
|
+
Omit<CheckboxProps, "indeterminate" | "errorMessage" | "error" | "label"> {
|
|
24
|
+
label?: string | React.ReactElement;
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
const ToggleComponent: ForwardRefRenderFunction<HTMLInputElement, Props> = (
|
|
28
|
-
{
|
|
28
|
+
{ checked, disabled, helperProps, className, label, ...rest }: Props,
|
|
29
29
|
ref
|
|
30
|
-
) =>
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
30
|
+
) => {
|
|
31
|
+
const classNames = [classes["toggle-wrapper"]];
|
|
32
|
+
className && classNames.push(className);
|
|
33
|
+
return (
|
|
34
|
+
<div className={classNames.join(" ")}>
|
|
35
|
+
<Checkbox
|
|
36
|
+
{...rest}
|
|
37
|
+
ref={ref}
|
|
38
|
+
checked={checked}
|
|
39
|
+
className={classes["checkbox"]}
|
|
40
|
+
helperProps={{ className: classes["toggle-helper"], ...helperProps }}
|
|
41
|
+
disabled={disabled}
|
|
42
|
+
label={label}
|
|
43
|
+
>
|
|
44
|
+
<span
|
|
45
|
+
data-toggle="true"
|
|
46
|
+
aria-hidden="true"
|
|
47
|
+
className={`${classes["toggle"]} ${checked ? classes["checked"] : ""} ${
|
|
48
|
+
disabled ? classes["disabled"] : ""
|
|
49
|
+
} `}
|
|
50
|
+
></span>
|
|
51
|
+
</Checkbox>
|
|
52
|
+
</div>
|
|
53
|
+
);
|
|
54
|
+
};
|
|
51
55
|
|
|
52
56
|
export const Toggle = React.forwardRef(ToggleComponent);
|