bpq-menu-system
v1.0.4
Published
This module provides a simple way to create interactive, text-based menus for use in BPQ packet radio applications.
Downloads
10
Readme
bpq-menu-system
This module provides a simple way to create interactive, text-based menus for use in BPQ packet radio applications.
Features
- Displays a formatted menu with numbered options.
- Handles user input validation.
- Allows up to 3 attempts for valid input before throwing an error.
- Returns a Promise that resolves with the chosen value or rejects with an error.
Installation
- Ensure you have Node.js installed on your system.
npm install --save bpq-menu-system
Usage
- Import the module in your JavaScript file:
import menu from 'bpq-menu-system';
- Create a menu object with the following structure:
const menuOptions = {
label: 'Choose an option:', // Label is optional, but recommended
choices: [
// Each choice must have label and value properties
{ label: 'Option One', value: 'one' },
{ label: 'Option Two', value: 'two' },
{ label: 'Option Three', value: 'three' },
{ label: 'Quit', value: 'quit' },
],
};
- Call the
menu
function with a connection object and your menu options:
menu(connection, menuOptions)
.then((choice) => {
// Handle the user's choice (the value property is returned)
console.log(`User chose: ${choice}`);
})
.catch((error) => {
console.error(`An error occurred: ${error.message}`);
});
The connection
object should have the following properties:
socket
: A writable stream (e.g., a net.Socket) for output.rl
: A readline.Interface object for input/output.
Example
Here's a basic example of how to use the menu in a BPQ application:
import net from 'node:net';
import readline from 'node:readline';
import menu from 'bpq-menu-system';
const server = net.createServer((socket) => {
const connection = {
socket,
rl: readline.createInterface({ input: socket, output: socket }),
};
const menuOptions = {
label: 'Main Menu:',
choices: [
{ label: 'Option One', value: 'one' },
{ label: 'Option Two', value: 'two' },
{ label: 'Option Three', value: 'three' },
{ label: 'Quit', value: 'quit' },
],
};
menu(connection, menuOptions)
.then((choice) => {
// Handle the choice
socket.write(`You selected: ${choice}\n`);
})
.catch((error) => {
socket.write(`Error: ${error.message}\n`);
socket.end();
});
});
server.listen(63001, () => {
console.log('Server listening on port 63001');
});
A runnable example is included: example.mjs
Notes
- This module uses ES modules. Ensure your Node.js environment supports ES modules or adjust the import/export syntax accordingly.
Contributing
- Fork it!
- Create your feature branch:
git checkout -b my-new-feature develop
- Commit your changes:
git commit -am 'Add some feature'
- Push to the branch:
git push origin my-new-feature
- Submit a pull request :D
History
TODO: Write history
Credits
Developed by Rik M7GMT
License
MIT