Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/umarilly/command-line-interface-repl
A Frontend Command Line Interface - REPL (Read-Eval-Print Loop) is a tool that allows you to interactively enter commands or code snippets, which are then executed, and the results are displayed in real time.
https://github.com/umarilly/command-line-interface-repl
css flask html javascript jsx python react
Last synced: about 1 month ago
JSON representation
A Frontend Command Line Interface - REPL (Read-Eval-Print Loop) is a tool that allows you to interactively enter commands or code snippets, which are then executed, and the results are displayed in real time.
- Host: GitHub
- URL: https://github.com/umarilly/command-line-interface-repl
- Owner: umarilly
- Created: 2024-04-09T08:07:26.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2024-04-12T07:27:02.000Z (10 months ago)
- Last Synced: 2024-06-14T11:50:13.594Z (7 months ago)
- Topics: css, flask, html, javascript, jsx, python, react
- Language: JavaScript
- Homepage:
- Size: 5.41 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# CLI REPL
A front-end CLI REPL (Read-Eval-Print Loop) is a tool that allows you to interactively enter commands or code snippets, which are then executed, and the results are displayed in real time.
## Setting up the project
**1. Creating a React application:**
**Setting up the Fronted**
Use the following command to create a new React project using Vite with the React template.
- npm create vite@latest
- Select the following options:
- Project name: cli-repl
- Framework: React
- Variant: JavaScript + SWCNavigate to project directory:
- cd cli-replInstallation of node modules:
- npm installStart the development server:
- npm run dev**Setting up the Backend**
- Created a folder in the root of react project
- The name of the folder is flask-backend
- Inside this folder there is app.py, requirements.txt and draw-chart directory
- app.py has compplete backend code for the routes
- draw-chart directory acts as database**Installation of Flask, Flask Cors and Pandas**
- pip install -r requiremnets.txt
- before installing requirements, make sure you have Python installed
- For Virtual Environment
- Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass // only once if no permisiion
- python -m venv venv
- venv\Scripts\Activate
- deactivate // deactivate the venv
- Set-ExecutionPolicy -Scope Process -ExecutionPolicy Restricted // To restrict the premisiion again- Now, the project is set up and running. Now lets start working on implementing the CLI REPL functionality.
**Folder Structure**
- components: Contains React components for the CLI REPL in the src folder.
- Home.jsx
- Terminal.jsx
- AboutCommand.jsx
- HelpCommad.jsx
- FetchPriceCommand.jsx
- UploadCommand.jsx
- DrawCommand.jsx
- DeleteCommand.jsx
- styles: Contains CSS files for styling the components, present in the src/styles.
- terminal.css
- Home is rendering in App.jsx and Terminal is rendering is Home
- Remaining all are rendering in Terminal with in a switch case
- The command is choose on the basis of what user enters**2. Basic Terminal UI**
**Component Setup**
- Terminal Component: Created a Terminal component with an input field and an output area to resemble a CLI.**const Terminal = () => { // Component logic };**
- Input Handling: Implemented basic input handling to allow users to type commands into the input field.
**Styling**
- Styled the Terminal component using CSS to match the look and feel of a traditional CLI.
- Set the font-family to Arial, sans-serif for consistency.
**Input Focus**
- Added functionality to automatically focus on the input field when the Terminal component is rendered, allowing users to start typing commands immediately.
- Command Execution: Implement logic to execute commands and display results.
- Command History: Maintain a history of executed commands and their results.
- Error Handling: Handle invalid commands and display error messages.
- Enhanced Styling: Improve the styling for a more visually appealing interface.
**3. Implement Help and About Commands**
**Tasks Completed**
- Created HelpCommand.jsx and AboutCommand.jsx components.
- Implemented basic rendering of help and about information.
- Added command routing in the Terminal component.
- Parsed user input to determine which command component to render.
- Displayed help and about information based on user input.
- Added scrolling behavior using useRef to automatically show the input area when it's out of view.
- Added screen clear functionality for a clean slate on "clear" command.
- Included a background image for visual appeal.
**Project Files**
- HelpCommand.jsx: Component for displaying help information.
- AboutCommand.jsx: Component for displaying about information.
**Implementation Details**
- Utilized React hooks such as useState, useEffect, and useRef for managing state and implementing scrolling behavior.
- Used switch case statements to determine the type of command and render the appropriate component or output message.
- Added conditional rendering to show or hide the welcome message based on the clearIntro state.
**4. Implement Fetch Price Command**
**FetchPriceCommand**- Create FetchPriceCommand.jsx component.
- Implement basic rendering of fetch price functionality.
**Integrate with Binance API.**
- Use fetch to fetch cryptocurrency prices from the Binance API.
- Display the fetched price in the output area.
- Command: fetch-price [pair]
**Description:**
- Fetches the current average price of a specified cryptocurrency pair. Replace [pair] with the desired symbol.
- API: https://api.binance.com/api/v3/avgPrice?symbol=BTCUSDT
- Output: The current price of [pair] is [price]
- Example: fetch-price BTCUSDT**5. Implement Upload, Draw and Delete Commands**
***Involves both Frontend and Backend*****Frontend Tasks:**
**Upload**
The Upload Command component allows users to upload a CSV file to the server for further processing.
Usage
- Input: Select a CSV file using the file input field.
- Action: Click the "Upload File" button to upload the file.
- Output: A message indicating whether the file was successfully uploaded or if there was an error.Checks
- Only .csv files can be uploaded
- Changes the name of the file first i.r., to small letters and replace spaces with hyphes
- if file already exist then, replace it
- if no draw-chart directory, then create directory first
Implementation
- The component uses state to manage the selected file and the message displayed.
- It sends a POST request to the backend endpoint /api/upload with the selected file in the request body.
- Upon successful upload, it updates the message state to display a success message.
- If there is an error, it updates the message state to display an error message.
**Draw:**
The Draw Command component allows users to draw a chart based on the uploaded CSV file and specified columns.
Usage
- Input: Enter the column names for X and Y axes in the input fields.
- Action: Click the "Draw Chart" button to draw the chart.
- Output: A chart displayed in the output area based on the specified columns.Checks
- Checks whether the file exists in the draw-chart directory
- If no file, then error message
- Also checks the columns name in the file for their existance
Implementation
- The component uses state to manage the column names for X and Y axes and the chart data.
- It sends a POST request to the backend endpoint /api/draw with the selected columns in the request body.
- Upon successful chart drawing, it displays the chart in the output area.
- If there is an error, it displays an error message in the output area.**Delete:**
The Delete Command component allows users to delete a file from the server's draw-chart directory by providing the file name.
Usage
- Input: Enter the file name in the input field.
- Action: Click the "Delete File" button to delete the file.
- Output: A message indicating whether the file was successfully deleted or if there was an error.Checks
- Checks whether the file exists in the draw-chart directory
- If no file, then error message
- If yes, then delete
Implementation
- The component uses state to manage the file name input and the message displayed.
- It sends a POST request to the backend endpoint /api/delete with the file name in the request body.
- Upon successful deletion, it updates the message state to display a success message.
- If there is an error, it updates the message state to display an error message.
**Backend Tasks:****Upload Endpoint:**
The Upload endpoint allows clients to upload a CSV file to the server for processing.
Route
- Method: POST
- URL: /api/upload
Request
- Body: Form data with the key file containing the uploaded file.
Response
- Success: 200 OK with a JSON object containing a success message.
- Failure: 400 Bad Request with a JSON object containing an error message.
Example
- Request: Form data with the uploaded CSV file.
- Response: { "message": "File uploaded successfully." }
**Draw Endpoint:**
The Draw endpoint allows clients to draw a chart based on the uploaded CSV file and specified columns.
Route
- Method: POST
- URL: /api/draw
Request
- Body: JSON object with the keys file containing the uploaded file name, xAxis containing the X-axis column name, and yAxis containing the Y-axis column name.
Response
- Success: 200 OK with a JSON object containing the chart data.
- Failure: 400 Bad Request with a JSON object containing an error message.
Example
- Request: { "file": "example.csv", "xAxis": "column1", "yAxis": "column2" }
- Response: { "chartData": [...] }
**Delete Endpoint:**
The Delete endpoint allows clients to delete a specified file from the server's draw-chart directory.
Route
- Method: POST
- URL: /api/delete
Request
- Body: JSON object with the key file containing the name of the file to delete.
Response
- Success: 200 OK with a JSON object containing a success message.
- Failure: 400 Bad Request with a JSON object containing an error message.
Example
- Request: { "file": "example.csv" }
- Response: { "message": "example.csv has been deleted successfully." }**6. Error Handling and Testing**
Implement error handling.
- Handle errors gracefully and display error messages to the user.
Write all the checks for critical functionality.
- Write checks for command logic and user input handling.