Skip to content

Commit cdedf66

Browse files
Merge pull request #249 from wttech/input-string-display-fix
Input display fix
2 parents ce9df51 + 923c85f commit cdedf66

File tree

3 files changed

+50
-2
lines changed

3 files changed

+50
-2
lines changed

core/src/main/java/dev/vml/es/acm/core/code/input/StringInput.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,21 @@ public void tel() {
3636
this.display = Display.TEL;
3737
}
3838

39+
public void numeric() {
40+
this.display = Display.NUMERIC;
41+
}
42+
43+
public void decimal() {
44+
this.display = Display.DECIMAL;
45+
}
46+
3947
public enum Display {
4048
TEXT,
4149
PASSWORD,
4250
URL,
4351
TEL,
52+
NUMERIC,
53+
DECIMAL,
4454
EMAIL;
4555

4656
public static Display of(String name) {

ui.frontend/src/components/CodeInput.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ import { useInput } from '../hooks/form.ts';
2929
import {
3030
Input,
3131
InputValue,
32+
stringInputDisplayToMode,
33+
stringInputDisplayToType,
3234
isBoolInput,
3335
isColorInput,
3436
isDateTimeInput,
@@ -138,7 +140,8 @@ const CodeInput: React.FC<CodeInputProps> = ({ input }) => {
138140
} else if (isStringInput(input)) {
139141
return (
140142
<TextField
141-
type={input.display}
143+
type={stringInputDisplayToType(input.display)}
144+
inputMode={stringInputDisplayToMode(input.display)}
142145
{...field}
143146
value={field.value ?? ''}
144147
label={label}

ui.frontend/src/types/input.ts

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ export type TextInput = Input<string> & {
3535
};
3636

3737
export type StringInput = Input<string> & {
38-
display: 'PLAIN' | 'PASSWORD';
38+
display: 'TEXT' | 'PASSWORD' | 'URL' | 'TEL' | 'EMAIL' | 'NUMERIC' | 'DECIMAL';
3939
};
4040

4141
export type NumberInput = Input<number> &
@@ -140,3 +140,38 @@ export function isMapInput(input: Input<InputValue>): input is MapInput {
140140
export function isKeyValueListInput(input: Input<InputValue>): input is KeyValueListInput {
141141
return input.type === 'KEY_VALUE_LIST';
142142
}
143+
144+
export function stringInputDisplayToType(display: string): string {
145+
switch (display) {
146+
case 'PASSWORD':
147+
return 'password';
148+
case 'URL':
149+
return 'url';
150+
case 'TEL':
151+
return 'tel';
152+
case 'EMAIL':
153+
return 'email';
154+
case 'TEXT':
155+
default:
156+
return 'text';
157+
}
158+
}
159+
160+
export function stringInputDisplayToMode(display: string): "url" | "tel" | "email" | "text" | "numeric" | "decimal" {
161+
switch (display) {
162+
case 'URL':
163+
return 'url';
164+
case 'TEL':
165+
return 'tel';
166+
case 'EMAIL':
167+
return 'email';
168+
case 'NUMERIC':
169+
return 'numeric';
170+
case 'DECIMAL':
171+
return 'decimal';
172+
case 'TEXT':
173+
case 'PASSWORD':
174+
default:
175+
return 'text';
176+
}
177+
}

0 commit comments

Comments
 (0)