bpq-menu-system

1.0.4 • Public • Published

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

  1. Ensure you have Node.js installed on your system.
  2. npm install --save bpq-menu-system

Usage

  1. Import the module in your JavaScript file:
import menu from 'bpq-menu-system';
  1. 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' },
	],
};
  1. 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

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature develop
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :D

History

TODO: Write history

Credits

Developed by Rik M7GMT

License

MIT

Readme

Keywords

Package Sidebar

Install

npm i bpq-menu-system

Weekly Downloads

5

Version

1.0.4

License

none

Unpacked Size

7.82 kB

Total Files

6

Last publish

Collaborators

  • trippnology