@servicetitan/form 14.3.0 → 16.0.2
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/date-range-picker/date-range-picker.d.ts +47 -0
- package/dist/date-range-picker/date-range-picker.d.ts.map +1 -0
- package/dist/date-range-picker/date-range-picker.js +256 -0
- package/dist/date-range-picker/date-range-picker.js.map +1 -0
- package/dist/date-range-picker/date-range-picker.module.css +37 -0
- package/dist/date-range-picker/index.d.ts +2 -0
- package/dist/date-range-picker/index.d.ts.map +1 -0
- package/dist/date-range-picker/index.js +14 -0
- package/dist/date-range-picker/index.js.map +1 -0
- package/dist/demo/date-range-picker.d.ts +3 -0
- package/dist/demo/date-range-picker.d.ts.map +1 -0
- package/dist/demo/date-range-picker.js +17 -0
- package/dist/demo/date-range-picker.js.map +1 -0
- package/dist/demo/index.d.ts +4 -0
- package/dist/demo/index.d.ts.map +1 -1
- package/dist/demo/index.js +4 -0
- package/dist/demo/index.js.map +1 -1
- package/dist/demo/input-date-mask.d.ts +3 -0
- package/dist/demo/input-date-mask.d.ts.map +1 -0
- package/dist/demo/input-date-mask.js +17 -0
- package/dist/demo/input-date-mask.js.map +1 -0
- package/dist/demo/original-number-input.d.ts +3 -0
- package/dist/demo/original-number-input.d.ts.map +1 -0
- package/dist/demo/original-number-input.js +17 -0
- package/dist/demo/original-number-input.js.map +1 -0
- package/dist/demo/phone-number-input.d.ts +3 -0
- package/dist/demo/phone-number-input.d.ts.map +1 -0
- package/dist/demo/phone-number-input.js +8 -0
- package/dist/demo/phone-number-input.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/input-date-mask/index.d.ts +2 -0
- package/dist/input-date-mask/index.d.ts.map +1 -0
- package/dist/input-date-mask/index.js +14 -0
- package/dist/input-date-mask/index.js.map +1 -0
- package/dist/input-date-mask/input-date-mask.d.ts +14 -0
- package/dist/input-date-mask/input-date-mask.d.ts.map +1 -0
- package/dist/input-date-mask/input-date-mask.js +122 -0
- package/dist/input-date-mask/input-date-mask.js.map +1 -0
- package/dist/input-date-mask/input-date-mask.module.css +22 -0
- package/dist/original-number-input/index.d.ts +2 -0
- package/dist/original-number-input/index.d.ts.map +1 -0
- package/dist/original-number-input/index.js +14 -0
- package/dist/original-number-input/index.js.map +1 -0
- package/dist/original-number-input/ordinal-number-input.d.ts +22 -0
- package/dist/original-number-input/ordinal-number-input.d.ts.map +1 -0
- package/dist/original-number-input/ordinal-number-input.js +149 -0
- package/dist/original-number-input/ordinal-number-input.js.map +1 -0
- package/dist/phone-number-input/index.d.ts +2 -0
- package/dist/phone-number-input/index.d.ts.map +1 -0
- package/dist/phone-number-input/index.js +14 -0
- package/dist/phone-number-input/index.js.map +1 -0
- package/dist/phone-number-input/phone-number-input.d.ts +7 -0
- package/dist/phone-number-input/phone-number-input.d.ts.map +1 -0
- package/dist/phone-number-input/phone-number-input.js +26 -0
- package/dist/phone-number-input/phone-number-input.js.map +1 -0
- package/package.json +20 -13
- package/src/date-range-picker/date-range-picker.module.css +37 -0
- package/src/date-range-picker/date-range-picker.module.css.d.ts +7 -0
- package/src/date-range-picker/date-range-picker.tsx +297 -0
- package/src/date-range-picker/index.ts +1 -0
- package/src/demo/date-range-picker.tsx +33 -0
- package/src/demo/index.ts +4 -0
- package/src/demo/input-date-mask.tsx +30 -0
- package/src/demo/original-number-input.tsx +32 -0
- package/src/demo/phone-number-input.tsx +9 -0
- package/src/index.ts +4 -0
- package/src/input-date-mask/index.ts +1 -0
- package/src/input-date-mask/input-date-mask.module.css +22 -0
- package/src/input-date-mask/input-date-mask.module.css.d.ts +4 -0
- package/src/input-date-mask/input-date-mask.tsx +157 -0
- package/src/original-number-input/__tests__/ordinal-number-input.test.tsx +51 -0
- package/src/original-number-input/index.ts +1 -0
- package/src/original-number-input/ordinal-number-input.tsx +111 -0
- package/src/phone-number-input/index.ts +1 -0
- package/src/phone-number-input/phone-number-input.tsx +19 -0
@@ -0,0 +1,111 @@
|
|
1
|
+
import { Input, InputProps } from '@servicetitan/design-system';
|
2
|
+
import { action, observable, makeObservable } from 'mobx';
|
3
|
+
import { observer } from 'mobx-react';
|
4
|
+
import { Component, ChangeEvent } from 'react';
|
5
|
+
|
6
|
+
export interface OrdinalNumberInputProps extends Omit<InputProps, 'onChange'> {
|
7
|
+
min: number;
|
8
|
+
max: number;
|
9
|
+
value?: number;
|
10
|
+
onChange?(value?: number): void;
|
11
|
+
}
|
12
|
+
|
13
|
+
@observer
|
14
|
+
export class OrdinalNumberInput extends Component<OrdinalNumberInputProps> {
|
15
|
+
@observable hasFocus = false;
|
16
|
+
|
17
|
+
constructor(props: OrdinalNumberInputProps) {
|
18
|
+
super(props);
|
19
|
+
makeObservable(this);
|
20
|
+
}
|
21
|
+
|
22
|
+
render() {
|
23
|
+
const { min, max, value, onChange, ...props } = this.props;
|
24
|
+
|
25
|
+
return (
|
26
|
+
<Input
|
27
|
+
placeholder={this.getPlaceholder()}
|
28
|
+
{...props}
|
29
|
+
value={this.getDisplayValue()}
|
30
|
+
onFocus={this.handleFocus}
|
31
|
+
onBlur={this.handleBlur}
|
32
|
+
onChange={this.handleChange}
|
33
|
+
/>
|
34
|
+
);
|
35
|
+
}
|
36
|
+
|
37
|
+
@action private handleFocus = () => (this.hasFocus = true);
|
38
|
+
@action private handleBlur = () => (this.hasFocus = false);
|
39
|
+
|
40
|
+
private handleChange = (e: ChangeEvent<HTMLInputElement>): void => {
|
41
|
+
const parsed = parseIntIntoRange(e.currentTarget.value, this.props.min, this.props.max);
|
42
|
+
if (this.props.onChange) {
|
43
|
+
this.props.onChange(parsed);
|
44
|
+
}
|
45
|
+
};
|
46
|
+
|
47
|
+
private getPlaceholder() {
|
48
|
+
return `${this.props.min}‒${this.props.max}`;
|
49
|
+
}
|
50
|
+
|
51
|
+
private getDisplayValue() {
|
52
|
+
const value = this.props.value;
|
53
|
+
if (typeof value !== 'number') {
|
54
|
+
return '';
|
55
|
+
}
|
56
|
+
return this.hasFocus ? value.toString() : ordinalString(value);
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
60
|
+
export function parseIntIntoRange(input: string, min: number, max: number) {
|
61
|
+
let parsed = parseInt(input, 10);
|
62
|
+
if (Number.isNaN(parsed)) {
|
63
|
+
return undefined;
|
64
|
+
}
|
65
|
+
if (parsed < min) {
|
66
|
+
parsed = min;
|
67
|
+
} else if (parsed > max) {
|
68
|
+
parsed = max;
|
69
|
+
}
|
70
|
+
return parsed;
|
71
|
+
}
|
72
|
+
|
73
|
+
export function ordinalString(num: number): string {
|
74
|
+
switch (num % 100) {
|
75
|
+
case 11:
|
76
|
+
case 12:
|
77
|
+
case 13:
|
78
|
+
return num.toString() + 'th';
|
79
|
+
default:
|
80
|
+
switch (num % 10) {
|
81
|
+
case 1:
|
82
|
+
return num.toString() + 'st';
|
83
|
+
case 2:
|
84
|
+
return num.toString() + 'nd';
|
85
|
+
case 3:
|
86
|
+
return num.toString() + 'rd';
|
87
|
+
default:
|
88
|
+
return num.toString() + 'th';
|
89
|
+
}
|
90
|
+
}
|
91
|
+
}
|
92
|
+
|
93
|
+
export function ordinalSuffix(num: number): string {
|
94
|
+
switch (num % 100) {
|
95
|
+
case 11:
|
96
|
+
case 12:
|
97
|
+
case 13:
|
98
|
+
return 'th';
|
99
|
+
default:
|
100
|
+
switch (num % 10) {
|
101
|
+
case 1:
|
102
|
+
return 'st';
|
103
|
+
case 2:
|
104
|
+
return 'nd';
|
105
|
+
case 3:
|
106
|
+
return 'rd';
|
107
|
+
default:
|
108
|
+
return 'th';
|
109
|
+
}
|
110
|
+
}
|
111
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
export * from './phone-number-input';
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import { forwardRef } from 'react';
|
2
|
+
import InputMask from 'react-input-mask';
|
3
|
+
|
4
|
+
import { Form, FormInputProps } from '@servicetitan/design-system';
|
5
|
+
|
6
|
+
export interface PhoneNumberInputProps extends FormInputProps {
|
7
|
+
sip?: boolean;
|
8
|
+
}
|
9
|
+
|
10
|
+
export const PhoneNumberInput = forwardRef<HTMLInputElement, PhoneNumberInputProps>(
|
11
|
+
({ sip, ...props }, ref) =>
|
12
|
+
sip ? (
|
13
|
+
<Form.Input {...props} ref={ref} />
|
14
|
+
) : (
|
15
|
+
<InputMask maskChar={null} mask="(999) 999-9999" {...props}>
|
16
|
+
{() => <Form.Input ref={ref} {...props} />}
|
17
|
+
</InputMask>
|
18
|
+
)
|
19
|
+
);
|