Keyboard
Este módulo oferece uma série de funcionalidades referente ao telcado físico, virtual, mapeamento de teclas, e controle de input do teclado físico do seu POS.
Teclado Virtual - Como usar
◼︎ Adicine o componente <Keyboard/>
na raiz do seu projeto.
<Keyboard />
<script>
export default {
components: {
Keyboard: '@mamba/keyboard/Keyboard.html',
},
};
</script>
◼︎ Ou adicine o componente <Keyboard/>
em uma rota específica, podendo assimm passar alguma de suas propriedades pelo HTML.
<Keyboard keyboardType={KeyboardType.Math} />
<script>
import { KeyboardType } from '@mamba/keyboard/lib/index.js';
export default {
components: {
Keyboard: '@mamba/keyboard/Keyboard.html',
},
helpers: {
KeyboardType,
},
};
</script>
As propriedades declaradas no elemento HTML, serão usadas no inicializador do teclado virtual, podendo também serem sobrescritas por seus métodos(ex.: Keyboard.setOptions) mais tarde. Essas propriedades são salvas como ponto de partida, caso use o método Keyboard.reset ou Keyboard.resetOptions
Examplo de uso da API
import { KEYBOARD } from '@mamba/core';
import Keyboard from '@mamba/keyboard/api/index.js';
import { KeyboardType, KeyboardUpdateMode } from '@mamba/keyboard/lib/index.js';
Keyboard.isBackspaceEnabled();
Keyboard.disableBackspace();
Keyboard.isBackspaceEnabled();
Keyboard.enableBackspace();
Keyboard.setOptions({
keyboardType: KeyboardType.Math,
updateMode: KeyboardUpdateMode.Manual,
maxLength: String(999.99).length - 1,
onKeyPress: (button) => {
if (button === KEYBOARD.ENTER) {
} else {
}
},
});
Keyboard.hide();
Boas Práticas e Dicas
- Por hora, o teclado virtual nunca será iniciado em POS's menores, então não é necessário iniciar seu componente para esses casos, para não usar processamento e memória desnecessariamente
{#if !$POS.CAPABILITIES.IS_SMALL_SCREEN}
<Keyboard autoRender="{false}" visibility="{KeyboardVisibility.Hidden}" keepVisible="{false}" />
{/if}
import { Device } from '@mamba/utils/index.js';
export const INITIAL_DATA = {
POS: {
CAPABILITIES: {
IS_SMALL_SCREEN: Device.hasSmallScreen(),
},
},
};
const store = new Store(INITIAL_DATA);
- Como saber se o teclado virtual existe ou foi inicializado?
A api do teclado exporta uma propriedade em sua Interface, que se chama virtualKeyboard: Keyboard
, onde ela consulta e retorna se existe o teclado virtual ou não. Exemplo:
No console do seu app:
window.$Keyboard.virtualKeyboard;
window.$Keyboard.virtualKeyboard;
No código do seu app:
+ import Keyboard from '@mamba/keyboard/api/index.js';
# Pode quebrar:
- Keyboard.setOptions({
- keyboardType: KeyboardType.Numeric,
- )}
# Ao invés, verifique se ele existe antes:
+ if (Keyboard.virtualKeyboard) {
+ Keyboard.setOptions({
+ keyboardType: KeyboardType.Numeric,
+ )}
+ }
Isso se faz útil para casos onde seu fluxo precisa fazer algum tratamento em sua rota, mas não sabe se o teclado virtual existe.
Exemplos
Para exemplos de uso, veja aqui.
API
Opções do teclado virtual
Tenha cuidado se tiver mais de um campo de entrada na mesma página, pois essas são propriedades globais do teclado (O que se aplicar para um <Input />
, será aplicado para todos) no modo KeyboardUpdateMode.Auto
. Se precisar trabalhar com mais de um campo por página, utilize a propriedade input
e/ou updadeMode = KeyboardUpdateMode.Manual
.
interface KeyboardOptions {
keyboardType?: KeyboardType;
layout?: KeyboardLayoutObject;
layoutName?: string;
layoutDirection?: LayoutDirection;
theme?: string;
themeVariation?: KeyboardThemeVariation | string;
labels?: { [button: string]: string };
outputs?: { [button: string]: string };
activeButtonClass?: string;
hiddenKeyboardClass?: string;
debug?: boolean;
maxLength?: any;
readonly?: boolean;
lastValue?: string;
filtersNumbersOnly?: boolean;
renderCondition?: boolean | (() => boolean);
disabled?: boolean;
visibility?: KeyboardVisibility | string;
disableCursorPositioning?: boolean;
inputPattern?: RegExp;
excludeFromLayout?: { [layoutName: string]: string[] };
allowKeySyntheticEvent?: string[];
input?: KeyboardInputOption;
updateMode?: KeyboardUpdateMode;
keepVisible?: boolean;
lockCursor?: boolean;
autoRender?: boolean;
soundEnabled?: boolean;
beepTone?: BeepTone;
beepTime?: number;
enableLayoutSuggestions?: boolean;
layoutSuggestions?: { [key: string]: [string?, string?, string?, string?] };
[name: string]: any;
}
Eventos do teclado virtual
type FunctionKeyPressCallback = (
button: string,
instance: Keyboard,
e?: KeyboardHandlerEvent,
) => void;
interface KeyboardTypeEvents {
beforeFirstRender?: (instance: Keyboard) => void;
beforeRender?: (instance: Keyboard) => void;
onRender?: (instance: Keyboard) => void;
onInit?: (instance: Keyboard) => void;
onChange?: (input: string, e?: KeyboardHandlerEvent) => void;
onKeyPress?: (button: string, e?: KeyboardHandlerEvent) => void;
onFunctionKeyPress?: FunctionKeyPressCallback;
onStandardKeyPress?: FunctionKeyPressCallback;
}
Passando opções pelo <Input />
Você pode passar opções simples, compatíveis com JSON (não aceita funções/eventos do teclado), pelo elemento HTML input:
<Input
data-keyboard="true"
data-keyboard-options='{ "themeVariation": "my-variation", "keepVisible": false }'
/>
Caso você utilize o @mamba/input
, é mais permissivo:
<Input
label="Insira o valor"
keyboardOptions={{ themeVariation: KeyboardThemeVariation.Compact }}
/>
<script>
export default {
components: {
Input: '@mamba/input',
},
};
</script>
API
Responsável por expor métodos de controle sobre o teclado físico e virutal, bem como métodos de ajuda auxiliares do POS, e acesso aos métodos do teclado virtual e derivados.
Interface
interface Keyboard {
virtualKeyboard: Keyboard;
visibility: KeyboardVisibility;
setKeyboardInputAsNumeric: () => void;
setKeyboardInputAsAlphanumeric: () => void;
getKeyCode: (keyName: string) => number;
getKeyName: (keyCode: number) => string;
isNumericKey: (keyCode: number) => boolean;
isActionKey: (keyCode: number) => boolean;
isBackspaceEnabled: () => boolean;
disableBackspace: () => void;
enableBackspace: () => void;
setKeyboardType(type: KeyboardType): void;
setOptions(options?: {}): void;
setInput(input: string): void;
getInput(): string;
clearInput(): void;
replaceInput(keyboardInput: { default: string }): void;
render(): void;
show(): void;
hide(): void;
unmount(): void;
resetOptions(): void;
reset(): void;
currentInputPatternIsValid(): boolean;
getButtonElement(button: string): undefined | KeyboardElement | KeyboardElement[];
setKeyboardAsCustomType(options: KeyboardOptions = {}): void;
setKeyboardAsDefaultType(): void;
setKeyboardAsMathType(): void;
setKeyboardAsNumericType(): void;
setKeyboardAsPhoneType(): void;
destroy(): void;
}
Métodos
setKeyboardInputAsNumeric()
Define que a máquina irá digitar apenas números.
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.setKeyboardInputAsNumeric();
setKeyboardInputAsAlphanumeric()
Define que a máquina irá digitar caracteres alfanuméricos.
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.setKeyboardInputAsAlphanumeric();
getKeyCode(keyName: string)
Retorna o código da tecla
referente a uma tecla da máquina.
import Keyboard from '@mamba/keyboard/api/index.js'
Keyboard.getKeyCode('Enter');
Keyboard.getKeyCode('enter');
Keyboard.getKeyCode('Back');
Keyboard.getKeyCode('Close');
Keyboard.getKeyCode('Help');
Keyboard.getKeyCode('Shortcuts');
Keyboard.getKeyCode('0');
...
Keyboard.getKeyCode('9');
parseEventKeys(event: KeyboardEvent)
Obtem o código e nome da tecla normalizado de acordo com a tabela de teclas do POS através de um evento de entrada de teclado.
Retorna uma tupla de tamanho 2, onde o índice 0 é o código encontrado, e o de índice 1, o nome da tecla.
import Keyboard from '@mamba/keyboard/api/index.js';
function onKeydown(event) {
const [keyCode, keyName] = Keyboard.parseEventKeys(event);
}
parseEventKeyName(event: KeyboardEvent)
Obtem o nome da tecla normalizado de acordo com a tabela de teclas do POS através de um evento de entrada de teclado.
Retorna o nome da tecla.
import Keyboard from '@mamba/keyboard/api/index.js';
function onKeydown(event) {
const keyName = Keyboard.parseEventKeyName(event);
}
parseEventKeyCode(event: KeyboardEvent)
Obtem o código da telca compatível com o ecosistema do simulador, teclado virtual e POS físico.
Retorna o código da tecla do hardware.
import Keyboard from '@mamba/keyboard/api/index.js';
function onKeydown(event) {
const keyCode = Keyboard.parseEventKeyCode(event);
}
getKeyName(keyCode: number)
Retorna o nome da tecla
referente ao código de uma tecla da máquina.
import Keyboard from '@mamba/keyboard/api/index.js'
Keyboard.getKeyName(13);
Keyboard.getKeyName(8);
Keyboard.getKeyName(27);
Keyboard.getKeyName(17);
Keyboard.getKeyName(16);
Keyboard.getKeyName(48);
...
Keyboard.getKeyName(57);
isNumericKey(keyCode: number): void
Retorna se uma tecla representa um número.
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.isNumericKey(13);
Keyboard.isNumericKey(57);
isActionKey(keyCode: number): void
(Obsoleto, usar isFunctionKey()
)
Retorna se uma tecla representa uma ação.
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.isActionKey(13);
Keyboard.isActionKey(57);
isFunctionKey(keyCode: number): void
Retorna se uma tecla representa uma ação.
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.isFunctionKey(13);
Keyboard.isFunctionKey(57);
isBackspaceEnabled(): void
Retorna se o uso do botão físico de voltar
/backspace
está habilitado ou não no aplicativo.
disableBackspace(): void
Desabilita o uso do botão físico de voltar
/backspace
no aplicativo em questão.
enableBackspace(): void
Habilita o uso do botão físico de voltar
/backspace
no aplicativo em questão.
setKeyboardType(type: KeyboardType): void
Altere o tipo de teclado passando um dos tipos do KeyboardType
.
setOptions(options?: {}): void
Define uma nova opção ou modifica as existentes após a inicialização.
setInput(input: string): void
Defina a entrada virtual do teclado virtual. Este método não altera o valores de elementos <input>
getInput(): string
Obtenha a entrada virtual do teclado virtual (você também pode obtê-la pela propriedade onChange
).
clearInput(): void
Limpa a entrada virtual do teclado virtual.
replaceInput(keyboardInput: { default: string }): void
Substitui o valor de entrada virtual do teclado virtual.
render(): void
Renderiza ou atualiza os botões do teclado.
Pode ser chamado direto se autoRender
estiver desativado.
@throws LAYOUT_NOT_FOUND_ERROR
- layout não encontrado.
@throws LAYOUT_NAME_NOT_FOUND_ERROR
- nome do layout não encontrado no objeto de layout
show(): void
Mostra o teclado e montá-lo se já não estiver.
hide(): void
Oculta o teclado. Esse método faz menos processamento do que a propriedade visibility
.
unmount(): void
Remove todas as linhas do teclado e define a visibilidade como oculta.
resetOptions(): void
Redefine as propriedades do teclado.
reset(): void
Redefine as propriedades do teclado e os elementos do teclado.
currentInputPatternIsValid(): boolean
Retorna se a entrada atual é válida com a propriedade pattern
configurada.
getButtonElement(button: string): undefined | KeyboardElement | KeyboardElement[]
Obtém o elemento DOM de um botão. Se houver vários botões com o mesmo nome, será retornado um array dos Elementos DOM.
setKeyboardAsCustomType(options: KeyboardOptions = {}): void
Defina o teclado virtual como tipo personalizado.
Esse método ja define por si só, o tipo do teclado para o tipo customizado(KeyboardType.Custom
)
setKeyboardAsDefaultType(): void
Defina o teclado virtual do tipo alfanumérico padrão.
setKeyboardAsMathType(): void
Defina o teclado virtual do tipo calculadora.
setKeyboardAsNumericType(): void
Defina o teclado virtual como tipo numérico.
setKeyboardAsPhoneType(): void
Defina o teclado virtual como tipo de telefone.
destroy(): void
Destroi o teclado virtual, remove seus ouvintes e elementos do DOM. Este método não deve ser usado se você estiver usando o componente <Keyboard />
.
shouldUpdateKeyboardView(): void
Atualiza os estilos automáticos do teclado virtual. Normalmente posicionamento na tela.
updateSoundEnabledState(): void
Atualiza o estado do som do teclado virtual com base nas configurações do POS.
Enumeradores
enum KeyboardUpdateMode {
Auto = 'auto',
Manual = 'manual',
}
enum KeyboardVisibility {
Hidden = 'hidden',
Visible = 'visible',
}
enum LayoutDirection {
Horizontal = 'horizontal',
Vertical = 'vertical',
Fixed = 'fixed',
}
enum KeyboardType {
Default = 'default',
Numeric = 'numeric',
Phone = 'phone',
Math = 'math',
Custom = 'custom',
}
export enum KeyboardThemeVariation {
Large = 'large',
Default = 'default',
Compact = 'compact',
UltraSmall = 'ultra-small',
}
enum BeepTone {
TONE_1 = 'TONE1',
TONE_2 = 'TONE2',
TONE_3 = 'TONE3',
TONE_4 = 'TONE4',
TONE_5 = 'TONE5',
TONE_6 = 'TONE6',
TONE_7 = 'TONE7',
}
Teclados pré-disponíveis
São teclados com temas e já configurado para uso.
import Keyboard from '@mamba/keyboard/api/index.js';
import { KeyboardType } from '@mamba/keyboard/lib/index.js';
Keyboard.setOptions({
keyboardType: KeyboardType.Numeric,
});
Ou use um dos métodos prontos:
◼︎ Default (alfanumérico)
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.setKeyboardAsDefaultType();
◼︎ Numérico
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.setKeyboardAsNumericType();
◼︎ Calculadora
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.setKeyboardAsMathType();
◼︎ Telefone (Number pad)
import Keyboard from '@mamba/keyboard/api/index.js';
Keyboard.setKeyboardAsPhoneType();
Keyboard native key map
Para usar as teclas nativas do teclado (teclado físico POS), você precisa instalar @mamba/core
.
O objeto KEYBOARD
fornece os mapas de teclas e nomes de teclas específicos do POS.
import { KEYBOARD } from '@mamba/core';
See @mamba/core Docs for more info.
Migração para v8.x.x
-
As propriedades iniciais do componente @mamba/keyboard/Keyboard.html
, deixaram de ser feitas pela propriedade keyboardOptions
, e sendo usadas/lidas diretamente:
- <Keyboard keyboardOptions={{
- autoRender: false,
- visibility: KeyboardVisibility.Hidden,
- keepVisible: false
- }}
- />
+ <Keyboard
+ autoRender={false}
+ visibility={KeyboardVisibility.Hidden}
+ keepVisible={false}
+ />
-
Use o método Keyboard.parseEventKeyCode(event: KeyboardEvent )
para parsear corretamente o código da telca de entrada e descobrir qual o keyCode
(código da tecla) ou keyName
(nome da tecla):
+ import Keyboard from '@mamba/keyboard/api/keyboard.js';
- const keyCode = event.code && event.code !== 0 ? event.code : event.charCode || event.which || event.keyCode;
- const keyName = Keyboard.getKeyName(keyCode);
+ const [keyCode, keyName] = Keyboard.parseEventKeys(event);