Skip to content

Commit b5ce85f

Browse files
feat: useMask docs added
1 parent 072991e commit b5ce85f

6 files changed

Lines changed: 176 additions & 0 deletions

File tree

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { useMask, type UseMaskChangeEvent } from '@primereact/hooks';
2+
import { InputText } from 'primereact/inputtext';
3+
import * as React from 'react';
4+
5+
export default function BasicDemo() {
6+
const ref = React.useRef(null);
7+
const [value, setValue] = React.useState('');
8+
const { onMaskInput, onMaskKeyDown, onMaskKeyPress, onMaskFocus, onMaskBlur, onMaskPaste } = useMask({
9+
mask: '99/99/9999',
10+
onMaskChange: (event: UseMaskChangeEvent) => setValue(event.value ?? ''),
11+
inputRef: ref
12+
});
13+
14+
return (
15+
<div className="card flex justify-center">
16+
<InputText ref={ref} value={value} placeholder="99/99/9999" onInput={onMaskInput} onKeyDown={onMaskKeyDown} onKeyPress={onMaskKeyPress} onFocus={onMaskFocus} onBlur={onMaskBlur} onPaste={onMaskPaste} />
17+
</div>
18+
);
19+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import { useMask, type UseMaskChangeEvent } from '@primereact/hooks';
2+
import { InputText } from 'primereact/inputtext';
3+
import { Label } from 'primereact/label';
4+
import * as React from 'react';
5+
6+
export default function FormatPatternsDemo() {
7+
const input1 = React.useRef(null);
8+
const input2 = React.useRef(null);
9+
const input3 = React.useRef(null);
10+
const [value1, setValue1] = React.useState('');
11+
const [value2, setValue2] = React.useState('');
12+
const [value3, setValue3] = React.useState('');
13+
14+
// SSN Mask
15+
const {
16+
onMaskInput: onMaskInput1,
17+
onMaskKeyDown: onMaskKeyDown1,
18+
onMaskKeyPress: onMaskKeyPress1,
19+
onMaskFocus: onMaskFocus1,
20+
onMaskBlur: onMaskBlur1,
21+
onMaskPaste: onMaskPaste1
22+
} = useMask({
23+
mask: '999-99-9999',
24+
onMaskChange: (event: UseMaskChangeEvent) => setValue1(event.value ?? ''),
25+
inputRef: input1
26+
});
27+
28+
// Phone Mask
29+
const {
30+
onMaskInput: onMaskInput2,
31+
onMaskKeyDown: onMaskKeyDown2,
32+
onMaskKeyPress: onMaskKeyPress2,
33+
onMaskFocus: onMaskFocus2,
34+
onMaskBlur: onMaskBlur2,
35+
onMaskPaste: onMaskPaste2
36+
} = useMask({
37+
mask: '(999) 999-9999',
38+
onMaskChange: (event: UseMaskChangeEvent) => setValue2(event.value ?? ''),
39+
inputRef: input2
40+
});
41+
42+
// Serial Mask
43+
const {
44+
onMaskInput: onMaskInput3,
45+
onMaskKeyDown: onMaskKeyDown3,
46+
onMaskKeyPress: onMaskKeyPress3,
47+
onMaskFocus: onMaskFocus3,
48+
onMaskBlur: onMaskBlur3,
49+
onMaskPaste: onMaskPaste3
50+
} = useMask({
51+
mask: 'a*-999-a999',
52+
onMaskChange: (event: UseMaskChangeEvent) => setValue3(event.value ?? ''),
53+
inputRef: input3
54+
});
55+
56+
return (
57+
<div className="card flex flex-wrap gap-4">
58+
<div className="flex-auto">
59+
<Label htmlFor="ssn" className="font-bold block mb-2">
60+
SSN
61+
</Label>
62+
<InputText ref={input1} value={value1} id="ssn" placeholder="999-99-9999" fluid onInput={onMaskInput1} onKeyDown={onMaskKeyDown1} onKeyPress={onMaskKeyPress1} onFocus={onMaskFocus1} onBlur={onMaskBlur1} onPaste={onMaskPaste1} />
63+
</div>
64+
65+
<div className="flex-auto">
66+
<Label htmlFor="phone" className="font-bold block mb-2">
67+
Phone
68+
</Label>
69+
<InputText ref={input2} value={value2} id="phone" placeholder="(999) 999-9999" fluid onInput={onMaskInput2} onKeyDown={onMaskKeyDown2} onKeyPress={onMaskKeyPress2} onFocus={onMaskFocus2} onBlur={onMaskBlur2} onPaste={onMaskPaste2} />
70+
</div>
71+
72+
<div className="flex-auto">
73+
<Label htmlFor="serial" className="font-bold block mb-2">
74+
Serial
75+
</Label>
76+
<InputText ref={input3} value={value3} id="serial" placeholder="a*-999-a999" fluid onInput={onMaskInput3} onKeyDown={onMaskKeyDown3} onKeyPress={onMaskKeyPress3} onFocus={onMaskFocus3} onBlur={onMaskBlur3} onPaste={onMaskPaste3} />
77+
</div>
78+
</div>
79+
);
80+
}

apps/showcase/demo/usemask/mask-demo.tsx

Whitespace-only changes.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
import { useMask, type UseMaskChangeEvent } from '@primereact/hooks';
2+
import { InputText } from 'primereact/inputtext';
3+
import * as React from 'react';
4+
5+
export default function OptionalDemo() {
6+
const ref = React.useRef(null);
7+
const [value, setValue] = React.useState('');
8+
const { onMaskInput, onMaskKeyDown, onMaskKeyPress, onMaskFocus, onMaskBlur, onMaskPaste } = useMask({
9+
mask: '(999) 999-9999? x99999',
10+
onMaskChange: (event: UseMaskChangeEvent) => setValue(event.value ?? ''),
11+
inputRef: ref
12+
});
13+
14+
return (
15+
<div className="card flex justify-center">
16+
<InputText ref={ref} placeholder="(999) 999-9999 x99999" value={value} onInput={onMaskInput} onKeyDown={onMaskKeyDown} onKeyPress={onMaskKeyPress} onFocus={onMaskFocus} onBlur={onMaskBlur} onPaste={onMaskPaste} />
17+
</div>
18+
);
19+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { useMask, type UseMaskChangeEvent } from '@primereact/hooks';
2+
import { InputText } from 'primereact/inputtext';
3+
import * as React from 'react';
4+
5+
export default function SlotCharDemo() {
6+
const ref = React.useRef(null);
7+
const [value, setValue] = React.useState('');
8+
const { onMaskInput, onMaskKeyDown, onMaskKeyPress, onMaskFocus, onMaskBlur, onMaskPaste } = useMask({
9+
mask: '99/99/9999',
10+
slotChar: 'mm/dd/yyyy',
11+
onMaskChange: (event: UseMaskChangeEvent) => setValue(event.value ?? ''),
12+
inputRef: ref
13+
});
14+
15+
return (
16+
<div className="card flex justify-center">
17+
<InputText ref={ref} placeholder="mm/dd/yyyy" value={value} onInput={onMaskInput} onKeyDown={onMaskKeyDown} onKeyPress={onMaskKeyPress} onFocus={onMaskFocus} onBlur={onMaskBlur} onPaste={onMaskPaste} />
18+
</div>
19+
);
20+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
---
2+
title: useMask
3+
description: useMask is used to enter input in a certain format such as numeric, date, currency, email and phone.
4+
---
5+
6+
## Usage
7+
8+
```tsx
9+
import { useMask } from '@primereact/hooks';
10+
```
11+
12+
```tsx
13+
const mask = useMask();
14+
```
15+
16+
## Examples
17+
18+
### Basic
19+
20+
<DocDemoViewer name="usemask:basic-demo" />
21+
22+
### Format Patterns
23+
24+
Mask format can be a combination of the following definitions; _a_ for alphabetic characters, _9_ for numeric characters and _\*_ for alphanumberic characters. In addition, formatting characters like _(_ , _)_ , _-_ are also accepted.
25+
26+
<DocDemoViewer name="usemask:format-patterns-demo" />
27+
28+
### Optional
29+
30+
When the input does not complete the mask definition, it is cleared by default. Use _autoClear_ option to control this behavior. In addition, _?_ is used to mark anything after the question mark optional.
31+
32+
<DocDemoViewer name="usemask:optional-demo" />
33+
34+
### Slot Character
35+
36+
Default placeholder for a mask is underscore that can be customized using _slotChar_ option.
37+
38+
<DocDemoViewer name="usemask:slot-char-demo" />

0 commit comments

Comments
 (0)