@jigowatts/jigowatts-ui 2.2.0 → 2.3.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/README.md +31 -0
- package/dist/assets/index11.css +1 -1
- package/dist/assets/index17.css +1 -1
- package/dist/assets/index19.css +1 -1
- package/dist/assets/index2.css +1 -1
- package/dist/assets/index20.css +1 -1
- package/dist/assets/index21.css +1 -1
- package/dist/assets/index25.css +1 -1
- package/dist/assets/index28.css +1 -1
- package/dist/assets/index33.css +1 -1
- package/dist/assets/index4.css +1 -1
- package/dist/assets/index6.css +1 -1
- package/dist/components/Button/index.cjs.js +1 -1
- package/dist/components/Button/index.cjs.js.map +1 -1
- package/dist/components/Button/index.d.ts +2 -23
- package/dist/components/Button/index.es.js +7 -13
- package/dist/components/Button/index.es.js.map +1 -1
- package/dist/components/ErrorMessage/index.cjs.js +1 -1
- package/dist/components/ErrorMessage/index.es.js +2 -2
- package/dist/components/Input/index.cjs.js +1 -1
- package/dist/components/Input/index.es.js +17 -17
- package/dist/components/InputController/index.cjs.js +1 -1
- package/dist/components/InputController/index.cjs.js.map +1 -1
- package/dist/components/InputController/index.es.js +38 -38
- package/dist/components/InputController/index.es.js.map +1 -1
- package/dist/components/Label/index.cjs.js +1 -1
- package/dist/components/Label/index.es.js +1 -1
- package/dist/components/LabeledContent/index.cjs.js +1 -1
- package/dist/components/LabeledContent/index.es.js +6 -6
- package/dist/components/LoadingOverlay/index.cjs.js +1 -1
- package/dist/components/LoadingOverlay/index.cjs.js.map +1 -1
- package/dist/components/LoadingOverlay/index.es.js +10 -4
- package/dist/components/LoadingOverlay/index.es.js.map +1 -1
- package/dist/components/NumericFieldController/index.cjs.js +1 -1
- package/dist/components/NumericFieldController/index.cjs.js.map +1 -1
- package/dist/components/NumericFieldController/index.d.ts +5 -0
- package/dist/components/NumericFieldController/index.es.js +54 -50
- package/dist/components/NumericFieldController/index.es.js.map +1 -1
- package/dist/components/NumericFieldController/index.test.cjs.js +1 -1
- package/dist/components/NumericFieldController/index.test.cjs.js.map +1 -1
- package/dist/components/NumericFieldController/index.test.es.js +113 -11
- package/dist/components/NumericFieldController/index.test.es.js.map +1 -1
- package/dist/components/PageSizeSelector/index.cjs.js +1 -1
- package/dist/components/PageSizeSelector/index.es.js +1 -1
- package/dist/components/Pagination/index.cjs.js +2 -2
- package/dist/components/Pagination/index.es.js +15 -15
- package/dist/components/PasswordInputController/index.cjs.js +1 -1
- package/dist/components/PasswordInputController/index.cjs.js.map +1 -1
- package/dist/components/PasswordInputController/index.es.js +25 -25
- package/dist/components/PasswordInputController/index.es.js.map +1 -1
- package/dist/components/RadioButton/index.cjs.js +1 -1
- package/dist/components/RadioButton/index.es.js +1 -1
- package/dist/components/RadioButton/index.test.cjs.js +1 -1
- package/dist/components/RadioButton/index.test.es.js +1 -1
- package/dist/components/SearchForm/index.cjs.js +1 -1
- package/dist/components/SearchForm/index.cjs.js.map +1 -1
- package/dist/components/SearchForm/index.es.js +37 -43
- package/dist/components/SearchForm/index.es.js.map +1 -1
- package/dist/components/SelectBox/index.cjs.js +1 -1
- package/dist/components/SelectBox/index.es.js +1 -1
- package/dist/components/SelectBox/index.test.cjs.js +1 -1
- package/dist/components/SelectBox/index.test.es.js +1 -1
- package/dist/components/SelectBoxController/index.cjs.js +1 -1
- package/dist/components/SelectBoxController/index.cjs.js.map +1 -1
- package/dist/components/SelectBoxController/index.es.js +24 -24
- package/dist/components/SelectBoxController/index.es.js.map +1 -1
- package/dist/components/SideMenu/index.cjs.js +1 -1
- package/dist/components/SideMenu/index.es.js +28 -28
- package/dist/components/Tabs/index.cjs.js +1 -1
- package/dist/components/Tabs/index.cjs.js.map +1 -1
- package/dist/components/Tabs/index.es.js +16 -16
- package/dist/components/Tabs/index.es.js.map +1 -1
- package/dist/components/Textarea/index.cjs.js +1 -1
- package/dist/components/Textarea/index.es.js +8 -8
- package/dist/components/TwoFaLabel/index.cjs.js +1 -1
- package/dist/components/TwoFaLabel/index.cjs.js.map +1 -1
- package/dist/components/TwoFaLabel/index.es.js +32 -20
- package/dist/components/TwoFaLabel/index.es.js.map +1 -1
- package/dist/{index-CogWL0bN.js → index-CqVxO31c.js} +10 -10
- package/dist/{index-CogWL0bN.js.map → index-CqVxO31c.js.map} +1 -1
- package/dist/index-DNu4-rkL.cjs +2 -0
- package/dist/{index-SHLzSoKB.cjs.map → index-DNu4-rkL.cjs.map} +1 -1
- package/dist/{index-BM3CSrls.cjs → index-c8cvlwzF.cjs} +2 -2
- package/dist/{index-BM3CSrls.cjs.map → index-c8cvlwzF.cjs.map} +1 -1
- package/dist/index-omG0Vz2u.js +51 -0
- package/dist/{index-D7VNQwOv.js.map → index-omG0Vz2u.js.map} +1 -1
- package/dist/index.cjs.js +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.es.js +82 -76
- package/dist/index.es.js.map +1 -1
- package/dist/theme/index.cjs.js +2 -0
- package/dist/theme/index.cjs.js.map +1 -0
- package/dist/theme/index.d.ts +86 -0
- package/dist/theme/index.es.js +123 -0
- package/dist/theme/index.es.js.map +1 -0
- package/dist/theme/index.test.cjs.js +2 -0
- package/dist/theme/index.test.cjs.js.map +1 -0
- package/dist/theme/index.test.d.ts +1 -0
- package/dist/theme/index.test.es.js +41 -0
- package/dist/theme/index.test.es.js.map +1 -0
- package/dist/theme/themeStoryUtils.cjs.js +54 -0
- package/dist/theme/themeStoryUtils.cjs.js.map +1 -0
- package/dist/theme/themeStoryUtils.d.ts +195 -0
- package/dist/theme/themeStoryUtils.es.js +172 -0
- package/dist/theme/themeStoryUtils.es.js.map +1 -0
- package/package.json +6 -1
- package/dist/index-D7VNQwOv.js +0 -51
- package/dist/index-SHLzSoKB.cjs +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../../src/components/NumericFieldController/index.tsx"],"sourcesContent":["/* eslint-disable react/jsx-props-no-spreading */\nimport { forwardRef, type JSX } from \"react\";\nimport { Clear } from \"@mui/icons-material\";\nimport {\n IconButton,\n InputAdornment,\n InputBaseComponentProps,\n TextField,\n TextFieldProps,\n} from \"@mui/material\";\nimport {\n Controller,\n FieldPath,\n FieldValues,\n PathValue,\n UseControllerProps,\n} from \"react-hook-form\";\nimport { NumericFormat } from \"react-number-format\";\n\n/** NumericFormat に渡さない(DOM にも出さない)内部用 */\ntype NumericFormatEmptyProps = {\n /** 数値が無いときに RHF
|
|
1
|
+
{"version":3,"file":"index.cjs.js","sources":["../../../src/components/NumericFieldController/index.tsx"],"sourcesContent":["/* eslint-disable react/jsx-props-no-spreading */\nimport { forwardRef, type JSX } from \"react\";\nimport { Clear } from \"@mui/icons-material\";\nimport {\n IconButton,\n InputAdornment,\n InputBaseComponentProps,\n TextField,\n TextFieldProps,\n} from \"@mui/material\";\nimport {\n Controller,\n FieldPath,\n FieldValues,\n PathValue,\n UseControllerProps,\n} from \"react-hook-form\";\nimport { NumericFormat } from \"react-number-format\";\n\n/** NumericFormat に渡さない(DOM にも出さない)内部用 */\ntype NumericFormatEmptyProps = {\n /** 数値が無いときに RHF に渡す値 */\n formEmptyValue?: number | string | null | undefined;\n};\n\ntype MuiNumericFieldConfig = {\n displayErrorMessage?: boolean;\n /**\n *\n * @exmaple\n * - FLOAT: `1000`\n * - STRING: `'1000'`\n * - FORMATTED_STRING: `'1,000'`\n * @defaultValue `'FLOAT'`\n */\n valueType?: \"FLOAT\" | \"STRING\" | \"FORMATTED_STRING\";\n thousandSeparator?: boolean | string;\n decimalSeparator?: string;\n allowedDecimalSeparators?: Array<string>;\n thousandsGroupStyle?: \"thousand\" | \"lakh\" | \"wan\" | \"none\";\n decimalScale?: number;\n fixedDecimalScale?: boolean;\n allowNegative?: boolean;\n allowLeadingZeros?: boolean;\n suffix?: string;\n prefix?: string;\n};\n\ntype MuiNumericFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = UseControllerProps<TFieldValues, TName> & {\n /** Additional settings */\n config?: MuiNumericFieldConfig;\n /** Settings for MUI elements */\n inputProps?: {\n /**\n * Settings for TextField inside MuiTextField\n *\n * API: {@link https://mui.com/material-ui/api/text-field/}\n */\n textFieldProps?: TextFieldProps;\n };\n defaultValue: PathValue<FieldValues, FieldPath<FieldValues>>;\n /**\n * z.number().optional() 向け。\n * true のとき空値は undefined。未指定時は nullable 向けに null。\n */\n optional?: boolean;\n emptyValue?: 0 | \"\" | null | undefined;\n};\n\nconst resolveFormEmptyValue = (\n optional?: boolean,\n emptyValue?: 0 | \"\" | null | undefined,\n): number | string | null | undefined => {\n if (optional) {\n return undefined;\n }\n\n return emptyValue ?? null;\n};\n\n/**\n * 数値入力の表示フォーマット\n */\nconst NumberFormatCustom = forwardRef<\n HTMLInputElement,\n InputBaseComponentProps & MuiNumericFieldConfig & NumericFormatEmptyProps\n>(function NumberFormatBase(props, ref) {\n // 不要なプロパティを除くためdestructureする\n /* eslint-disable @typescript-eslint/no-unused-vars -- NumericFormat に渡さない */\n const {\n valueType,\n defaultValue,\n onChange,\n allowLeadingZeros,\n formEmptyValue,\n ...others\n } = props;\n /* eslint-enable @typescript-eslint/no-unused-vars */\n\n const resolvedFormEmpty = formEmptyValue;\n\n return (\n <NumericFormat\n {...others}\n getInputRef={ref}\n allowLeadingZeros={valueType === \"STRING\" || allowLeadingZeros}\n onValueChange={(values, sourceInfo) => {\n if (!onChange || !sourceInfo.event) return;\n let value: string | number | undefined | null;\n switch (valueType) {\n case \"STRING\":\n value = values.value;\n break;\n case \"FORMATTED_STRING\":\n value = values.formattedValue;\n break;\n default:\n value = values.floatValue ?? resolvedFormEmpty;\n }\n const event = {\n ...(sourceInfo.event as React.SyntheticEvent<HTMLInputElement>),\n target: {\n ...sourceInfo.event.target,\n name: props.name,\n value,\n },\n };\n onChange(event);\n }}\n />\n );\n});\n\n/**\n * React hook formとreact-number-formatで管理される数値入力コンポーネントです。\n * @typeParam TFieldValues - Type of the form.\n * @typeParam TName - Field name.\n * @example\n * ```\n *\n * <MuiNumericField<FormData, \"assets\">\n * name=\"assets\"\n * control={control}\n * defaultValue={undefined}\n * muiProps={{\n * textFieldProps: {\n * label: 'Assets',\n * fullWidth: true\n * }\n * }}\n * />\n * ```\n */\nexport const NumericFieldController: <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>(\n props: MuiNumericFieldProps<TFieldValues, TName>,\n) => JSX.Element = (props) => {\n const {\n inputProps: muiProps,\n config,\n defaultValue,\n emptyValue,\n optional,\n ...others\n } = props;\n const { textFieldProps } = muiProps ?? {};\n const formEmptyValue = resolveFormEmptyValue(optional, emptyValue);\n\n const isEmptyValue = (value: string | number | undefined | null) => {\n return value === null || value === undefined || value === \"\";\n };\n return (\n <Controller\n control={others.control}\n defaultValue={defaultValue}\n name={others.name}\n render={({ field, fieldState }) => (\n <TextField\n {...textFieldProps}\n name={field.name}\n value={isEmptyValue(field.value) ? \"\" : field.value}\n onChange={(e) => {\n field.onChange(e);\n }}\n error={!!fieldState.error}\n helperText={fieldState.error?.message}\n onBlur={field.onBlur}\n InputProps={{\n inputComponent: NumberFormatCustom,\n endAdornment: !isEmptyValue(field.value) ? (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => {\n field.onChange(formEmptyValue);\n }}\n edge=\"end\"\n >\n <Clear />\n </IconButton>\n </InputAdornment>\n ) : undefined,\n inputProps: {\n ...config,\n formEmptyValue,\n },\n }}\n />\n )}\n />\n );\n};\n\nexport default NumericFieldController;\n"],"names":["resolveFormEmptyValue","optional","emptyValue","NumberFormatCustom","forwardRef","props","ref","valueType","defaultValue","onChange","allowLeadingZeros","formEmptyValue","others","resolvedFormEmpty","jsx","NumericFormat","values","sourceInfo","value","event","NumericFieldController","muiProps","config","textFieldProps","isEmptyValue","Controller","field","fieldState","TextField","e","_a","InputAdornment","IconButton","Clear"],"mappings":"8RAwEMA,EAAwB,CAC5BC,EACAC,IACuC,CACvC,GAAI,CAAAD,EAIJ,OAAOC,GAAc,IACvB,EAKMC,EAAqBC,EAAAA,WAGzB,SAA0BC,EAAOC,EAAK,CAGtC,KAAM,CACJ,UAAAC,EACA,aAAAC,EACA,SAAAC,EACA,kBAAAC,EACA,eAAAC,EACA,GAAGC,CAAA,EACDP,EAGEQ,EAAoBF,EAE1B,OACEG,EAAAA,IAACC,EAAAA,cAAA,CACE,GAAGH,EACJ,YAAaN,EACb,kBAAmBC,IAAc,UAAYG,EAC7C,cAAe,CAACM,EAAQC,IAAe,CACrC,GAAI,CAACR,GAAY,CAACQ,EAAW,MAAO,OACpC,IAAIC,EACJ,OAAQX,EAAA,CACN,IAAK,SACHW,EAAQF,EAAO,MACf,MACF,IAAK,mBACHE,EAAQF,EAAO,eACf,MACF,QACEE,EAAQF,EAAO,YAAcH,CAAA,CAEjC,MAAMM,EAAQ,CACZ,GAAIF,EAAW,MACf,OAAQ,CACN,GAAGA,EAAW,MAAM,OACpB,KAAMZ,EAAM,KACZ,MAAAa,CAAA,CACF,EAEFT,EAASU,CAAK,CAChB,CAAA,CAAA,CAGN,CAAC,EAsBYC,EAKOf,GAAU,CAC5B,KAAM,CACJ,WAAYgB,EACZ,OAAAC,EACA,aAAAd,EACA,WAAAN,EACA,SAAAD,EACA,GAAGW,CAAA,EACDP,EACE,CAAE,eAAAkB,GAAmBF,GAAY,CAAA,EACjCV,EAAiBX,EAAsBC,EAAUC,CAAU,EAE3DsB,EAAgBN,GACbA,GAAU,MAA+BA,IAAU,GAE5D,OACEJ,EAAAA,IAACW,EAAAA,WAAA,CACC,QAASb,EAAO,QAChB,aAAAJ,EACA,KAAMI,EAAO,KACb,OAAQ,CAAC,CAAE,MAAAc,EAAO,WAAAC,KAAW,OAC3Bb,OAAAA,EAAAA,IAACc,EAAAA,UAAA,CACE,GAAGL,EACJ,KAAMG,EAAM,KACZ,MAAOF,EAAaE,EAAM,KAAK,EAAI,GAAKA,EAAM,MAC9C,SAAWG,GAAM,CACfH,EAAM,SAASG,CAAC,CAClB,EACA,MAAO,CAAC,CAACF,EAAW,MACpB,YAAYG,EAAAH,EAAW,QAAX,YAAAG,EAAkB,QAC9B,OAAQJ,EAAM,OACd,WAAY,CACV,eAAgBvB,EAChB,aAAeqB,EAAaE,EAAM,KAAK,EAWnC,OAVFZ,MAACiB,EAAAA,eAAA,CAAe,SAAS,MACvB,SAAAjB,EAAAA,IAACkB,EAAAA,WAAA,CACC,QAAS,IAAM,CACbN,EAAM,SAASf,CAAc,CAC/B,EACA,KAAK,MAEL,eAACsB,EAAAA,MAAA,CAAA,CAAM,CAAA,CAAA,EAEX,EAEF,WAAY,CACV,GAAGX,EACH,eAAAX,CAAA,CACF,CACF,CAAA,EACF,CAAA,CAIR"}
|
|
@@ -37,6 +37,11 @@ type MuiNumericFieldProps<TFieldValues extends FieldValues = FieldValues, TName
|
|
|
37
37
|
textFieldProps?: TextFieldProps;
|
|
38
38
|
};
|
|
39
39
|
defaultValue: PathValue<FieldValues, FieldPath<FieldValues>>;
|
|
40
|
+
/**
|
|
41
|
+
* z.number().optional() 向け。
|
|
42
|
+
* true のとき空値は undefined。未指定時は nullable 向けに null。
|
|
43
|
+
*/
|
|
44
|
+
optional?: boolean;
|
|
40
45
|
emptyValue?: 0 | "" | null | undefined;
|
|
41
46
|
};
|
|
42
47
|
/**
|
|
@@ -1,92 +1,96 @@
|
|
|
1
1
|
import { jsx as n } from "react/jsx-runtime";
|
|
2
2
|
import { forwardRef as f } from "react";
|
|
3
|
-
import { Clear as
|
|
4
|
-
import { TextField as
|
|
3
|
+
import { Clear as v } from "@mui/icons-material";
|
|
4
|
+
import { TextField as h, InputAdornment as C, IconButton as V } from "@mui/material";
|
|
5
5
|
import { Controller as F } from "react-hook-form";
|
|
6
6
|
import { NumericFormat as T } from "react-number-format";
|
|
7
|
-
const
|
|
7
|
+
const y = (a, r) => {
|
|
8
|
+
if (!a)
|
|
9
|
+
return r ?? null;
|
|
10
|
+
}, N = f(function(r, i) {
|
|
8
11
|
const {
|
|
9
|
-
valueType:
|
|
10
|
-
defaultValue:
|
|
11
|
-
onChange:
|
|
12
|
-
allowLeadingZeros:
|
|
13
|
-
formEmptyValue:
|
|
12
|
+
valueType: m,
|
|
13
|
+
defaultValue: g,
|
|
14
|
+
onChange: l,
|
|
15
|
+
allowLeadingZeros: u,
|
|
16
|
+
formEmptyValue: c,
|
|
14
17
|
...p
|
|
15
|
-
} =
|
|
18
|
+
} = r, s = c;
|
|
16
19
|
return /* @__PURE__ */ n(
|
|
17
20
|
T,
|
|
18
21
|
{
|
|
19
22
|
...p,
|
|
20
|
-
getInputRef:
|
|
21
|
-
allowLeadingZeros:
|
|
22
|
-
onValueChange: (
|
|
23
|
-
if (!
|
|
24
|
-
let
|
|
25
|
-
switch (
|
|
23
|
+
getInputRef: i,
|
|
24
|
+
allowLeadingZeros: m === "STRING" || u,
|
|
25
|
+
onValueChange: (e, t) => {
|
|
26
|
+
if (!l || !t.event) return;
|
|
27
|
+
let o;
|
|
28
|
+
switch (m) {
|
|
26
29
|
case "STRING":
|
|
27
|
-
|
|
30
|
+
o = e.value;
|
|
28
31
|
break;
|
|
29
32
|
case "FORMATTED_STRING":
|
|
30
|
-
|
|
33
|
+
o = e.formattedValue;
|
|
31
34
|
break;
|
|
32
35
|
default:
|
|
33
|
-
|
|
36
|
+
o = e.floatValue ?? s;
|
|
34
37
|
}
|
|
35
|
-
const
|
|
36
|
-
...
|
|
38
|
+
const d = {
|
|
39
|
+
...t.event,
|
|
37
40
|
target: {
|
|
38
|
-
...
|
|
39
|
-
name:
|
|
40
|
-
value:
|
|
41
|
+
...t.event.target,
|
|
42
|
+
name: r.name,
|
|
43
|
+
value: o
|
|
41
44
|
}
|
|
42
45
|
};
|
|
43
|
-
|
|
46
|
+
l(d);
|
|
44
47
|
}
|
|
45
48
|
}
|
|
46
49
|
);
|
|
47
|
-
}),
|
|
50
|
+
}), w = (a) => {
|
|
48
51
|
const {
|
|
49
|
-
inputProps:
|
|
50
|
-
config:
|
|
51
|
-
defaultValue:
|
|
52
|
-
emptyValue:
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
inputProps: r,
|
|
53
|
+
config: i,
|
|
54
|
+
defaultValue: m,
|
|
55
|
+
emptyValue: g,
|
|
56
|
+
optional: l,
|
|
57
|
+
...u
|
|
58
|
+
} = a, { textFieldProps: c } = r ?? {}, p = y(l, g), s = (e) => e == null || e === "";
|
|
55
59
|
return /* @__PURE__ */ n(
|
|
56
60
|
F,
|
|
57
61
|
{
|
|
58
|
-
control:
|
|
59
|
-
defaultValue:
|
|
60
|
-
name:
|
|
61
|
-
render: ({ field: e, fieldState:
|
|
62
|
-
var
|
|
62
|
+
control: u.control,
|
|
63
|
+
defaultValue: m,
|
|
64
|
+
name: u.name,
|
|
65
|
+
render: ({ field: e, fieldState: t }) => {
|
|
66
|
+
var o;
|
|
63
67
|
return /* @__PURE__ */ n(
|
|
64
|
-
|
|
68
|
+
h,
|
|
65
69
|
{
|
|
66
|
-
...
|
|
70
|
+
...c,
|
|
67
71
|
name: e.name,
|
|
68
|
-
value:
|
|
69
|
-
onChange: (
|
|
70
|
-
e.onChange(
|
|
72
|
+
value: s(e.value) ? "" : e.value,
|
|
73
|
+
onChange: (d) => {
|
|
74
|
+
e.onChange(d);
|
|
71
75
|
},
|
|
72
|
-
error: !!
|
|
73
|
-
helperText: (
|
|
76
|
+
error: !!t.error,
|
|
77
|
+
helperText: (o = t.error) == null ? void 0 : o.message,
|
|
74
78
|
onBlur: e.onBlur,
|
|
75
79
|
InputProps: {
|
|
76
80
|
inputComponent: N,
|
|
77
|
-
endAdornment:
|
|
81
|
+
endAdornment: s(e.value) ? void 0 : /* @__PURE__ */ n(C, { position: "end", children: /* @__PURE__ */ n(
|
|
78
82
|
V,
|
|
79
83
|
{
|
|
80
84
|
onClick: () => {
|
|
81
|
-
e.onChange(
|
|
85
|
+
e.onChange(p);
|
|
82
86
|
},
|
|
83
87
|
edge: "end",
|
|
84
|
-
children: /* @__PURE__ */ n(
|
|
88
|
+
children: /* @__PURE__ */ n(v, {})
|
|
85
89
|
}
|
|
86
90
|
) }),
|
|
87
91
|
inputProps: {
|
|
88
|
-
...
|
|
89
|
-
formEmptyValue:
|
|
92
|
+
...i,
|
|
93
|
+
formEmptyValue: p
|
|
90
94
|
}
|
|
91
95
|
}
|
|
92
96
|
}
|
|
@@ -96,7 +100,7 @@ const N = f(function(m, s) {
|
|
|
96
100
|
);
|
|
97
101
|
};
|
|
98
102
|
export {
|
|
99
|
-
|
|
100
|
-
|
|
103
|
+
w as NumericFieldController,
|
|
104
|
+
w as default
|
|
101
105
|
};
|
|
102
106
|
//# sourceMappingURL=index.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.es.js","sources":["../../../src/components/NumericFieldController/index.tsx"],"sourcesContent":["/* eslint-disable react/jsx-props-no-spreading */\nimport { forwardRef, type JSX } from \"react\";\nimport { Clear } from \"@mui/icons-material\";\nimport {\n IconButton,\n InputAdornment,\n InputBaseComponentProps,\n TextField,\n TextFieldProps,\n} from \"@mui/material\";\nimport {\n Controller,\n FieldPath,\n FieldValues,\n PathValue,\n UseControllerProps,\n} from \"react-hook-form\";\nimport { NumericFormat } from \"react-number-format\";\n\n/** NumericFormat に渡さない(DOM にも出さない)内部用 */\ntype NumericFormatEmptyProps = {\n /** 数値が無いときに RHF
|
|
1
|
+
{"version":3,"file":"index.es.js","sources":["../../../src/components/NumericFieldController/index.tsx"],"sourcesContent":["/* eslint-disable react/jsx-props-no-spreading */\nimport { forwardRef, type JSX } from \"react\";\nimport { Clear } from \"@mui/icons-material\";\nimport {\n IconButton,\n InputAdornment,\n InputBaseComponentProps,\n TextField,\n TextFieldProps,\n} from \"@mui/material\";\nimport {\n Controller,\n FieldPath,\n FieldValues,\n PathValue,\n UseControllerProps,\n} from \"react-hook-form\";\nimport { NumericFormat } from \"react-number-format\";\n\n/** NumericFormat に渡さない(DOM にも出さない)内部用 */\ntype NumericFormatEmptyProps = {\n /** 数値が無いときに RHF に渡す値 */\n formEmptyValue?: number | string | null | undefined;\n};\n\ntype MuiNumericFieldConfig = {\n displayErrorMessage?: boolean;\n /**\n *\n * @exmaple\n * - FLOAT: `1000`\n * - STRING: `'1000'`\n * - FORMATTED_STRING: `'1,000'`\n * @defaultValue `'FLOAT'`\n */\n valueType?: \"FLOAT\" | \"STRING\" | \"FORMATTED_STRING\";\n thousandSeparator?: boolean | string;\n decimalSeparator?: string;\n allowedDecimalSeparators?: Array<string>;\n thousandsGroupStyle?: \"thousand\" | \"lakh\" | \"wan\" | \"none\";\n decimalScale?: number;\n fixedDecimalScale?: boolean;\n allowNegative?: boolean;\n allowLeadingZeros?: boolean;\n suffix?: string;\n prefix?: string;\n};\n\ntype MuiNumericFieldProps<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = UseControllerProps<TFieldValues, TName> & {\n /** Additional settings */\n config?: MuiNumericFieldConfig;\n /** Settings for MUI elements */\n inputProps?: {\n /**\n * Settings for TextField inside MuiTextField\n *\n * API: {@link https://mui.com/material-ui/api/text-field/}\n */\n textFieldProps?: TextFieldProps;\n };\n defaultValue: PathValue<FieldValues, FieldPath<FieldValues>>;\n /**\n * z.number().optional() 向け。\n * true のとき空値は undefined。未指定時は nullable 向けに null。\n */\n optional?: boolean;\n emptyValue?: 0 | \"\" | null | undefined;\n};\n\nconst resolveFormEmptyValue = (\n optional?: boolean,\n emptyValue?: 0 | \"\" | null | undefined,\n): number | string | null | undefined => {\n if (optional) {\n return undefined;\n }\n\n return emptyValue ?? null;\n};\n\n/**\n * 数値入力の表示フォーマット\n */\nconst NumberFormatCustom = forwardRef<\n HTMLInputElement,\n InputBaseComponentProps & MuiNumericFieldConfig & NumericFormatEmptyProps\n>(function NumberFormatBase(props, ref) {\n // 不要なプロパティを除くためdestructureする\n /* eslint-disable @typescript-eslint/no-unused-vars -- NumericFormat に渡さない */\n const {\n valueType,\n defaultValue,\n onChange,\n allowLeadingZeros,\n formEmptyValue,\n ...others\n } = props;\n /* eslint-enable @typescript-eslint/no-unused-vars */\n\n const resolvedFormEmpty = formEmptyValue;\n\n return (\n <NumericFormat\n {...others}\n getInputRef={ref}\n allowLeadingZeros={valueType === \"STRING\" || allowLeadingZeros}\n onValueChange={(values, sourceInfo) => {\n if (!onChange || !sourceInfo.event) return;\n let value: string | number | undefined | null;\n switch (valueType) {\n case \"STRING\":\n value = values.value;\n break;\n case \"FORMATTED_STRING\":\n value = values.formattedValue;\n break;\n default:\n value = values.floatValue ?? resolvedFormEmpty;\n }\n const event = {\n ...(sourceInfo.event as React.SyntheticEvent<HTMLInputElement>),\n target: {\n ...sourceInfo.event.target,\n name: props.name,\n value,\n },\n };\n onChange(event);\n }}\n />\n );\n});\n\n/**\n * React hook formとreact-number-formatで管理される数値入力コンポーネントです。\n * @typeParam TFieldValues - Type of the form.\n * @typeParam TName - Field name.\n * @example\n * ```\n *\n * <MuiNumericField<FormData, \"assets\">\n * name=\"assets\"\n * control={control}\n * defaultValue={undefined}\n * muiProps={{\n * textFieldProps: {\n * label: 'Assets',\n * fullWidth: true\n * }\n * }}\n * />\n * ```\n */\nexport const NumericFieldController: <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>(\n props: MuiNumericFieldProps<TFieldValues, TName>,\n) => JSX.Element = (props) => {\n const {\n inputProps: muiProps,\n config,\n defaultValue,\n emptyValue,\n optional,\n ...others\n } = props;\n const { textFieldProps } = muiProps ?? {};\n const formEmptyValue = resolveFormEmptyValue(optional, emptyValue);\n\n const isEmptyValue = (value: string | number | undefined | null) => {\n return value === null || value === undefined || value === \"\";\n };\n return (\n <Controller\n control={others.control}\n defaultValue={defaultValue}\n name={others.name}\n render={({ field, fieldState }) => (\n <TextField\n {...textFieldProps}\n name={field.name}\n value={isEmptyValue(field.value) ? \"\" : field.value}\n onChange={(e) => {\n field.onChange(e);\n }}\n error={!!fieldState.error}\n helperText={fieldState.error?.message}\n onBlur={field.onBlur}\n InputProps={{\n inputComponent: NumberFormatCustom,\n endAdornment: !isEmptyValue(field.value) ? (\n <InputAdornment position=\"end\">\n <IconButton\n onClick={() => {\n field.onChange(formEmptyValue);\n }}\n edge=\"end\"\n >\n <Clear />\n </IconButton>\n </InputAdornment>\n ) : undefined,\n inputProps: {\n ...config,\n formEmptyValue,\n },\n }}\n />\n )}\n />\n );\n};\n\nexport default NumericFieldController;\n"],"names":["resolveFormEmptyValue","optional","emptyValue","NumberFormatCustom","forwardRef","props","ref","valueType","defaultValue","onChange","allowLeadingZeros","formEmptyValue","others","resolvedFormEmpty","jsx","NumericFormat","values","sourceInfo","value","event","NumericFieldController","muiProps","config","textFieldProps","isEmptyValue","Controller","field","fieldState","TextField","e","_a","InputAdornment","IconButton","Clear"],"mappings":";;;;;;AAwEA,MAAMA,IAAwB,CAC5BC,GACAC,MACuC;AACvC,MAAI,CAAAD;AAIJ,WAAOC,KAAc;AACvB,GAKMC,IAAqBC,EAGzB,SAA0BC,GAAOC,GAAK;AAGtC,QAAM;AAAA,IACJ,WAAAC;AAAA,IACA,cAAAC;AAAA,IACA,UAAAC;AAAA,IACA,mBAAAC;AAAA,IACA,gBAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,IACDP,GAGEQ,IAAoBF;AAE1B,SACE,gBAAAG;AAAA,IAACC;AAAA,IAAA;AAAA,MACE,GAAGH;AAAA,MACJ,aAAaN;AAAA,MACb,mBAAmBC,MAAc,YAAYG;AAAA,MAC7C,eAAe,CAACM,GAAQC,MAAe;AACrC,YAAI,CAACR,KAAY,CAACQ,EAAW,MAAO;AACpC,YAAIC;AACJ,gBAAQX,GAAA;AAAA,UACN,KAAK;AACH,YAAAW,IAAQF,EAAO;AACf;AAAA,UACF,KAAK;AACH,YAAAE,IAAQF,EAAO;AACf;AAAA,UACF;AACE,YAAAE,IAAQF,EAAO,cAAcH;AAAA,QAAA;AAEjC,cAAMM,IAAQ;AAAA,UACZ,GAAIF,EAAW;AAAA,UACf,QAAQ;AAAA,YACN,GAAGA,EAAW,MAAM;AAAA,YACpB,MAAMZ,EAAM;AAAA,YACZ,OAAAa;AAAA,UAAA;AAAA,QACF;AAEF,QAAAT,EAASU,CAAK;AAAA,MAChB;AAAA,IAAA;AAAA,EAAA;AAGN,CAAC,GAsBYC,IAKM,CAACf,MAAU;AAC5B,QAAM;AAAA,IACJ,YAAYgB;AAAA,IACZ,QAAAC;AAAA,IACA,cAAAd;AAAA,IACA,YAAAN;AAAA,IACA,UAAAD;AAAA,IACA,GAAGW;AAAA,EAAA,IACDP,GACE,EAAE,gBAAAkB,MAAmBF,KAAY,CAAA,GACjCV,IAAiBX,EAAsBC,GAAUC,CAAU,GAE3DsB,IAAe,CAACN,MACbA,KAAU,QAA+BA,MAAU;AAE5D,SACE,gBAAAJ;AAAA,IAACW;AAAA,IAAA;AAAA,MACC,SAASb,EAAO;AAAA,MAChB,cAAAJ;AAAA,MACA,MAAMI,EAAO;AAAA,MACb,QAAQ,CAAC,EAAE,OAAAc,GAAO,YAAAC,QAAW;;AAC3B,+BAAAb;AAAA,UAACc;AAAA,UAAA;AAAA,YACE,GAAGL;AAAA,YACJ,MAAMG,EAAM;AAAA,YACZ,OAAOF,EAAaE,EAAM,KAAK,IAAI,KAAKA,EAAM;AAAA,YAC9C,UAAU,CAACG,MAAM;AACf,cAAAH,EAAM,SAASG,CAAC;AAAA,YAClB;AAAA,YACA,OAAO,CAAC,CAACF,EAAW;AAAA,YACpB,aAAYG,IAAAH,EAAW,UAAX,gBAAAG,EAAkB;AAAA,YAC9B,QAAQJ,EAAM;AAAA,YACd,YAAY;AAAA,cACV,gBAAgBvB;AAAA,cAChB,cAAeqB,EAAaE,EAAM,KAAK,IAWnC,SAVF,gBAAAZ,EAACiB,GAAA,EAAe,UAAS,OACvB,UAAA,gBAAAjB;AAAA,gBAACkB;AAAA,gBAAA;AAAA,kBACC,SAAS,MAAM;AACb,oBAAAN,EAAM,SAASf,CAAc;AAAA,kBAC/B;AAAA,kBACA,MAAK;AAAA,kBAEL,4BAACsB,GAAA,CAAA,CAAM;AAAA,gBAAA;AAAA,cAAA,GAEX;AAAA,cAEF,YAAY;AAAA,gBACV,GAAGX;AAAA,gBACH,gBAAAX;AAAA,cAAA;AAAA,YACF;AAAA,UACF;AAAA,QAAA;AAAA;AAAA,IACF;AAAA,EAAA;AAIR;"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";const
|
|
1
|
+
"use strict";const s=require("react/jsx-runtime"),t=require("../../react.esm-DGuy6Rn3.cjs"),u=require("../../index-BoenezD8.cjs"),i=require("react-hook-form"),d=require("./index.cjs.js"),a=({optional:n,emptyValue:e,onValuesChange:l})=>{const{control:o,watch:r}=i.useForm({defaultValues:{amount:void 0}});return l(r()),s.jsx(d.NumericFieldController,{control:o,name:"amount",defaultValue:void 0,optional:n,emptyValue:e,inputProps:{textFieldProps:{placeholder:"Numeric Placeholder"}}})};describe("NumericFieldController component",()=>{it("renders a numeric field with the correct placeholder text",()=>{const e=t.renderHook(()=>i.useForm().control).result.current,l="TestNumericField",o="Numeric Placeholder";t.render(s.jsx(d.NumericFieldController,{control:e,name:l,defaultValue:"",inputProps:{textFieldProps:{placeholder:o}}}));const c=t.screen.getByPlaceholderText(o);expect(c).toBeInTheDocument(),expect(c).toHaveAttribute("type","text"),expect(c).toHaveAttribute("name",l),expect(c).toHaveAttribute("placeholder",o)}),it("sets null when clear button is clicked by default",async()=>{const n=u.userEvent.setup();let e={};const{rerender:l}=t.render(s.jsx(a,{onValuesChange:r=>{e=r}})),o=t.screen.getByPlaceholderText("Numeric Placeholder");await n.type(o,"1000"),l(s.jsx(a,{onValuesChange:r=>{e=r}})),await n.click(t.screen.getByRole("button")),await t.waitForWrapper(()=>{expect(e.amount).toBeNull()})}),it("sets undefined when optional is true",async()=>{const n=u.userEvent.setup();let e={};const{rerender:l}=t.render(s.jsx(a,{optional:!0,onValuesChange:r=>{e=r}})),o=t.screen.getByPlaceholderText("Numeric Placeholder");await n.type(o,"1000"),l(s.jsx(a,{optional:!0,onValuesChange:r=>{e=r}})),await n.click(t.screen.getByRole("button")),await t.waitForWrapper(()=>{expect(e.amount).toBeUndefined()})}),it("respects emptyValue={null}",async()=>{const n=u.userEvent.setup();let e={};const{rerender:l}=t.render(s.jsx(a,{emptyValue:null,onValuesChange:r=>{e=r}})),o=t.screen.getByPlaceholderText("Numeric Placeholder");await n.type(o,"1000"),l(s.jsx(a,{emptyValue:null,onValuesChange:r=>{e=r}})),await n.click(t.screen.getByRole("button")),await t.waitForWrapper(()=>{expect(e.amount).toBeNull()})})});
|
|
2
2
|
//# sourceMappingURL=index.test.cjs.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.cjs.js","sources":["../../../src/components/NumericFieldController/index.test.tsx"],"sourcesContent":["import { render, renderHook, screen } from \"@testing-library/react\";\nimport { useForm } from \"react-hook-form\";\n\nimport NumericFieldController from \".\";\n\ndescribe(\"NumericFieldController component\", () => {\n it(\"renders a numeric field with the correct placeholder text\", () => {\n const controlResult = renderHook(() => {\n const methods = useForm();\n return methods.control;\n });\n const control = controlResult.result.current;\n const testName = \"TestNumericField\";\n const placeholder = \"Numeric Placeholder\";\n const defaultValue = \"\";\n\n render(\n <NumericFieldController\n control={control}\n name={testName}\n defaultValue={defaultValue}\n inputProps={{\n textFieldProps: { placeholder: placeholder },\n }}\n />,\n );\n\n const input = screen.getByPlaceholderText(placeholder);\n expect(input).toBeInTheDocument();\n expect(input).toHaveAttribute(\"type\", \"text\");\n expect(input).toHaveAttribute(\"name\", testName);\n expect(input).toHaveAttribute(\"placeholder\", placeholder);\n });\n\n
|
|
1
|
+
{"version":3,"file":"index.test.cjs.js","sources":["../../../src/components/NumericFieldController/index.test.tsx"],"sourcesContent":["import { render, renderHook, screen, waitFor } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { useForm } from \"react-hook-form\";\n\nimport NumericFieldController from \".\";\n\ntype FormValues = {\n amount?: number | null;\n};\n\nconst TestForm = ({\n optional,\n emptyValue,\n onValuesChange,\n}: {\n optional?: boolean;\n emptyValue?: 0 | \"\" | null | undefined;\n onValuesChange: (values: FormValues) => void;\n}) => {\n const { control, watch } = useForm<FormValues>({\n defaultValues: { amount: undefined },\n });\n\n onValuesChange(watch());\n\n return (\n <NumericFieldController\n control={control}\n name=\"amount\"\n defaultValue={undefined}\n optional={optional}\n emptyValue={emptyValue}\n inputProps={{\n textFieldProps: { placeholder: \"Numeric Placeholder\" },\n }}\n />\n );\n};\n\ndescribe(\"NumericFieldController component\", () => {\n it(\"renders a numeric field with the correct placeholder text\", () => {\n const controlResult = renderHook(() => {\n const methods = useForm();\n return methods.control;\n });\n const control = controlResult.result.current;\n const testName = \"TestNumericField\";\n const placeholder = \"Numeric Placeholder\";\n const defaultValue = \"\";\n\n render(\n <NumericFieldController\n control={control}\n name={testName}\n defaultValue={defaultValue}\n inputProps={{\n textFieldProps: { placeholder: placeholder },\n }}\n />,\n );\n\n const input = screen.getByPlaceholderText(placeholder);\n expect(input).toBeInTheDocument();\n expect(input).toHaveAttribute(\"type\", \"text\");\n expect(input).toHaveAttribute(\"name\", testName);\n expect(input).toHaveAttribute(\"placeholder\", placeholder);\n });\n\n it(\"sets null when clear button is clicked by default\", async () => {\n const user = userEvent.setup();\n let latestValues: FormValues = {};\n\n const { rerender } = render(\n <TestForm\n onValuesChange={(values) => {\n latestValues = values;\n }}\n />,\n );\n\n const input = screen.getByPlaceholderText(\"Numeric Placeholder\");\n await user.type(input, \"1000\");\n rerender(\n <TestForm\n onValuesChange={(values) => {\n latestValues = values;\n }}\n />,\n );\n\n await user.click(screen.getByRole(\"button\"));\n\n await waitFor(() => {\n expect(latestValues.amount).toBeNull();\n });\n });\n\n it(\"sets undefined when optional is true\", async () => {\n const user = userEvent.setup();\n let latestValues: FormValues = {};\n\n const { rerender } = render(\n <TestForm\n optional\n onValuesChange={(values) => {\n latestValues = values;\n }}\n />,\n );\n\n const input = screen.getByPlaceholderText(\"Numeric Placeholder\");\n await user.type(input, \"1000\");\n rerender(\n <TestForm\n optional\n onValuesChange={(values) => {\n latestValues = values;\n }}\n />,\n );\n\n await user.click(screen.getByRole(\"button\"));\n\n await waitFor(() => {\n expect(latestValues.amount).toBeUndefined();\n });\n });\n\n it(\"respects emptyValue={null}\", async () => {\n const user = userEvent.setup();\n let latestValues: FormValues = {};\n\n const { rerender } = render(\n <TestForm\n emptyValue={null}\n onValuesChange={(values) => {\n latestValues = values;\n }}\n />,\n );\n\n const input = screen.getByPlaceholderText(\"Numeric Placeholder\");\n await user.type(input, \"1000\");\n rerender(\n <TestForm\n emptyValue={null}\n onValuesChange={(values) => {\n latestValues = values;\n }}\n />,\n );\n\n await user.click(screen.getByRole(\"button\"));\n\n await waitFor(() => {\n expect(latestValues.amount).toBeNull();\n });\n });\n});\n"],"names":["TestForm","optional","emptyValue","onValuesChange","control","watch","useForm","jsx","NumericFieldController","renderHook","testName","placeholder","render","input","screen","user","userEvent","latestValues","rerender","values","waitFor"],"mappings":"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"}
|
|
@@ -1,25 +1,127 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { a as
|
|
3
|
-
import {
|
|
1
|
+
import { jsx as r } from "react/jsx-runtime";
|
|
2
|
+
import { a as h, r as s, s as n, w as i } from "../../react.esm-BBESb8eI.js";
|
|
3
|
+
import { u as p } from "../../index-sarAILcU.js";
|
|
4
|
+
import { useForm as d } from "react-hook-form";
|
|
4
5
|
import { NumericFieldController as m } from "./index.es.js";
|
|
6
|
+
const u = ({
|
|
7
|
+
optional: o,
|
|
8
|
+
emptyValue: e,
|
|
9
|
+
onValuesChange: a
|
|
10
|
+
}) => {
|
|
11
|
+
const { control: l, watch: t } = d({
|
|
12
|
+
defaultValues: { amount: void 0 }
|
|
13
|
+
});
|
|
14
|
+
return a(t()), /* @__PURE__ */ r(
|
|
15
|
+
m,
|
|
16
|
+
{
|
|
17
|
+
control: l,
|
|
18
|
+
name: "amount",
|
|
19
|
+
defaultValue: void 0,
|
|
20
|
+
optional: o,
|
|
21
|
+
emptyValue: e,
|
|
22
|
+
inputProps: {
|
|
23
|
+
textFieldProps: { placeholder: "Numeric Placeholder" }
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
};
|
|
5
28
|
describe("NumericFieldController component", () => {
|
|
6
29
|
it("renders a numeric field with the correct placeholder text", () => {
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
/* @__PURE__ */
|
|
30
|
+
const e = h(() => d().control).result.current, a = "TestNumericField", l = "Numeric Placeholder";
|
|
31
|
+
s(
|
|
32
|
+
/* @__PURE__ */ r(
|
|
10
33
|
m,
|
|
11
34
|
{
|
|
12
|
-
control:
|
|
13
|
-
name:
|
|
35
|
+
control: e,
|
|
36
|
+
name: a,
|
|
14
37
|
defaultValue: "",
|
|
15
38
|
inputProps: {
|
|
16
|
-
textFieldProps: { placeholder:
|
|
39
|
+
textFieldProps: { placeholder: l }
|
|
17
40
|
}
|
|
18
41
|
}
|
|
19
42
|
)
|
|
20
43
|
);
|
|
21
|
-
const
|
|
22
|
-
expect(
|
|
44
|
+
const c = n.getByPlaceholderText(l);
|
|
45
|
+
expect(c).toBeInTheDocument(), expect(c).toHaveAttribute("type", "text"), expect(c).toHaveAttribute("name", a), expect(c).toHaveAttribute("placeholder", l);
|
|
46
|
+
}), it("sets null when clear button is clicked by default", async () => {
|
|
47
|
+
const o = p.setup();
|
|
48
|
+
let e = {};
|
|
49
|
+
const { rerender: a } = s(
|
|
50
|
+
/* @__PURE__ */ r(
|
|
51
|
+
u,
|
|
52
|
+
{
|
|
53
|
+
onValuesChange: (t) => {
|
|
54
|
+
e = t;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
)
|
|
58
|
+
), l = n.getByPlaceholderText("Numeric Placeholder");
|
|
59
|
+
await o.type(l, "1000"), a(
|
|
60
|
+
/* @__PURE__ */ r(
|
|
61
|
+
u,
|
|
62
|
+
{
|
|
63
|
+
onValuesChange: (t) => {
|
|
64
|
+
e = t;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
)
|
|
68
|
+
), await o.click(n.getByRole("button")), await i(() => {
|
|
69
|
+
expect(e.amount).toBeNull();
|
|
70
|
+
});
|
|
71
|
+
}), it("sets undefined when optional is true", async () => {
|
|
72
|
+
const o = p.setup();
|
|
73
|
+
let e = {};
|
|
74
|
+
const { rerender: a } = s(
|
|
75
|
+
/* @__PURE__ */ r(
|
|
76
|
+
u,
|
|
77
|
+
{
|
|
78
|
+
optional: !0,
|
|
79
|
+
onValuesChange: (t) => {
|
|
80
|
+
e = t;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
)
|
|
84
|
+
), l = n.getByPlaceholderText("Numeric Placeholder");
|
|
85
|
+
await o.type(l, "1000"), a(
|
|
86
|
+
/* @__PURE__ */ r(
|
|
87
|
+
u,
|
|
88
|
+
{
|
|
89
|
+
optional: !0,
|
|
90
|
+
onValuesChange: (t) => {
|
|
91
|
+
e = t;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
)
|
|
95
|
+
), await o.click(n.getByRole("button")), await i(() => {
|
|
96
|
+
expect(e.amount).toBeUndefined();
|
|
97
|
+
});
|
|
98
|
+
}), it("respects emptyValue={null}", async () => {
|
|
99
|
+
const o = p.setup();
|
|
100
|
+
let e = {};
|
|
101
|
+
const { rerender: a } = s(
|
|
102
|
+
/* @__PURE__ */ r(
|
|
103
|
+
u,
|
|
104
|
+
{
|
|
105
|
+
emptyValue: null,
|
|
106
|
+
onValuesChange: (t) => {
|
|
107
|
+
e = t;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
)
|
|
111
|
+
), l = n.getByPlaceholderText("Numeric Placeholder");
|
|
112
|
+
await o.type(l, "1000"), a(
|
|
113
|
+
/* @__PURE__ */ r(
|
|
114
|
+
u,
|
|
115
|
+
{
|
|
116
|
+
emptyValue: null,
|
|
117
|
+
onValuesChange: (t) => {
|
|
118
|
+
e = t;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
)
|
|
122
|
+
), await o.click(n.getByRole("button")), await i(() => {
|
|
123
|
+
expect(e.amount).toBeNull();
|
|
124
|
+
});
|
|
23
125
|
});
|
|
24
126
|
});
|
|
25
127
|
//# sourceMappingURL=index.test.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.es.js","sources":["../../../src/components/NumericFieldController/index.test.tsx"],"sourcesContent":["import { render, renderHook, screen } from \"@testing-library/react\";\nimport { useForm } from \"react-hook-form\";\n\nimport NumericFieldController from \".\";\n\ndescribe(\"NumericFieldController component\", () => {\n it(\"renders a numeric field with the correct placeholder text\", () => {\n const controlResult = renderHook(() => {\n const methods = useForm();\n return methods.control;\n });\n const control = controlResult.result.current;\n const testName = \"TestNumericField\";\n const placeholder = \"Numeric Placeholder\";\n const defaultValue = \"\";\n\n render(\n <NumericFieldController\n control={control}\n name={testName}\n defaultValue={defaultValue}\n inputProps={{\n textFieldProps: { placeholder: placeholder },\n }}\n />,\n );\n\n const input = screen.getByPlaceholderText(placeholder);\n expect(input).toBeInTheDocument();\n expect(input).toHaveAttribute(\"type\", \"text\");\n expect(input).toHaveAttribute(\"name\", testName);\n expect(input).toHaveAttribute(\"placeholder\", placeholder);\n });\n\n
|
|
1
|
+
{"version":3,"file":"index.test.es.js","sources":["../../../src/components/NumericFieldController/index.test.tsx"],"sourcesContent":["import { render, renderHook, screen, waitFor } from \"@testing-library/react\";\nimport userEvent from \"@testing-library/user-event\";\nimport { useForm } from \"react-hook-form\";\n\nimport NumericFieldController from \".\";\n\ntype FormValues = {\n amount?: number | null;\n};\n\nconst TestForm = ({\n optional,\n emptyValue,\n onValuesChange,\n}: {\n optional?: boolean;\n emptyValue?: 0 | \"\" | null | undefined;\n onValuesChange: (values: FormValues) => void;\n}) => {\n const { control, watch } = useForm<FormValues>({\n defaultValues: { amount: undefined },\n });\n\n onValuesChange(watch());\n\n return (\n <NumericFieldController\n control={control}\n name=\"amount\"\n defaultValue={undefined}\n optional={optional}\n emptyValue={emptyValue}\n inputProps={{\n textFieldProps: { placeholder: \"Numeric Placeholder\" },\n }}\n />\n );\n};\n\ndescribe(\"NumericFieldController component\", () => {\n it(\"renders a numeric field with the correct placeholder text\", () => {\n const controlResult = renderHook(() => {\n const methods = useForm();\n return methods.control;\n });\n const control = controlResult.result.current;\n const testName = \"TestNumericField\";\n const placeholder = \"Numeric Placeholder\";\n const defaultValue = \"\";\n\n render(\n <NumericFieldController\n control={control}\n name={testName}\n defaultValue={defaultValue}\n inputProps={{\n textFieldProps: { placeholder: placeholder },\n }}\n />,\n );\n\n const input = screen.getByPlaceholderText(placeholder);\n expect(input).toBeInTheDocument();\n expect(input).toHaveAttribute(\"type\", \"text\");\n expect(input).toHaveAttribute(\"name\", testName);\n expect(input).toHaveAttribute(\"placeholder\", placeholder);\n });\n\n it(\"sets null when clear button is clicked by default\", async () => {\n const user = userEvent.setup();\n let latestValues: FormValues = {};\n\n const { rerender } = render(\n <TestForm\n onValuesChange={(values) => {\n latestValues = values;\n }}\n />,\n );\n\n const input = screen.getByPlaceholderText(\"Numeric Placeholder\");\n await user.type(input, \"1000\");\n rerender(\n <TestForm\n onValuesChange={(values) => {\n latestValues = values;\n }}\n />,\n );\n\n await user.click(screen.getByRole(\"button\"));\n\n await waitFor(() => {\n expect(latestValues.amount).toBeNull();\n });\n });\n\n it(\"sets undefined when optional is true\", async () => {\n const user = userEvent.setup();\n let latestValues: FormValues = {};\n\n const { rerender } = render(\n <TestForm\n optional\n onValuesChange={(values) => {\n latestValues = values;\n }}\n />,\n );\n\n const input = screen.getByPlaceholderText(\"Numeric Placeholder\");\n await user.type(input, \"1000\");\n rerender(\n <TestForm\n optional\n onValuesChange={(values) => {\n latestValues = values;\n }}\n />,\n );\n\n await user.click(screen.getByRole(\"button\"));\n\n await waitFor(() => {\n expect(latestValues.amount).toBeUndefined();\n });\n });\n\n it(\"respects emptyValue={null}\", async () => {\n const user = userEvent.setup();\n let latestValues: FormValues = {};\n\n const { rerender } = render(\n <TestForm\n emptyValue={null}\n onValuesChange={(values) => {\n latestValues = values;\n }}\n />,\n );\n\n const input = screen.getByPlaceholderText(\"Numeric Placeholder\");\n await user.type(input, \"1000\");\n rerender(\n <TestForm\n emptyValue={null}\n onValuesChange={(values) => {\n latestValues = values;\n }}\n />,\n );\n\n await user.click(screen.getByRole(\"button\"));\n\n await waitFor(() => {\n expect(latestValues.amount).toBeNull();\n });\n });\n});\n"],"names":["TestForm","optional","emptyValue","onValuesChange","control","watch","useForm","jsx","NumericFieldController","renderHook","testName","placeholder","render","input","screen","user","userEvent","latestValues","rerender","values","waitFor"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('../../assets/index24.css');const e=require("react/jsx-runtime"),S=require("../../index-
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('../../assets/index24.css');const e=require("react/jsx-runtime"),S=require("../../index-DNu4-rkL.cjs"),g="_pageSelectorWrapper_1ylkc_1",x="_pageSelectorContainer_1ylkc_5",_="_selectBoxWrapper_1ylkc_14",l={pageSelectorWrapper:g,pageSelectorContainer:x,selectBoxWrapper:_},r=o=>{const{startRecordNum:c,endRecordNum:s,totalCount:n,values:p,defaultValue:u,onChangePageSize:t}=o,i=p||[{label:"10",value:10},{label:"50",value:50},{label:"100",value:100}],d=a=>{t&&t(a)};return e.jsx("div",{className:l.pageSelectorWrapper,children:e.jsxs("div",{className:l.pageSelectorContainer,children:[e.jsx("p",{children:"表示件数"}),e.jsx("div",{className:l.selectBoxWrapper,children:e.jsx(S.SelectBox,{values:i,defaultValue:u,onChange:a=>d(a.value)})}),e.jsxs("p",{children:[c,"-",s," of ",n]})]})})};exports.PageSizeSelector=r;exports.default=r;
|
|
2
2
|
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as e, jsxs as t } from "react/jsx-runtime";
|
|
2
|
-
import { S as g } from "../../index-
|
|
2
|
+
import { S as g } from "../../index-omG0Vz2u.js";
|
|
3
3
|
import '../../assets/index24.css';const S = "_pageSelectorWrapper_1ylkc_1", h = "_pageSelectorContainer_1ylkc_5", m = "_selectBoxWrapper_1ylkc_14", l = {
|
|
4
4
|
pageSelectorWrapper: S,
|
|
5
5
|
pageSelectorContainer: h,
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('../../assets/index33.css');const ne=require("react/jsx-runtime"),X=require("classnames"),le=require("react-icons/md"),ce=require("../../_commonjsHelpers-DKOUU3wS.cjs"),fe=require("react");var pe={exports:{}};(function(ee,ie){(function(V,J){ee.exports=J(fe)})(ce.commonjsGlobal,V=>(()=>{var J={703:(u,g,P)=>{var a=P(414);function H(){}function F(){}F.resetWarningCache=H,u.exports=function(){function
|
|
2
|
-
See https://reactjs.org/docs/forms.html#controlled-components`),p=t.initialPage?t.initialPage:t.forcePage?t.forcePage:0,e.state={selected:p},e}return i=
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});require('../../assets/index33.css');const ne=require("react/jsx-runtime"),X=require("classnames"),le=require("react-icons/md"),ce=require("../../_commonjsHelpers-DKOUU3wS.cjs"),fe=require("react");var pe={exports:{}};(function(ee,ie){(function(V,J){ee.exports=J(fe)})(ce.commonjsGlobal,V=>(()=>{var J={703:(u,g,P)=>{var a=P(414);function H(){}function F(){}F.resetWarningCache=H,u.exports=function(){function m(se,_,Y,K,oe,U){if(U!==a){var G=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw G.name="Invariant Violation",G}}function w(){return m}m.isRequired=m;var M={array:m,bigint:m,bool:m,func:m,number:m,object:m,string:m,symbol:m,any:m,arrayOf:w,element:m,elementType:m,instanceOf:w,node:m,objectOf:w,oneOf:w,oneOfType:w,shape:w,exact:w,checkPropTypes:F,resetWarningCache:H};return M.PropTypes=M,M}},697:(u,g,P)=>{u.exports=P(703)()},414:u=>{u.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},98:u=>{u.exports=V}},S={};function v(u){var g=S[u];if(g!==void 0)return g.exports;var P=S[u]={exports:{}};return J[u](P,P.exports,v),P.exports}v.n=u=>{var g=u&&u.__esModule?()=>u.default:()=>u;return v.d(g,{a:g}),g},v.d=(u,g)=>{for(var P in g)v.o(g,P)&&!v.o(u,P)&&Object.defineProperty(u,P,{enumerable:!0,get:g[P]})},v.o=(u,g)=>Object.prototype.hasOwnProperty.call(u,g),v.r=u=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(u,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(u,"__esModule",{value:!0})};var ae={};return(()=>{v.r(ae),v.d(ae,{default:()=>ge});var u=v(98),g=v.n(u),P=v(697),a=v.n(P);function H(){return H=Object.assign?Object.assign.bind():function(r){for(var i=1;i<arguments.length;i++){var o=arguments[i];for(var l in o)Object.prototype.hasOwnProperty.call(o,l)&&(r[l]=o[l])}return r},H.apply(this,arguments)}var F=function(r){var i=r.pageClassName,o=r.pageLinkClassName,l=r.page,I=r.selected,D=r.activeClassName,j=r.activeLinkClassName,t=r.getEventListener,e=r.pageSelectedHandler,p=r.href,n=r.extraAriaContext,s=r.pageLabelBuilder,c=r.rel,f=r.ariaLabel||"Page "+l+(n?" "+n:""),h=null;return I&&(h="page",f=r.ariaLabel||"Page "+l+" is your current page",i=i!==void 0?i+" "+D:D,o!==void 0?j!==void 0&&(o=o+" "+j):o=j),g().createElement("li",{className:i},g().createElement("a",H({rel:c,role:p?void 0:"button",className:o,href:p,tabIndex:I?"-1":"0","aria-label":f,"aria-current":h,onKeyPress:e},t(e)),s(l)))};F.propTypes={pageSelectedHandler:a().func.isRequired,selected:a().bool.isRequired,pageClassName:a().string,pageLinkClassName:a().string,activeClassName:a().string,activeLinkClassName:a().string,extraAriaContext:a().string,href:a().string,ariaLabel:a().string,page:a().number.isRequired,getEventListener:a().func.isRequired,pageLabelBuilder:a().func.isRequired,rel:a().string};const m=F;function w(){return w=Object.assign?Object.assign.bind():function(r){for(var i=1;i<arguments.length;i++){var o=arguments[i];for(var l in o)Object.prototype.hasOwnProperty.call(o,l)&&(r[l]=o[l])}return r},w.apply(this,arguments)}var M=function(r){var i=r.breakLabel,o=r.breakAriaLabel,l=r.breakClassName,I=r.breakLinkClassName,D=r.breakHandler,j=r.getEventListener,t=l||"break";return g().createElement("li",{className:t},g().createElement("a",w({className:I,role:"button",tabIndex:"0","aria-label":o,onKeyPress:D},j(D)),i))};M.propTypes={breakLabel:a().oneOfType([a().string,a().node]),breakAriaLabel:a().string,breakClassName:a().string,breakLinkClassName:a().string,breakHandler:a().func.isRequired,getEventListener:a().func.isRequired};const se=M;function _(r){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:"";return r??i}function Y(r){return Y=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(i){return typeof i}:function(i){return i&&typeof Symbol=="function"&&i.constructor===Symbol&&i!==Symbol.prototype?"symbol":typeof i},Y(r)}function K(){return K=Object.assign?Object.assign.bind():function(r){for(var i=1;i<arguments.length;i++){var o=arguments[i];for(var l in o)Object.prototype.hasOwnProperty.call(o,l)&&(r[l]=o[l])}return r},K.apply(this,arguments)}function oe(r,i){for(var o=0;o<i.length;o++){var l=i[o];l.enumerable=l.enumerable||!1,l.configurable=!0,"value"in l&&(l.writable=!0),Object.defineProperty(r,l.key,l)}}function U(r,i){return U=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(o,l){return o.__proto__=l,o},U(r,i)}function G(r,i){if(i&&(Y(i)==="object"||typeof i=="function"))return i;if(i!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return x(r)}function x(r){if(r===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return r}function $(r){return $=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(i){return i.__proto__||Object.getPrototypeOf(i)},$(r)}function y(r,i,o){return i in r?Object.defineProperty(r,i,{value:o,enumerable:!0,configurable:!0,writable:!0}):r[i]=o,r}var te=function(r){(function(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Super expression must either be null or a function");t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,"prototype",{writable:!1}),e&&U(t,e)})(j,r);var i,o,l,I,D=(l=j,I=function(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}(),function(){var t,e=$(l);if(I){var p=$(this).constructor;t=Reflect.construct(e,arguments,p)}else t=e.apply(this,arguments);return G(this,t)});function j(t){var e,p;return function(n,s){if(!(n instanceof s))throw new TypeError("Cannot call a class as a function")}(this,j),y(x(e=D.call(this,t)),"handlePreviousPage",function(n){var s=e.state.selected;e.handleClick(n,null,s>0?s-1:void 0,{isPrevious:!0})}),y(x(e),"handleNextPage",function(n){var s=e.state.selected,c=e.props.pageCount;e.handleClick(n,null,s<c-1?s+1:void 0,{isNext:!0})}),y(x(e),"handlePageSelected",function(n,s){if(e.state.selected===n)return e.callActiveCallback(n),void e.handleClick(s,null,void 0,{isActive:!0});e.handleClick(s,null,n)}),y(x(e),"handlePageChange",function(n){e.state.selected!==n&&(e.setState({selected:n}),e.callCallback(n))}),y(x(e),"getEventListener",function(n){return y({},e.props.eventListener,n)}),y(x(e),"handleClick",function(n,s,c){var f=arguments.length>3&&arguments[3]!==void 0?arguments[3]:{},h=f.isPrevious,O=h!==void 0&&h,W=f.isNext,Z=W!==void 0&&W,q=f.isBreak,L=q!==void 0&&q,R=f.isActive,E=R!==void 0&&R;n.preventDefault?n.preventDefault():n.returnValue=!1;var A=e.state.selected,d=e.props.onClick,N=c;if(d){var k=d({index:s,selected:A,nextSelectedPage:c,event:n,isPrevious:O,isNext:Z,isBreak:L,isActive:E});if(k===!1)return;Number.isInteger(k)&&(N=k)}N!==void 0&&e.handlePageChange(N)}),y(x(e),"handleBreakClick",function(n,s){var c=e.state.selected;e.handleClick(s,n,c<n?e.getForwardJump():e.getBackwardJump(),{isBreak:!0})}),y(x(e),"callCallback",function(n){e.props.onPageChange!==void 0&&typeof e.props.onPageChange=="function"&&e.props.onPageChange({selected:n})}),y(x(e),"callActiveCallback",function(n){e.props.onPageActive!==void 0&&typeof e.props.onPageActive=="function"&&e.props.onPageActive({selected:n})}),y(x(e),"getElementPageRel",function(n){var s=e.state.selected,c=e.props,f=c.nextPageRel,h=c.prevPageRel,O=c.selectedPageRel;return s-1===n?h:s===n?O:s+1===n?f:void 0}),y(x(e),"pagination",function(){var n=[],s=e.props,c=s.pageRangeDisplayed,f=s.pageCount,h=s.marginPagesDisplayed,O=s.breakLabel,W=s.breakClassName,Z=s.breakLinkClassName,q=s.breakAriaLabels,L=e.state.selected;if(f<=c)for(var R=0;R<f;R++)n.push(e.getPageElement(R));else{var E=c/2,A=c-E;L>f-c/2?E=c-(A=f-L):L<c/2&&(A=c-(E=L));var d,N,k=function(T){return e.getPageElement(T)},b=[];for(d=0;d<f;d++){var z=d+1;if(z<=h)b.push({type:"page",index:d,display:k(d)});else if(z>f-h)b.push({type:"page",index:d,display:k(d)});else if(d>=L-E&&d<=L+(L===0&&c>1?A-1:A))b.push({type:"page",index:d,display:k(d)});else if(O&&b.length>0&&b[b.length-1].display!==N&&(c>0||h>0)){var re=d<L?q.backward:q.forward;N=g().createElement(se,{key:d,breakAriaLabel:re,breakLabel:O,breakClassName:W,breakLinkClassName:Z,breakHandler:e.handleBreakClick.bind(null,d),getEventListener:e.getEventListener}),b.push({type:"break",index:d,display:N})}}b.forEach(function(T,B){var Q=T;T.type==="break"&&b[B-1]&&b[B-1].type==="page"&&b[B+1]&&b[B+1].type==="page"&&b[B+1].index-b[B-1].index<=2&&(Q={type:"page",index:T.index,display:k(T.index)}),n.push(Q.display)})}return n}),t.initialPage!==void 0&&t.forcePage!==void 0&&console.warn("(react-paginate): Both initialPage (".concat(t.initialPage,") and forcePage (").concat(t.forcePage,") props are provided, which is discouraged.")+` Use exclusively forcePage prop for a controlled component.
|
|
2
|
+
See https://reactjs.org/docs/forms.html#controlled-components`),p=t.initialPage?t.initialPage:t.forcePage?t.forcePage:0,e.state={selected:p},e}return i=j,(o=[{key:"componentDidMount",value:function(){var t=this.props,e=t.initialPage,p=t.disableInitialCallback,n=t.extraAriaContext,s=t.pageCount,c=t.forcePage;e===void 0||p||this.callCallback(e),n&&console.warn("DEPRECATED (react-paginate): The extraAriaContext prop is deprecated. You should now use the ariaLabelBuilder instead."),Number.isInteger(s)||console.warn("(react-paginate): The pageCount prop value provided is not an integer (".concat(s,"). Did you forget a Math.ceil()?")),e!==void 0&&e>s-1&&console.warn("(react-paginate): The initialPage prop provided is greater than the maximum page index from pageCount prop (".concat(e," > ").concat(s-1,").")),c!==void 0&&c>s-1&&console.warn("(react-paginate): The forcePage prop provided is greater than the maximum page index from pageCount prop (".concat(c," > ").concat(s-1,")."))}},{key:"componentDidUpdate",value:function(t){this.props.forcePage!==void 0&&this.props.forcePage!==t.forcePage&&(this.props.forcePage>this.props.pageCount-1&&console.warn("(react-paginate): The forcePage prop provided is greater than the maximum page index from pageCount prop (".concat(this.props.forcePage," > ").concat(this.props.pageCount-1,").")),this.setState({selected:this.props.forcePage})),Number.isInteger(t.pageCount)&&!Number.isInteger(this.props.pageCount)&&console.warn("(react-paginate): The pageCount prop value provided is not an integer (".concat(this.props.pageCount,"). Did you forget a Math.ceil()?"))}},{key:"getForwardJump",value:function(){var t=this.state.selected,e=this.props,p=e.pageCount,n=t+e.pageRangeDisplayed;return n>=p?p-1:n}},{key:"getBackwardJump",value:function(){var t=this.state.selected-this.props.pageRangeDisplayed;return t<0?0:t}},{key:"getElementHref",value:function(t){var e=this.props,p=e.hrefBuilder,n=e.pageCount,s=e.hrefAllControls;if(p)return s||t>=0&&t<n?p(t+1,n,this.state.selected):void 0}},{key:"ariaLabelBuilder",value:function(t){var e=t===this.state.selected;if(this.props.ariaLabelBuilder&&t>=0&&t<this.props.pageCount){var p=this.props.ariaLabelBuilder(t+1,e);return this.props.extraAriaContext&&!e&&(p=p+" "+this.props.extraAriaContext),p}}},{key:"getPageElement",value:function(t){var e=this.state.selected,p=this.props,n=p.pageClassName,s=p.pageLinkClassName,c=p.activeClassName,f=p.activeLinkClassName,h=p.extraAriaContext,O=p.pageLabelBuilder;return g().createElement(m,{key:t,pageSelectedHandler:this.handlePageSelected.bind(null,t),selected:e===t,rel:this.getElementPageRel(t),pageClassName:n,pageLinkClassName:s,activeClassName:c,activeLinkClassName:f,extraAriaContext:h,href:this.getElementHref(t),ariaLabel:this.ariaLabelBuilder(t),page:t+1,pageLabelBuilder:O,getEventListener:this.getEventListener})}},{key:"render",value:function(){var t=this.props.renderOnZeroPageCount;if(this.props.pageCount===0&&t!==void 0)return t&&t(this.props);var e=this.props,p=e.disabledClassName,n=e.disabledLinkClassName,s=e.pageCount,c=e.className,f=e.containerClassName,h=e.previousLabel,O=e.previousClassName,W=e.previousLinkClassName,Z=e.previousAriaLabel,q=e.prevRel,L=e.nextLabel,R=e.nextClassName,E=e.nextLinkClassName,A=e.nextAriaLabel,d=e.nextRel,N=this.state.selected,k=N===0,b=N===s-1,z="".concat(_(O)).concat(k?" ".concat(_(p)):""),re="".concat(_(R)).concat(b?" ".concat(_(p)):""),T="".concat(_(W)).concat(k?" ".concat(_(n)):""),B="".concat(_(E)).concat(b?" ".concat(_(n)):""),Q=k?"true":"false",de=b?"true":"false";return g().createElement("ul",{className:c||f,role:"navigation","aria-label":"Pagination"},g().createElement("li",{className:z},g().createElement("a",K({className:T,href:this.getElementHref(N-1),tabIndex:k?"-1":"0",role:"button",onKeyPress:this.handlePreviousPage,"aria-disabled":Q,"aria-label":Z,rel:q},this.getEventListener(this.handlePreviousPage)),h)),this.pagination(),g().createElement("li",{className:re},g().createElement("a",K({className:B,href:this.getElementHref(N+1),tabIndex:b?"-1":"0",role:"button",onKeyPress:this.handleNextPage,"aria-disabled":de,"aria-label":A,rel:d},this.getEventListener(this.handleNextPage)),L)))}}])&&oe(i.prototype,o),Object.defineProperty(i,"prototype",{writable:!1}),j}(u.Component);y(te,"propTypes",{pageCount:a().number.isRequired,pageRangeDisplayed:a().number,marginPagesDisplayed:a().number,previousLabel:a().node,previousAriaLabel:a().string,prevPageRel:a().string,prevRel:a().string,nextLabel:a().node,nextAriaLabel:a().string,nextPageRel:a().string,nextRel:a().string,breakLabel:a().oneOfType([a().string,a().node]),breakAriaLabels:a().shape({forward:a().string,backward:a().string}),hrefBuilder:a().func,hrefAllControls:a().bool,onPageChange:a().func,onPageActive:a().func,onClick:a().func,initialPage:a().number,forcePage:a().number,disableInitialCallback:a().bool,containerClassName:a().string,className:a().string,pageClassName:a().string,pageLinkClassName:a().string,pageLabelBuilder:a().func,activeClassName:a().string,activeLinkClassName:a().string,previousClassName:a().string,nextClassName:a().string,previousLinkClassName:a().string,nextLinkClassName:a().string,disabledClassName:a().string,disabledLinkClassName:a().string,breakClassName:a().string,breakLinkClassName:a().string,extraAriaContext:a().string,ariaLabelBuilder:a().func,eventListener:a().string,renderOnZeroPageCount:a().func,selectedPageRel:a().string}),y(te,"defaultProps",{pageRangeDisplayed:2,marginPagesDisplayed:3,activeClassName:"selected",previousLabel:"Previous",previousClassName:"previous",previousAriaLabel:"Previous page",prevPageRel:"prev",prevRel:"prev",nextLabel:"Next",nextClassName:"next",nextAriaLabel:"Next page",nextPageRel:"next",nextRel:"next",breakLabel:"...",breakAriaLabels:{forward:"Jump forward",backward:"Jump backward"},disabledClassName:"disabled",disableInitialCallback:!1,pageLabelBuilder:function(r){return r},eventListener:"onClick",renderOnZeroPageCount:void 0,selectedPageRel:"canonical",hrefAllControls:!1});const ge=te})(),ae})())})(pe);var be=pe.exports;const me=ce.getDefaultExportFromCjs(be),ve="_paginationWrapper_1xjjw_1",he="_pageLink_1xjjw_13",Ce="_paginationItem_1xjjw_29",Pe="_white_1xjjw_35",ye="_arrow_1xjjw_55",ke="_paginationItemActive_1xjjw_61",xe="_disable_1xjjw_74",Le="_marginLeft_1xjjw_79",Ne="_marginRight_1xjjw_83",C={paginationWrapper:ve,pageLink:he,paginationItem:Ce,white:Pe,arrow:ye,paginationItemActive:ke,disable:xe,marginLeft:Le,marginRight:Ne},ue=ee=>{const{pageCount:ie,onChangePage:V,activePage:J,color:S="default"}=ee;return ne.jsx(me,{className:C.paginationWrapper,pageClassName:X(C.paginationItem,{[C.white]:S==="white"}),pageLinkClassName:C.pageLink,nextLinkClassName:C.pageLink,previousLinkClassName:C.pageLink,activeClassName:X(C.paginationItemActive,{[C.white]:S==="white"}),disabledClassName:C.disable,nextClassName:X(C.arrow,C.marginLeft,{[C.white]:S==="white"}),previousClassName:X(C.arrow,C.marginRight,{[C.white]:S==="white"}),renderOnZeroPageCount:null,marginPagesDisplayed:1,breakLabel:"...",previousLabel:ne.jsx(le.MdOutlineNavigateBefore,{}),nextLabel:ne.jsx(le.MdOutlineNavigateNext,{}),pageCount:ie,forcePage:J,onPageChange:v=>{window.scrollTo(0,0),V(v.selected+1)}})};exports.Pagination=ue;exports.default=ue;
|
|
3
3
|
//# sourceMappingURL=index.cjs.js.map
|