refactor: improve command constants

This commit is contained in:
Fritz Heiden 2025-04-14 23:38:51 +02:00
parent f83ffac0ce
commit b0c3a48da6
3 changed files with 166 additions and 82 deletions

View File

@ -61,7 +61,7 @@ function Command({
function getTitle() { function getTitle() {
if (_title) return _title; if (_title) return _title;
return `${Command.CommandTypes[commandType]} (${Command.Protocols[protocol]})`; return `${Command.getTypeString(_commandType)} (${Command.getProtocolString(_protocol)})`;
} }
function setTitle(title) { function setTitle(title) {
@ -84,73 +84,148 @@ function Command({
}; };
} }
Command.Protocols = { Command.PROTOCOLS = {
samsung: "Samsung", SAMSUNG: "samsung",
nec: "NEC", NEC: "nec",
onkyo: "Onkyo", ONKYO: "onkyo",
apple: "Apple", APPLE: "apple",
denon: "Denon", DENON: "denon",
sharp: "Sharp", SHARP: "sharp",
panasonic: "Panasonic", PANASONIC: "panasonic",
kaseikyo: "Kaseikyo", KASEIKYO: "kaseikyo",
jvc: "JVC", JVC: "jvc",
lg: "LG", LG: "lg",
sony: "Sony", SONY: "sony",
rc5: "RC5", RC5: "rc5",
rc6: "RC6", RC6: "rc6",
universal_pulse_distance: "Universal Pulse Distance", UNIVERSAL_PULSE_DISTANCE: "universal_pulse_distance",
universal_pulse_width: "Universal Pulse Width", UNIVERSAL_PULSE_WIDTH: "universal_pulse_width",
universal_pulse_distance_width: "Universal Pulse Distance Width", UNIVERSAL_PULSE_DISTANCE_WIDTH: "universal_pulse_distance_width",
hash: "Hash", HASH: "hash",
pronto: "Pronto", PRONTO: "pronto",
bose_wave: "BoseWave", BOSE_WAVE: "bose_wave",
bang_olufsen: "Bang & Olufsen", BANG_OLUFSEN: "bang_olufsen",
lego: "Lego", LEGO: "lego",
fast: "FAST", FAST: "fast",
whynter: "Whynter", WHYNTER: "whynter",
magiquest: "MagiQuest", MAGIQUEST: "magiquest",
}; }
Command.CommandTypes = { Command.getProtocolString = (protocol) => {
power: "Power", let mapping = {
input: "Input", [Command.PROTOCOLS.SAMSUNG]: "Samsung",
one: "1", [Command.PROTOCOLS.NEC]: "NEC",
two: "2", [Command.PROTOCOLS.ONKYO]: "Onkyo",
three: "3", [Command.PROTOCOLS.APPLE]: "Apple",
four: "4", [Command.PROTOCOLS.DENON]: "Denon",
five: "5", [Command.PROTOCOLS.SHARP]: "Sharp",
six: "6", [Command.PROTOCOLS.PANASONIC]: "Panasonic",
seven: "7", [Command.PROTOCOLS.KASEIKYO]: "Kaseikyo",
eight: "8", [Command.PROTOCOLS.JVC]: "JVC",
nine: "9", [Command.PROTOCOLS.LG]: "LG",
zero: "0", [Command.PROTOCOLS.SONY]: "Sony",
volume_up: "Volume Up", [Command.PROTOCOLS.RC5]: "RC5",
volume_down: "Volume Down", [Command.PROTOCOLS.RC6]: "RC6",
mute: "Mute", [Command.PROTOCOLS.UNIVERSAL_PULSE_DISTANCE]: "Universal Pulse Distance",
channel_up: "Channel Up", [Command.PROTOCOLS.UNIVERSAL_PULSE_WIDTH]: "Universal Pulse Width",
channel_down: "Channel Down", [Command.PROTOCOLS.UNIVERSAL_PULSE_DISTANCE_WIDTH]: "Universal Pulse Distance Width",
menu: "Menu", [Command.PROTOCOLS.HASH]: "Hash",
home: "Home", [Command.PROTOCOLS.PRONTO]: "Pronto",
settings: "Settings", [Command.PROTOCOLS.BOSE_WAVE]: "BoseWave",
options: "Options", [Command.PROTOCOLS.BANG_OLUFSEN]: "Bang & Olufsen",
up: "Up", [Command.PROTOCOLS.LEGO]: "Lego",
down: "Down", [Command.PROTOCOLS.FAST]: "FAST",
left: "Left", [Command.PROTOCOLS.WHYNTER]: "Whynter",
right: "Right", [Command.PROTOCOLS.MAGIQUEST]: "MagiQuest",
enter: "Enter", }
info: "Info", return mapping[protocol]
return: "Return", }
exit: "Exit",
red: "Red", Command.TYPES = {
green: "Green", POWER: "power",
yellow: "Yellow", INPUT: "input",
blue: "Blue", ONE: "one",
rewind: "Rewind", TWO: "two",
play: "Play", THREE: "three",
pause: "Pause", FOUR: "four",
stop: "Stop", FIVE: "five",
forward: "Forward", SIX: "six",
other: "Other", SEVEN: "seven",
}; EIGHT: "eight",
NINE: "nine",
ZERO: "zero",
VOLUME_UP: "volume_up",
VOLUME_DOWN: "volume_down",
MUTE: "mute",
CHANNEL_UP: "channel_up",
CHANNEL_DOWN: "channel_down",
MENU: "menu",
HOME: "home",
SETTINGS: "settings",
OPTIONS: "options",
UP: "up",
DOWN: "down",
LEFT: "left",
RIGHT: "right",
ENTER: "enter",
INFO: "info",
RETURN: "return",
EXIT: "exit",
RED: "red",
GREEN: "green",
YELLOW: "yellow",
BLUE: "blue",
REWIND: "rewind",
PLAY: "play",
PAUSE: "pause",
STOP: "stop",
FORWARD: "forward",
OTHER: "other",
}
Command.getTypeString = (type) => {
let mapping = {
[Command.TYPES.POWER]: "Power",
[Command.TYPES.INPUT]: "Input",
[Command.TYPES.ONE]: "1",
[Command.TYPES.TWO]: "2",
[Command.TYPES.THREE]: "3",
[Command.TYPES.FOUR]: "4",
[Command.TYPES.FIVE]: "5",
[Command.TYPES.SIX]: "6",
[Command.TYPES.SEVEN]: "7",
[Command.TYPES.EIGHT]: "8",
[Command.TYPES.NINE]: "9",
[Command.TYPES.ZERO]: "0",
[Command.TYPES.VOLUME_UP]: "Volume Up",
[Command.TYPES.VOLUME_DOWN]: "Volume Down",
[Command.TYPES.MUTE]: "Mute",
[Command.TYPES.CHANNEL_UP]: "Channel Up",
[Command.TYPES.CHANNEL_DOWN]: "Channel Down",
[Command.TYPES.MENU]: "Menu",
[Command.TYPES.HOME]: "Home",
[Command.TYPES.SETTINGS]: "Settings",
[Command.TYPES.OPTIONS]: "Options",
[Command.TYPES.UP]: "Up",
[Command.TYPES.DOWN]: "Down",
[Command.TYPES.LEFT]: "Left",
[Command.TYPES.RIGHT]: "Right",
[Command.TYPES.ENTER]: "Enter",
[Command.TYPES.INFO]: "Info",
[Command.TYPES.RETURN]: "Return",
[Command.TYPES.EXIT]: "Exit",
[Command.TYPES.RED]: "Red",
[Command.TYPES.GREEN]: "Green",
[Command.TYPES.YELLOW]: "Yellow",
[Command.TYPES.BLUE]: "Blue",
[Command.TYPES.REWIND]: "Rewind",
[Command.TYPES.PLAY]: "Play",
[Command.TYPES.PAUSE]: "Pause",
[Command.TYPES.STOP]: "Stop",
[Command.TYPES.FORWARD]: "Forward",
[Command.TYPES.OTHER]: "Other",
}
return mapping[type]
}
export default Command; export default Command;

View File

@ -92,8 +92,10 @@ function CreateCommandModal(props) {
<option value="" selected> <option value="" selected>
Please select Please select
</option> </option>
{Object.keys(Command.Protocols).map((protocol) => ( {Object.values(Command.PROTOCOLS).map((protocol) => (
<option value={protocol}>{Command.Protocols[protocol]}</option> <option value={protocol}>
{Command.getProtocolString(protocol)}
</option>
))} ))}
</select> </select>
</div> </div>
@ -139,9 +141,9 @@ function CreateCommandModal(props) {
<option value="" selected> <option value="" selected>
Please select Please select
</option> </option>
{Object.keys(Command.CommandTypes).map((commandType) => ( {Object.values(Command.TYPES).map((commandType) => (
<option value={commandType}> <option value={commandType}>
{Command.CommandTypes[commandType]} {Command.getTypeString(commandType)}
</option> </option>
))} ))}
</select> </select>

View File

@ -35,8 +35,14 @@ FieldTitles[COMMAND_TYPE_FIELD] = "Type";
FieldTitles[TITLE_FIELD] = "Title"; FieldTitles[TITLE_FIELD] = "Title";
const CommandFieldsRequiringValueMapping = ["protocol", "commandType"]; const CommandFieldsRequiringValueMapping = ["protocol", "commandType"];
const commandTypeFuse = new Fuse(Object.values(Command.CommandTypes)); const commandTypeFuse = new Fuse(
const protocolsFuse = new Fuse(Object.values(Command.Protocols)); Object.values(Command.TYPES).map((type) => Command.getTypeString(type))
);
const protocolsFuse = new Fuse(
Object.values(Command.PROTOCOLS).map((protocol) =>
Command.getProtocolString(protocol)
)
);
function ImportCommandsModal(props) { function ImportCommandsModal(props) {
const [csvString, setCsvString] = createSignal(""); const [csvString, setCsvString] = createSignal("");
@ -246,7 +252,7 @@ function ImportCommandsModal(props) {
<option value="" selected> <option value="" selected>
Please select Please select
</option> </option>
{Object.keys(Command.Protocols).map( {Object.values(Command.PROTOCOLS).map(
(protocol) => ( (protocol) => (
<option <option
value={protocol} value={protocol}
@ -256,7 +262,7 @@ function ImportCommandsModal(props) {
] === protocol ] === protocol
} }
> >
{Command.Protocols[protocol]} {Command.getProtocolString(protocol)}
</option> </option>
) )
)} )}
@ -272,7 +278,7 @@ function ImportCommandsModal(props) {
<option value="" selected> <option value="" selected>
Please select Please select
</option> </option>
{Object.keys(Command.CommandTypes).map( {Object.values(Command.TYPES).map(
(commandType) => ( (commandType) => (
<option <option
value={commandType} value={commandType}
@ -282,7 +288,7 @@ function ImportCommandsModal(props) {
] === commandType ] === commandType
} }
> >
{Command.CommandTypes[commandType]} {Command.getTypeString(commandType)}
</option> </option>
) )
)} )}
@ -318,8 +324,8 @@ function ImportCommandsModal(props) {
if (!valueMapping[PROTOCOL_FIELD][protocolValue]) { if (!valueMapping[PROTOCOL_FIELD][protocolValue]) {
let result = protocolsFuse.search(protocolValue).shift(); let result = protocolsFuse.search(protocolValue).shift();
if (result) { if (result) {
let protocol = Object.keys(Command.Protocols).find( let protocol = Object.values(Command.PROTOCOLS).find(
(protocol) => Command.Protocols[protocol] === result.item (protocol) => Command.getProtocolString(protocol) === result.item
); );
valueMapping[PROTOCOL_FIELD][protocolValue] = protocol; valueMapping[PROTOCOL_FIELD][protocolValue] = protocol;
} }
@ -327,8 +333,9 @@ function ImportCommandsModal(props) {
if (!valueMapping[COMMAND_TYPE_FIELD][commandTypeValue]) { if (!valueMapping[COMMAND_TYPE_FIELD][commandTypeValue]) {
let result = commandTypeFuse.search(commandTypeValue).shift(); let result = commandTypeFuse.search(commandTypeValue).shift();
if (result) { if (result) {
let commandType = Object.keys(Command.CommandTypes).find( let commandType = Object.values(Command.TYPES).find(
(commandType) => Command.CommandTypes[commandType] === result.item (commandType) =>
Command.getTypeString(commandType) === result.item
); );
valueMapping[COMMAND_TYPE_FIELD][commandTypeValue] = commandType; valueMapping[COMMAND_TYPE_FIELD][commandTypeValue] = commandType;
} }