feat: initial commit for camping rental webapp
This commit establishes the foundational structure for the Karyaman project, focusing on the camping equipment rental web application. Key additions include: - Scaffolding for three React applications: `adventure-rental-app`, `motel-app`, and `pakrete-app` using Create React App. - Initial implementation of `HomePage` and `CategoriesPage` components for the `adventure-rental-app`, based on provided design mockups. - Project documentation including PRDs and design files for the applications. - Configuration of the Kilo Code memory bank with core project details such as architecture, product vision, and tech stack.
This commit is contained in:
23
motel-app/.gitignore
vendored
Normal file
23
motel-app/.gitignore
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||
|
||||
# dependencies
|
||||
/node_modules
|
||||
/.pnp
|
||||
.pnp.js
|
||||
|
||||
# testing
|
||||
/coverage
|
||||
|
||||
# production
|
||||
/build
|
||||
|
||||
# misc
|
||||
.DS_Store
|
||||
.env.local
|
||||
.env.development.local
|
||||
.env.test.local
|
||||
.env.production.local
|
||||
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
70
motel-app/README.md
Normal file
70
motel-app/README.md
Normal file
@@ -0,0 +1,70 @@
|
||||
# Getting Started with Create React App
|
||||
|
||||
This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
|
||||
|
||||
## Available Scripts
|
||||
|
||||
In the project directory, you can run:
|
||||
|
||||
### `npm start`
|
||||
|
||||
Runs the app in the development mode.\
|
||||
Open [http://localhost:3000](http://localhost:3000) to view it in your browser.
|
||||
|
||||
The page will reload when you make changes.\
|
||||
You may also see any lint errors in the console.
|
||||
|
||||
### `npm test`
|
||||
|
||||
Launches the test runner in the interactive watch mode.\
|
||||
See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
|
||||
|
||||
### `npm run build`
|
||||
|
||||
Builds the app for production to the `build` folder.\
|
||||
It correctly bundles React in production mode and optimizes the build for the best performance.
|
||||
|
||||
The build is minified and the filenames include the hashes.\
|
||||
Your app is ready to be deployed!
|
||||
|
||||
See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
|
||||
|
||||
### `npm run eject`
|
||||
|
||||
**Note: this is a one-way operation. Once you `eject`, you can't go back!**
|
||||
|
||||
If you aren't satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project.
|
||||
|
||||
Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you're on your own.
|
||||
|
||||
You don't have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn't feel obligated to use this feature. However we understand that this tool wouldn't be useful if you couldn't customize it when you are ready for it.
|
||||
|
||||
## Learn More
|
||||
|
||||
You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
|
||||
|
||||
To learn React, check out the [React documentation](https://reactjs.org/).
|
||||
|
||||
### Code Splitting
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting)
|
||||
|
||||
### Analyzing the Bundle Size
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size)
|
||||
|
||||
### Making a Progressive Web App
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app)
|
||||
|
||||
### Advanced Configuration
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration)
|
||||
|
||||
### Deployment
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
|
||||
|
||||
### `npm run build` fails to minify
|
||||
|
||||
This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify)
|
||||
17536
motel-app/package-lock.json
generated
Normal file
17536
motel-app/package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
39
motel-app/package.json
Normal file
39
motel-app/package.json
Normal file
@@ -0,0 +1,39 @@
|
||||
{
|
||||
"name": "motel-app",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"@testing-library/dom": "^10.4.1",
|
||||
"@testing-library/jest-dom": "^6.6.4",
|
||||
"@testing-library/react": "^16.3.0",
|
||||
"@testing-library/user-event": "^13.5.0",
|
||||
"react": "^19.1.1",
|
||||
"react-dom": "^19.1.1",
|
||||
"react-scripts": "5.0.1",
|
||||
"web-vitals": "^2.1.4"
|
||||
},
|
||||
"scripts": {
|
||||
"start": "react-scripts start",
|
||||
"build": "react-scripts build",
|
||||
"test": "react-scripts test",
|
||||
"eject": "react-scripts eject"
|
||||
},
|
||||
"eslintConfig": {
|
||||
"extends": [
|
||||
"react-app",
|
||||
"react-app/jest"
|
||||
]
|
||||
},
|
||||
"browserslist": {
|
||||
"production": [
|
||||
">0.2%",
|
||||
"not dead",
|
||||
"not op_mini all"
|
||||
],
|
||||
"development": [
|
||||
"last 1 chrome version",
|
||||
"last 1 firefox version",
|
||||
"last 1 safari version"
|
||||
]
|
||||
}
|
||||
}
|
||||
264
motel-app/project-brief/prd-motel-app.md
Normal file
264
motel-app/project-brief/prd-motel-app.md
Normal file
@@ -0,0 +1,264 @@
|
||||
Product Requirement Document (PRD) for Arisan Web App
|
||||
1. Introduction
|
||||
This document outlines the requirements for an Arisan Web Application, designed to streamline and manage traditional Indonesian arisan activities. The application will provide functionalities for managing a central cash fund, individual savings, member loans, and an automated winner draw system. The frontend will be built using Create React App (CRA), and the backend will leverage n8n for workflow automation and API management.
|
||||
|
||||
2. Goals and Objectives
|
||||
Automate Arisan Processes: Reduce manual effort in managing arisan funds, savings, loans, and winner draws.
|
||||
|
||||
Increase Transparency: Provide clear visibility of all financial transactions and winner selections to all members.
|
||||
|
||||
Improve Accessibility: Enable members to access arisan information and perform actions from anywhere, anytime.
|
||||
|
||||
Enhance User Experience: Offer an intuitive and easy-to-use interface for all participants.
|
||||
|
||||
Ensure Data Accuracy: Minimize errors associated with manual record-keeping.
|
||||
|
||||
3. Target Audience
|
||||
Arisan group organizers (administrators)
|
||||
|
||||
Individual arisan members
|
||||
|
||||
4. User Stories
|
||||
Administrator (Organizer)
|
||||
As an admin, I want to create and manage multiple arisan groups, so I can organize different arisan activities.
|
||||
|
||||
As an admin, I want to add and remove members from an arisan group, so I can manage participant lists.
|
||||
|
||||
As an admin, I want to set the arisan parameters (e.g., number of participants, arisan amount, frequency), so the rules are clear.
|
||||
|
||||
As an admin, I want to record cash contributions from members, so the cash fund is accurately updated.
|
||||
|
||||
As an admin, I want to manage individual member savings, so I can track their additional deposits.
|
||||
|
||||
As an admin, I want to process and approve loan requests from members, so I can facilitate their financial needs.
|
||||
|
||||
As an admin, I want to record loan repayments, so I can track outstanding balances.
|
||||
|
||||
As an admin, I want to initiate the winner draw, so the winning member can be selected fairly.
|
||||
|
||||
As an admin, I want to view a comprehensive dashboard of each arisan group's status (cash, savings, loans, winners), so I have an overview of all activities.
|
||||
|
||||
As an admin, I want to generate reports on financial activities and winner history, so I can review past performance.
|
||||
|
||||
Member
|
||||
As a member, I want to view my current arisan group's status (my contributions, savings, loan status), so I can stay informed.
|
||||
|
||||
As a member, I want to request a loan, so I can get financial assistance when needed.
|
||||
|
||||
As a member, I want to view my loan repayment schedule and history, so I can keep track of my obligations.
|
||||
|
||||
As a member, I want to view the history of past winners, so I can see who has won previously.
|
||||
|
||||
As a member, I want to receive notifications about upcoming contributions, loan due dates, and winner draws, so I don't miss important events.
|
||||
|
||||
5. Features and Functionality
|
||||
5.1. User Management
|
||||
User Registration & Login:
|
||||
|
||||
Email/Password authentication.
|
||||
|
||||
Role-based access (Administrator, Member).
|
||||
|
||||
Profile Management:
|
||||
|
||||
View and edit personal information.
|
||||
|
||||
5.2. Arisan Group Management (Admin Only)
|
||||
Create Arisan Group:
|
||||
|
||||
Name, description.
|
||||
|
||||
Arisan amount per period.
|
||||
|
||||
Number of participants.
|
||||
|
||||
Frequency (e.g., weekly, monthly).
|
||||
|
||||
Start date.
|
||||
|
||||
Manage Members:
|
||||
|
||||
Add/remove members to/from a group.
|
||||
|
||||
Assign initial roles.
|
||||
|
||||
View Arisan Group Details:
|
||||
|
||||
Dashboard with summary of cash, savings, loans, and winner history.
|
||||
|
||||
List of all members and their status.
|
||||
|
||||
5.3. Cash Management (Kas)
|
||||
Record Contributions:
|
||||
|
||||
Admin can record individual member contributions for each period.
|
||||
|
||||
Automatic update of the group's total cash fund.
|
||||
|
||||
Cash Fund Overview:
|
||||
|
||||
Display current cash balance for each arisan group.
|
||||
|
||||
History of all contributions.
|
||||
|
||||
5.4. Savings Management (Simpanan)
|
||||
Deposit Savings:
|
||||
|
||||
Admin can record additional savings deposited by members (outside of regular arisan contributions).
|
||||
|
||||
Withdraw Savings:
|
||||
|
||||
Admin can record withdrawals from member savings.
|
||||
|
||||
Individual Savings Balances:
|
||||
|
||||
Members can view their own savings balance.
|
||||
|
||||
Admin can view all members' savings balances.
|
||||
|
||||
5.5. Loan Management (Pinjaman)
|
||||
Loan Request (Member):
|
||||
|
||||
Members can submit loan requests with desired amount and reason.
|
||||
|
||||
Loan Approval/Rejection (Admin):
|
||||
|
||||
Admin can review and approve or reject loan requests.
|
||||
|
||||
Set loan terms (e.g., repayment period, interest rate - if applicable, though typically arisan loans are interest-free).
|
||||
|
||||
Record Loan Disbursement (Admin):
|
||||
|
||||
Admin records the actual disbursement of the loan.
|
||||
|
||||
Record Loan Repayments (Admin):
|
||||
|
||||
Admin records individual loan repayments from members.
|
||||
|
||||
Loan Status Tracking:
|
||||
|
||||
View outstanding loan balances for each member.
|
||||
|
||||
View repayment history.
|
||||
|
||||
Repayment Schedule:
|
||||
|
||||
Automatic calculation of repayment schedules based on terms.
|
||||
|
||||
5.6. Winner Draw (Undian Pemenang)
|
||||
Initiate Draw (Admin):
|
||||
|
||||
Admin triggers the winner selection process.
|
||||
|
||||
System randomly selects a winner from eligible members (those who haven't won yet in the current cycle).
|
||||
|
||||
Winner Announcement:
|
||||
|
||||
Display the winning member's name.
|
||||
|
||||
Record the winner in the arisan history.
|
||||
|
||||
Winner History:
|
||||
|
||||
View list of all past winners for each arisan group.
|
||||
|
||||
5.7. Notifications
|
||||
Email/In-app notifications:
|
||||
|
||||
Upcoming contribution reminders.
|
||||
|
||||
Loan repayment due dates.
|
||||
|
||||
Winner draw announcements.
|
||||
|
||||
Loan approval/rejection status.
|
||||
|
||||
5.8. Reporting (Admin Only)
|
||||
Financial Summary Reports:
|
||||
|
||||
Cash flow (contributions, disbursements, repayments).
|
||||
|
||||
Outstanding loans.
|
||||
|
||||
Savings balances.
|
||||
|
||||
Winner History Reports:
|
||||
|
||||
List of all winners, dates, and amounts.
|
||||
|
||||
6. Technical Architecture
|
||||
6.1. Frontend
|
||||
Technology: React.js (built with Create React App)
|
||||
|
||||
State Management: React Context API or Redux (TBD based on complexity)
|
||||
|
||||
UI Framework: Material-UI, Ant Design, or similar (TBD)
|
||||
|
||||
Data Fetching: Axios or Fetch API
|
||||
|
||||
6.2. Backend
|
||||
Technology: n8n (Workflow Automation Tool)
|
||||
|
||||
Database: PostgreSQL, MySQL, or a suitable NoSQL database if n8n integrates well with it. (n8n can connect to various databases, the choice will depend on the specific needs for data relationships and scalability).
|
||||
|
||||
APIs: n8n will expose RESTful APIs for frontend communication.
|
||||
|
||||
Workflows:
|
||||
|
||||
User authentication and authorization.
|
||||
|
||||
CRUD operations for Arisan Groups, Members, Contributions, Savings, Loans, Winners.
|
||||
|
||||
Automated winner draw logic.
|
||||
|
||||
Notification triggers (e.g., sending emails).
|
||||
|
||||
Data aggregation for reports.
|
||||
|
||||
7. Integrations
|
||||
Email Service: For notifications (e.g., SendGrid, Mailgun, integrated via n8n).
|
||||
|
||||
8. Non-Functional Requirements
|
||||
8.1. Performance
|
||||
Fast loading times for all pages.
|
||||
|
||||
Efficient processing of financial transactions.
|
||||
|
||||
8.2. Security
|
||||
Secure user authentication and authorization.
|
||||
|
||||
Data encryption (at rest and in transit).
|
||||
|
||||
Protection against common web vulnerabilities (e.g., XSS, CSRF).
|
||||
|
||||
Role-based access control to sensitive data and functionalities.
|
||||
|
||||
8.3. Scalability
|
||||
Ability to handle an increasing number of arisan groups and members.
|
||||
|
||||
Backend (n8n and database) should be able to scale as needed.
|
||||
|
||||
8.4. Usability
|
||||
Intuitive and user-friendly interface.
|
||||
|
||||
Clear navigation.
|
||||
|
||||
Responsive design for various devices (desktop, tablet, mobile).
|
||||
|
||||
8.5. Reliability
|
||||
High uptime and availability.
|
||||
|
||||
Robust error handling and logging.
|
||||
|
||||
Regular data backups.
|
||||
|
||||
9. Future Enhancements (Potential Additions)
|
||||
Payment Gateway Integration: For automated contributions and loan repayments.
|
||||
|
||||
Chat/Communication Feature: Within arisan groups.
|
||||
|
||||
Analytics Dashboard: More in-depth insights for administrators.
|
||||
|
||||
Multi-language Support.
|
||||
|
||||
Gamification Elements: To encourage participation.
|
||||
BIN
motel-app/public/favicon.ico
Normal file
BIN
motel-app/public/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.8 KiB |
43
motel-app/public/index.html
Normal file
43
motel-app/public/index.html
Normal file
@@ -0,0 +1,43 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
<meta
|
||||
name="description"
|
||||
content="Web site created using create-react-app"
|
||||
/>
|
||||
<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />
|
||||
<!--
|
||||
manifest.json provides metadata used when your web app is installed on a
|
||||
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
|
||||
-->
|
||||
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />
|
||||
<!--
|
||||
Notice the use of %PUBLIC_URL% in the tags above.
|
||||
It will be replaced with the URL of the `public` folder during the build.
|
||||
Only files inside the `public` folder can be referenced from the HTML.
|
||||
|
||||
Unlike "/favicon.ico" or "favicon.ico", "%PUBLIC_URL%/favicon.ico" will
|
||||
work correctly both with client-side routing and a non-root public URL.
|
||||
Learn how to configure a non-root public URL by running `npm run build`.
|
||||
-->
|
||||
<title>React App</title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>You need to enable JavaScript to run this app.</noscript>
|
||||
<div id="root"></div>
|
||||
<!--
|
||||
This HTML file is a template.
|
||||
If you open it directly in the browser, you will see an empty page.
|
||||
|
||||
You can add webfonts, meta tags, or analytics to this file.
|
||||
The build step will place the bundled scripts into the <body> tag.
|
||||
|
||||
To begin the development, run `npm start` or `yarn start`.
|
||||
To create a production bundle, use `npm run build` or `yarn build`.
|
||||
-->
|
||||
</body>
|
||||
</html>
|
||||
BIN
motel-app/public/logo192.png
Normal file
BIN
motel-app/public/logo192.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.2 KiB |
BIN
motel-app/public/logo512.png
Normal file
BIN
motel-app/public/logo512.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.4 KiB |
25
motel-app/public/manifest.json
Normal file
25
motel-app/public/manifest.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"short_name": "React App",
|
||||
"name": "Create React App Sample",
|
||||
"icons": [
|
||||
{
|
||||
"src": "favicon.ico",
|
||||
"sizes": "64x64 32x32 24x24 16x16",
|
||||
"type": "image/x-icon"
|
||||
},
|
||||
{
|
||||
"src": "logo192.png",
|
||||
"type": "image/png",
|
||||
"sizes": "192x192"
|
||||
},
|
||||
{
|
||||
"src": "logo512.png",
|
||||
"type": "image/png",
|
||||
"sizes": "512x512"
|
||||
}
|
||||
],
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"theme_color": "#000000",
|
||||
"background_color": "#ffffff"
|
||||
}
|
||||
3
motel-app/public/robots.txt
Normal file
3
motel-app/public/robots.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
# https://www.robotstxt.org/robotstxt.html
|
||||
User-agent: *
|
||||
Disallow:
|
||||
38
motel-app/src/App.css
Normal file
38
motel-app/src/App.css
Normal file
@@ -0,0 +1,38 @@
|
||||
.App {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.App-logo {
|
||||
height: 40vmin;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
@media (prefers-reduced-motion: no-preference) {
|
||||
.App-logo {
|
||||
animation: App-logo-spin infinite 20s linear;
|
||||
}
|
||||
}
|
||||
|
||||
.App-header {
|
||||
background-color: #282c34;
|
||||
min-height: 100vh;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: calc(10px + 2vmin);
|
||||
color: white;
|
||||
}
|
||||
|
||||
.App-link {
|
||||
color: #61dafb;
|
||||
}
|
||||
|
||||
@keyframes App-logo-spin {
|
||||
from {
|
||||
transform: rotate(0deg);
|
||||
}
|
||||
to {
|
||||
transform: rotate(360deg);
|
||||
}
|
||||
}
|
||||
25
motel-app/src/App.js
Normal file
25
motel-app/src/App.js
Normal file
@@ -0,0 +1,25 @@
|
||||
import logo from './logo.svg';
|
||||
import './App.css';
|
||||
|
||||
function App() {
|
||||
return (
|
||||
<div className="App">
|
||||
<header className="App-header">
|
||||
<img src={logo} className="App-logo" alt="logo" />
|
||||
<p>
|
||||
Edit <code>src/App.js</code> and save to reload.
|
||||
</p>
|
||||
<a
|
||||
className="App-link"
|
||||
href="https://reactjs.org"
|
||||
target="_blank"
|
||||
rel="noopener noreferrer"
|
||||
>
|
||||
Learn React
|
||||
</a>
|
||||
</header>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
export default App;
|
||||
8
motel-app/src/App.test.js
Normal file
8
motel-app/src/App.test.js
Normal file
@@ -0,0 +1,8 @@
|
||||
import { render, screen } from '@testing-library/react';
|
||||
import App from './App';
|
||||
|
||||
test('renders learn react link', () => {
|
||||
render(<App />);
|
||||
const linkElement = screen.getByText(/learn react/i);
|
||||
expect(linkElement).toBeInTheDocument();
|
||||
});
|
||||
13
motel-app/src/index.css
Normal file
13
motel-app/src/index.css
Normal file
@@ -0,0 +1,13 @@
|
||||
body {
|
||||
margin: 0;
|
||||
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
|
||||
'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
|
||||
sans-serif;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
|
||||
monospace;
|
||||
}
|
||||
17
motel-app/src/index.js
Normal file
17
motel-app/src/index.js
Normal file
@@ -0,0 +1,17 @@
|
||||
import React from 'react';
|
||||
import ReactDOM from 'react-dom/client';
|
||||
import './index.css';
|
||||
import App from './App';
|
||||
import reportWebVitals from './reportWebVitals';
|
||||
|
||||
const root = ReactDOM.createRoot(document.getElementById('root'));
|
||||
root.render(
|
||||
<React.StrictMode>
|
||||
<App />
|
||||
</React.StrictMode>
|
||||
);
|
||||
|
||||
// If you want to start measuring performance in your app, pass a function
|
||||
// to log results (for example: reportWebVitals(console.log))
|
||||
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
|
||||
reportWebVitals();
|
||||
1
motel-app/src/logo.svg
Normal file
1
motel-app/src/logo.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 841.9 595.3"><g fill="#61DAFB"><path d="M666.3 296.5c0-32.5-40.7-63.3-103.1-82.4 14.4-63.6 8-114.2-20.2-130.4-6.5-3.8-14.1-5.6-22.4-5.6v22.3c4.6 0 8.3.9 11.4 2.6 13.6 7.8 19.5 37.5 14.9 75.7-1.1 9.4-2.9 19.3-5.1 29.4-19.6-4.8-41-8.5-63.5-10.9-13.5-18.5-27.5-35.3-41.6-50 32.6-30.3 63.2-46.9 84-46.9V78c-27.5 0-63.5 19.6-99.9 53.6-36.4-33.8-72.4-53.2-99.9-53.2v22.3c20.7 0 51.4 16.5 84 46.6-14 14.7-28 31.4-41.3 49.9-22.6 2.4-44 6.1-63.6 11-2.3-10-4-19.7-5.2-29-4.7-38.2 1.1-67.9 14.6-75.8 3-1.8 6.9-2.6 11.5-2.6V78.5c-8.4 0-16 1.8-22.6 5.6-28.1 16.2-34.4 66.7-19.9 130.1-62.2 19.2-102.7 49.9-102.7 82.3 0 32.5 40.7 63.3 103.1 82.4-14.4 63.6-8 114.2 20.2 130.4 6.5 3.8 14.1 5.6 22.5 5.6 27.5 0 63.5-19.6 99.9-53.6 36.4 33.8 72.4 53.2 99.9 53.2 8.4 0 16-1.8 22.6-5.6 28.1-16.2 34.4-66.7 19.9-130.1 62-19.1 102.5-49.9 102.5-82.3zm-130.2-66.7c-3.7 12.9-8.3 26.2-13.5 39.5-4.1-8-8.4-16-13.1-24-4.6-8-9.5-15.8-14.4-23.4 14.2 2.1 27.9 4.7 41 7.9zm-45.8 106.5c-7.8 13.5-15.8 26.3-24.1 38.2-14.9 1.3-30 2-45.2 2-15.1 0-30.2-.7-45-1.9-8.3-11.9-16.4-24.6-24.2-38-7.6-13.1-14.5-26.4-20.8-39.8 6.2-13.4 13.2-26.8 20.7-39.9 7.8-13.5 15.8-26.3 24.1-38.2 14.9-1.3 30-2 45.2-2 15.1 0 30.2.7 45 1.9 8.3 11.9 16.4 24.6 24.2 38 7.6 13.1 14.5 26.4 20.8 39.8-6.3 13.4-13.2 26.8-20.7 39.9zm32.3-13c5.4 13.4 10 26.8 13.8 39.8-13.1 3.2-26.9 5.9-41.2 8 4.9-7.7 9.8-15.6 14.4-23.7 4.6-8 8.9-16.1 13-24.1zM421.2 430c-9.3-9.6-18.6-20.3-27.8-32 9 .4 18.2.7 27.5.7 9.4 0 18.7-.2 27.8-.7-9 11.7-18.3 22.4-27.5 32zm-74.4-58.9c-14.2-2.1-27.9-4.7-41-7.9 3.7-12.9 8.3-26.2 13.5-39.5 4.1 8 8.4 16 13.1 24 4.7 8 9.5 15.8 14.4 23.4zM420.7 163c9.3 9.6 18.6 20.3 27.8 32-9-.4-18.2-.7-27.5-.7-9.4 0-18.7.2-27.8.7 9-11.7 18.3-22.4 27.5-32zm-74 58.9c-4.9 7.7-9.8 15.6-14.4 23.7-4.6 8-8.9 16-13 24-5.4-13.4-10-26.8-13.8-39.8 13.1-3.1 26.9-5.8 41.2-7.9zm-90.5 125.2c-35.4-15.1-58.3-34.9-58.3-50.6 0-15.7 22.9-35.6 58.3-50.6 8.6-3.7 18-7 27.7-10.1 5.7 19.6 13.2 40 22.5 60.9-9.2 20.8-16.6 41.1-22.2 60.6-9.9-3.1-19.3-6.5-28-10.2zM310 490c-13.6-7.8-19.5-37.5-14.9-75.7 1.1-9.4 2.9-19.3 5.1-29.4 19.6 4.8 41 8.5 63.5 10.9 13.5 18.5 27.5 35.3 41.6 50-32.6 30.3-63.2 46.9-84 46.9-4.5-.1-8.3-1-11.3-2.7zm237.2-76.2c4.7 38.2-1.1 67.9-14.6 75.8-3 1.8-6.9 2.6-11.5 2.6-20.7 0-51.4-16.5-84-46.6 14-14.7 28-31.4 41.3-49.9 22.6-2.4 44-6.1 63.6-11 2.3 10.1 4.1 19.8 5.2 29.1zm38.5-66.7c-8.6 3.7-18 7-27.7 10.1-5.7-19.6-13.2-40-22.5-60.9 9.2-20.8 16.6-41.1 22.2-60.6 9.9 3.1 19.3 6.5 28.1 10.2 35.4 15.1 58.3 34.9 58.3 50.6-.1 15.7-23 35.6-58.4 50.6zM320.8 78.4z"/><circle cx="420.9" cy="296.5" r="45.7"/><path d="M520.5 78.1z"/></g></svg>
|
||||
|
After Width: | Height: | Size: 2.6 KiB |
13
motel-app/src/reportWebVitals.js
Normal file
13
motel-app/src/reportWebVitals.js
Normal file
@@ -0,0 +1,13 @@
|
||||
const reportWebVitals = onPerfEntry => {
|
||||
if (onPerfEntry && onPerfEntry instanceof Function) {
|
||||
import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {
|
||||
getCLS(onPerfEntry);
|
||||
getFID(onPerfEntry);
|
||||
getFCP(onPerfEntry);
|
||||
getLCP(onPerfEntry);
|
||||
getTTFB(onPerfEntry);
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
export default reportWebVitals;
|
||||
5
motel-app/src/setupTests.js
Normal file
5
motel-app/src/setupTests.js
Normal file
@@ -0,0 +1,5 @@
|
||||
// jest-dom adds custom jest matchers for asserting on DOM nodes.
|
||||
// allows you to do things like:
|
||||
// expect(element).toHaveTextContent(/react/i)
|
||||
// learn more: https://github.com/testing-library/jest-dom
|
||||
import '@testing-library/jest-dom';
|
||||
Reference in New Issue
Block a user