pay-sdk-web10 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +157 -0
- package/dist/WalletPaymentForm.esm.js +1389 -0
- package/dist/WalletPaymentForm.js +331 -0
- package/dist/WalletPaymentForm.umd.js +1395 -0
- package/dist/dist/WalletPaymentForm.css +1 -0
- package/dist/logo.jpg +0 -0
- package/git_push.sh +32 -0
- package/package.json +44 -0
- package/postcss.config.js +7 -0
- package/rollup.config.js +43 -0
- package/src/EnterPasscode.js +295 -0
- package/src/HasAccountSummary.js +168 -0
- package/src/HasFundsSummary.js +165 -0
- package/src/InsufficientFunds.js +140 -0
- package/src/LoadingOverlay.js +85 -0
- package/src/PaymentFailed.js +140 -0
- package/src/PaymentSuccess.js +140 -0
- package/src/TransactionSummary.js +200 -0
- package/src/WalletPaymentForm.css +136 -0
- package/src/WalletPaymentForm.js +204 -0
- package/src/assets/logo.jpg +0 -0
- package/src/test.md +34 -0
- package/src/test.pdf +0 -0
@@ -0,0 +1,200 @@
|
|
1
|
+
import React from 'react';
|
2
|
+
|
3
|
+
const TransactionSummary = ({ transactionDetails, onConfirm }) => {
|
4
|
+
return (
|
5
|
+
<>
|
6
|
+
<div className="popup-content">
|
7
|
+
<div className="popup-header">
|
8
|
+
<div className="logo">
|
9
|
+
<img
|
10
|
+
src="https://res.cloudinary.com/dlfa42ans/image/upload/v1741686201/logo_n7vrsf.jpg"
|
11
|
+
alt="EvZone Logo"
|
12
|
+
className="header-icon"
|
13
|
+
/>
|
14
|
+
</div>
|
15
|
+
<h2>
|
16
|
+
<span className="evzone">EVzone</span>
|
17
|
+
<span className="pay"> Pay</span>
|
18
|
+
</h2>
|
19
|
+
</div>
|
20
|
+
<div className="transaction-summary">
|
21
|
+
<div className="merchant-info">
|
22
|
+
<strong>Airbnb</strong>
|
23
|
+
</div>
|
24
|
+
<div className="total-billing">
|
25
|
+
UGX {transactionDetails.totalBilling.toFixed(2)}
|
26
|
+
</div>
|
27
|
+
<div className="transaction-details">
|
28
|
+
<h4>Transaction Details</h4>
|
29
|
+
<div className="detail">
|
30
|
+
<span>Type</span>
|
31
|
+
<strong>{transactionDetails.type}</strong>
|
32
|
+
</div>
|
33
|
+
<div className="detail">
|
34
|
+
<span>ID</span>
|
35
|
+
<strong>{transactionDetails.id}</strong>
|
36
|
+
</div>
|
37
|
+
<div className="detail">
|
38
|
+
<span>Particulars</span>
|
39
|
+
<strong>{transactionDetails.particulars}</strong>
|
40
|
+
</div>
|
41
|
+
<div className="detail">
|
42
|
+
<span>Billed Currency</span>
|
43
|
+
<strong>{transactionDetails.billedCurrency}</strong>
|
44
|
+
</div>
|
45
|
+
<div className="detail">
|
46
|
+
<span>Billed Amount</span>
|
47
|
+
<strong>UGX {transactionDetails.billedAmount.toFixed(2)}</strong>
|
48
|
+
</div>
|
49
|
+
<div className="detail total-billing-detail">
|
50
|
+
<span>Total Billing</span>
|
51
|
+
<strong>UGX {transactionDetails.totalBilling.toFixed(2)}</strong>
|
52
|
+
</div>
|
53
|
+
</div>
|
54
|
+
<button onClick={onConfirm} className="confirm-button">Confirm</button>
|
55
|
+
</div>
|
56
|
+
</div>
|
57
|
+
<style>{`
|
58
|
+
.popup-content {
|
59
|
+
display: flex;
|
60
|
+
flex-direction: column;
|
61
|
+
align-items: center;
|
62
|
+
background: white;
|
63
|
+
border-radius: 10px;
|
64
|
+
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
65
|
+
max-width: 400px;
|
66
|
+
width: 90%;
|
67
|
+
text-align: center;
|
68
|
+
border: 1px solid #ddd;
|
69
|
+
font-family: Arial, sans-serif;
|
70
|
+
z-index: 1001; /* Ensure popup is above overlay */
|
71
|
+
}
|
72
|
+
|
73
|
+
.popup-header {
|
74
|
+
display: flex;
|
75
|
+
align-items: center;
|
76
|
+
justify-content: center;
|
77
|
+
margin-bottom: 15px;
|
78
|
+
width: 100%;
|
79
|
+
padding: 10px 15px;
|
80
|
+
border-bottom: 1px solid #ddd;
|
81
|
+
}
|
82
|
+
|
83
|
+
.logo {
|
84
|
+
width: 40px;
|
85
|
+
height: 40px;
|
86
|
+
display: flex;
|
87
|
+
align-items: center;
|
88
|
+
justify-content: center;
|
89
|
+
margin-right: 10px;
|
90
|
+
border-radius: 50%;
|
91
|
+
overflow: hidden;
|
92
|
+
}
|
93
|
+
|
94
|
+
.header-icon {
|
95
|
+
width: 100%;
|
96
|
+
height: auto;
|
97
|
+
}
|
98
|
+
|
99
|
+
.popup-header h2 {
|
100
|
+
font-size: 1.2em;
|
101
|
+
color: #080808;
|
102
|
+
margin: 0;
|
103
|
+
font-weight: bold;
|
104
|
+
}
|
105
|
+
|
106
|
+
.popup-header .evzone {
|
107
|
+
color: #0a0a0a;
|
108
|
+
}
|
109
|
+
|
110
|
+
.popup-header .pay {
|
111
|
+
color: #0a0a0a;
|
112
|
+
}
|
113
|
+
|
114
|
+
.transaction-summary {
|
115
|
+
text-align: center;
|
116
|
+
width: 100%;
|
117
|
+
padding: 0 15px;
|
118
|
+
}
|
119
|
+
|
120
|
+
.merchant-info {
|
121
|
+
font-size: 1.2em;
|
122
|
+
font-weight: bold;
|
123
|
+
color: #333;
|
124
|
+
margin-bottom: 10px;
|
125
|
+
}
|
126
|
+
|
127
|
+
.total-billing {
|
128
|
+
font-size: 1.5em;
|
129
|
+
font-weight: bold;
|
130
|
+
color: #02CD8D;
|
131
|
+
text-align: center;
|
132
|
+
padding: 10px 0;
|
133
|
+
margin-bottom: 15px;
|
134
|
+
}
|
135
|
+
|
136
|
+
.transaction-details {
|
137
|
+
background: #f9f9f9;
|
138
|
+
padding: 15px;
|
139
|
+
border-radius: 8px;
|
140
|
+
margin-bottom: 20px;
|
141
|
+
display: flex;
|
142
|
+
flex-direction: column;
|
143
|
+
text-align: left;
|
144
|
+
}
|
145
|
+
|
146
|
+
.transaction-details h4 {
|
147
|
+
font-size: 1.1em;
|
148
|
+
font-weight: bold;
|
149
|
+
color: #333;
|
150
|
+
margin-bottom: 10px;
|
151
|
+
}
|
152
|
+
|
153
|
+
.transaction-details .detail {
|
154
|
+
display: flex;
|
155
|
+
justify-content: space-between;
|
156
|
+
align-items: center;
|
157
|
+
padding: 5px 0;
|
158
|
+
width: 100%;
|
159
|
+
}
|
160
|
+
|
161
|
+
.transaction-details span {
|
162
|
+
color: #666;
|
163
|
+
font-size: 0.9em;
|
164
|
+
flex-shrink: 0;
|
165
|
+
}
|
166
|
+
|
167
|
+
.transaction-details strong {
|
168
|
+
color: #000;
|
169
|
+
font-size: 0.9em;
|
170
|
+
text-align: right;
|
171
|
+
flex-shrink: 0;
|
172
|
+
}
|
173
|
+
|
174
|
+
.transaction-details .total-billing-detail {
|
175
|
+
margin-top: 10px;
|
176
|
+
padding-top: 10px;
|
177
|
+
border-top: 1px solid #ddd;
|
178
|
+
}
|
179
|
+
|
180
|
+
.confirm-button {
|
181
|
+
width: 100%;
|
182
|
+
background: #007bff;
|
183
|
+
color: #fff;
|
184
|
+
padding: 12px;
|
185
|
+
border-radius: 5px;
|
186
|
+
font-size: 1.1em;
|
187
|
+
cursor: pointer;
|
188
|
+
border: none;
|
189
|
+
transition: background-color 0.3s ease;
|
190
|
+
}
|
191
|
+
|
192
|
+
.confirm-button:hover {
|
193
|
+
background: #0056b3;
|
194
|
+
}
|
195
|
+
`}</style>
|
196
|
+
</>
|
197
|
+
);
|
198
|
+
};
|
199
|
+
|
200
|
+
export default TransactionSummary;
|
@@ -0,0 +1,136 @@
|
|
1
|
+
/* Wallet Payment Form */
|
2
|
+
.wallet-payment-form {
|
3
|
+
position: fixed;
|
4
|
+
top: 0;
|
5
|
+
left: 0;
|
6
|
+
width: 100%;
|
7
|
+
height: 100%;
|
8
|
+
display: flex;
|
9
|
+
justify-content: center;
|
10
|
+
align-items: center;
|
11
|
+
z-index: 1000;
|
12
|
+
}
|
13
|
+
|
14
|
+
.overlay {
|
15
|
+
position: absolute;
|
16
|
+
top: 0;
|
17
|
+
left: 0;
|
18
|
+
width: 100%;
|
19
|
+
height: 100%;
|
20
|
+
background: rgba(0, 0, 0, 0.5);
|
21
|
+
}
|
22
|
+
|
23
|
+
/* Popup Content */
|
24
|
+
.content {
|
25
|
+
position: relative;
|
26
|
+
background: white;
|
27
|
+
padding: 20px;
|
28
|
+
border-radius: 10px;
|
29
|
+
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
|
30
|
+
max-width: 400px;
|
31
|
+
width: 90%;
|
32
|
+
text-align: center;
|
33
|
+
border: 1px solid #ddd;
|
34
|
+
font-family: Arial, sans-serif;
|
35
|
+
}
|
36
|
+
|
37
|
+
/* Passcode Popup (used by EnterPasscode) */
|
38
|
+
.passcode-popup {
|
39
|
+
padding: 20px;
|
40
|
+
background: white;
|
41
|
+
border-radius: 10px;
|
42
|
+
text-align: center;
|
43
|
+
}
|
44
|
+
|
45
|
+
/* Passcode Section */
|
46
|
+
.passcode-section {
|
47
|
+
text-align: left;
|
48
|
+
margin-bottom: 20px;
|
49
|
+
}
|
50
|
+
|
51
|
+
.passcode-section label {
|
52
|
+
font-size: 1em;
|
53
|
+
font-weight: bold;
|
54
|
+
color: #000;
|
55
|
+
}
|
56
|
+
|
57
|
+
.passcode-input {
|
58
|
+
position: relative;
|
59
|
+
width: 100%;
|
60
|
+
border: 1px solid #ccc;
|
61
|
+
border-radius: 8px;
|
62
|
+
padding: 12px;
|
63
|
+
font-size: 1.1em;
|
64
|
+
text-align: center;
|
65
|
+
letter-spacing: 5px;
|
66
|
+
background: transparent;
|
67
|
+
display: flex;
|
68
|
+
align-items: center;
|
69
|
+
}
|
70
|
+
|
71
|
+
.passcode-input input {
|
72
|
+
flex: 1;
|
73
|
+
border: none;
|
74
|
+
outline: none;
|
75
|
+
text-align: center;
|
76
|
+
font-size: 1.4em;
|
77
|
+
letter-spacing: 5px;
|
78
|
+
background: transparent;
|
79
|
+
color: #000;
|
80
|
+
font-weight: bold;
|
81
|
+
}
|
82
|
+
|
83
|
+
.passcode-input .toggle-visibility {
|
84
|
+
position: absolute;
|
85
|
+
right: 12px;
|
86
|
+
top: 50%;
|
87
|
+
transform: translateY(-50%);
|
88
|
+
cursor: pointer;
|
89
|
+
font-size: 1.5em;
|
90
|
+
color: #000;
|
91
|
+
}
|
92
|
+
|
93
|
+
/* Buttons */
|
94
|
+
.back-button {
|
95
|
+
background: white !important;
|
96
|
+
border: 2px solid red !important;
|
97
|
+
color: red !important;
|
98
|
+
padding: 10px 15px !important;
|
99
|
+
border-radius: 5px !important;
|
100
|
+
font-size: 1em !important;
|
101
|
+
cursor: pointer !important;
|
102
|
+
transition: all 0.3s ease !important;
|
103
|
+
}
|
104
|
+
|
105
|
+
.back-button:hover {
|
106
|
+
background: white !important;
|
107
|
+
color: red !important;
|
108
|
+
border-color: red !important;
|
109
|
+
}
|
110
|
+
|
111
|
+
/* Success/Failed Content (used by PaymentSuccess/PaymentFailed) */
|
112
|
+
.success-content .icon {
|
113
|
+
color: #02CD8D;
|
114
|
+
font-size: 40px;
|
115
|
+
margin-bottom: 10px;
|
116
|
+
}
|
117
|
+
|
118
|
+
.success-content h3,
|
119
|
+
.success-content p {
|
120
|
+
font-size: 1em;
|
121
|
+
color: #666;
|
122
|
+
margin-bottom: 15px;
|
123
|
+
}
|
124
|
+
|
125
|
+
/* Blinking Animation (possibly used by LoadingOverlay) */
|
126
|
+
@keyframes blink {
|
127
|
+
0% {
|
128
|
+
opacity: 1;
|
129
|
+
}
|
130
|
+
50% {
|
131
|
+
opacity: 0;
|
132
|
+
}
|
133
|
+
100% {
|
134
|
+
opacity: 1;
|
135
|
+
}
|
136
|
+
}
|
@@ -0,0 +1,204 @@
|
|
1
|
+
import React, { useState, useEffect } from 'react';
|
2
|
+
import HasAccountSummary from './HasAccountSummary';
|
3
|
+
import HasFundsSummary from './HasFundsSummary';
|
4
|
+
import TransactionDetailsSummary from './TransactionSummary';
|
5
|
+
import EnterPasscode from './EnterPasscode';
|
6
|
+
import PaymentSuccess from './PaymentSuccess';
|
7
|
+
import PaymentFailed from './PaymentFailed';
|
8
|
+
import InsufficientFunds from './InsufficientFunds';
|
9
|
+
import LoadingOverlay from './LoadingOverlay';
|
10
|
+
|
11
|
+
const SAMPLE_CUSTOMERS = {
|
12
|
+
"customer123": { name: "John Doe", balance: 1000, passcode: "123456" },
|
13
|
+
"customer456": { name: "Jane Smith", balance: 500, passcode: "567856" },
|
14
|
+
"customer789": { name: "Alice Brown", balance: 50, passcode: "901256" },
|
15
|
+
};
|
16
|
+
|
17
|
+
const generateTransactionDetails = (amount, transactionId) => ({
|
18
|
+
type: "Booking",
|
19
|
+
id: transactionId,
|
20
|
+
particulars: "Hotel Booking",
|
21
|
+
billedCurrency: "UGX",
|
22
|
+
billedAmount: amount,
|
23
|
+
totalBilling: amount,
|
24
|
+
});
|
25
|
+
|
26
|
+
const checkAccountExists = (customerId) => Promise.resolve(!!SAMPLE_CUSTOMERS[customerId]);
|
27
|
+
|
28
|
+
const validatePasscode = (customerId, passcode, amount) => {
|
29
|
+
const customer = SAMPLE_CUSTOMERS[customerId];
|
30
|
+
if (!customer) return { success: false, reason: 'no_account' };
|
31
|
+
if (customer.passcode !== passcode) return { success: false, reason: 'invalid_passcode' };
|
32
|
+
if (customer.balance < amount) return { success: false, reason: 'insufficient_funds' };
|
33
|
+
|
34
|
+
SAMPLE_CUSTOMERS[customerId].balance -= amount;
|
35
|
+
return { success: true };
|
36
|
+
};
|
37
|
+
|
38
|
+
const WalletPaymentForm = ({ customerId, amount, onClose, onSuccess }) => {
|
39
|
+
const [popup, setPopup] = useState('transactionSummary');
|
40
|
+
const [passcode, setPasscode] = useState('');
|
41
|
+
const [hasAccount, setHasAccount] = useState(null);
|
42
|
+
const [paymentStatus, setPaymentStatus] = useState('idle');
|
43
|
+
const [showPasscode, setShowPasscode] = useState(false);
|
44
|
+
const [transactionId] = useState(`W-${Math.floor(Math.random() * 1000000000)}`);
|
45
|
+
const [loading, setLoading] = useState(true);
|
46
|
+
|
47
|
+
useEffect(() => {
|
48
|
+
console.log('useEffect running, customerId:', customerId, 'amount:', amount);
|
49
|
+
const timer = setTimeout(() => {
|
50
|
+
console.log('Loading finished');
|
51
|
+
setLoading(false);
|
52
|
+
}, 5000);
|
53
|
+
|
54
|
+
const checkConditions = async () => {
|
55
|
+
if (!customerId) {
|
56
|
+
console.log('No customerId provided, setting hasAccount to false');
|
57
|
+
setHasAccount(false);
|
58
|
+
return;
|
59
|
+
}
|
60
|
+
if (!SAMPLE_CUSTOMERS[customerId]) {
|
61
|
+
console.log(`Invalid customerId: ${customerId}, setting hasAccount to false`);
|
62
|
+
setHasAccount(false);
|
63
|
+
return;
|
64
|
+
}
|
65
|
+
const accountExists = await checkAccountExists(customerId);
|
66
|
+
console.log('Account exists:', accountExists);
|
67
|
+
setHasAccount(accountExists);
|
68
|
+
};
|
69
|
+
|
70
|
+
checkConditions();
|
71
|
+
|
72
|
+
return () => clearTimeout(timer);
|
73
|
+
}, [customerId, amount]);
|
74
|
+
|
75
|
+
const handleConfirm = () => {
|
76
|
+
console.log('Confirm clicked, hasAccount:', hasAccount);
|
77
|
+
if (hasAccount === null) {
|
78
|
+
console.log('hasAccount is null, cannot proceed');
|
79
|
+
return;
|
80
|
+
}
|
81
|
+
if (hasAccount) {
|
82
|
+
setPopup('enterPasscode');
|
83
|
+
} else {
|
84
|
+
console.log('No account, showing HasAccountSummary');
|
85
|
+
setPopup('transactionSummary');
|
86
|
+
}
|
87
|
+
};
|
88
|
+
|
89
|
+
const handleSubmit = async (e) => {
|
90
|
+
e.preventDefault();
|
91
|
+
console.log('Submitting passcode:', passcode);
|
92
|
+
setPaymentStatus('pending');
|
93
|
+
const result = await validatePasscode(customerId, passcode, amount);
|
94
|
+
console.log('Validation result:', result);
|
95
|
+
setPaymentStatus(result.success ? 'success' : 'failed');
|
96
|
+
|
97
|
+
if (result.success) {
|
98
|
+
setPopup('paymentSuccess');
|
99
|
+
if (onSuccess) onSuccess();
|
100
|
+
} else {
|
101
|
+
if (result.reason === 'insufficient_funds') {
|
102
|
+
setPopup('insufficientFunds');
|
103
|
+
} else {
|
104
|
+
setPopup('paymentFailed');
|
105
|
+
}
|
106
|
+
setTimeout(() => {
|
107
|
+
setPopup('transactionSummary');
|
108
|
+
setPasscode('');
|
109
|
+
setPaymentStatus('idle');
|
110
|
+
onClose();
|
111
|
+
}, 5000);
|
112
|
+
}
|
113
|
+
};
|
114
|
+
|
115
|
+
const handleSuccessClose = () => {
|
116
|
+
console.log('Success close clicked');
|
117
|
+
setPopup('transactionSummary');
|
118
|
+
setPasscode('');
|
119
|
+
setPaymentStatus('idle');
|
120
|
+
onClose();
|
121
|
+
};
|
122
|
+
|
123
|
+
const transactionDetails = generateTransactionDetails(amount, transactionId);
|
124
|
+
|
125
|
+
const renderPopup = () => {
|
126
|
+
console.log('Rendering popup, current popup:', popup, 'hasAccount:', hasAccount);
|
127
|
+
switch (popup) {
|
128
|
+
case 'transactionSummary':
|
129
|
+
if (!hasAccount) {
|
130
|
+
return <HasAccountSummary onClose={onClose} />;
|
131
|
+
}
|
132
|
+
return (
|
133
|
+
<TransactionDetailsSummary
|
134
|
+
transactionDetails={transactionDetails}
|
135
|
+
onConfirm={handleConfirm}
|
136
|
+
/>
|
137
|
+
);
|
138
|
+
case 'enterPasscode':
|
139
|
+
return (
|
140
|
+
<EnterPasscode
|
141
|
+
passcode={passcode}
|
142
|
+
setPasscode={setPasscode}
|
143
|
+
showPasscode={showPasscode}
|
144
|
+
setShowPasscode={setShowPasscode}
|
145
|
+
transactionDetails={transactionDetails}
|
146
|
+
onSubmit={handleSubmit}
|
147
|
+
onBack={() => setPopup('transactionSummary')}
|
148
|
+
/>
|
149
|
+
);
|
150
|
+
case 'paymentSuccess':
|
151
|
+
return <PaymentSuccess amount={amount} onClose={handleSuccessClose} />;
|
152
|
+
case 'paymentFailed':
|
153
|
+
return <PaymentFailed onClose={onClose} />;
|
154
|
+
case 'insufficientFunds':
|
155
|
+
return <InsufficientFunds onClose={onClose} />;
|
156
|
+
default:
|
157
|
+
return null;
|
158
|
+
}
|
159
|
+
};
|
160
|
+
|
161
|
+
return (
|
162
|
+
<>
|
163
|
+
<div className="wallet-payment-form">
|
164
|
+
{loading ? (
|
165
|
+
<LoadingOverlay />
|
166
|
+
) : (
|
167
|
+
<>
|
168
|
+
<div className="overlay" onClick={() => {
|
169
|
+
console.log('Overlay clicked, closing');
|
170
|
+
onClose();
|
171
|
+
}}></div>
|
172
|
+
{renderPopup()}
|
173
|
+
</>
|
174
|
+
)}
|
175
|
+
</div>
|
176
|
+
<style>{`
|
177
|
+
.wallet-payment-form {
|
178
|
+
position: fixed;
|
179
|
+
top: 0;
|
180
|
+
left: 0;
|
181
|
+
width: 100%;
|
182
|
+
height: 100%;
|
183
|
+
display: flex;
|
184
|
+
justify-content: center;
|
185
|
+
align-items: center;
|
186
|
+
z-index: 1000;
|
187
|
+
}
|
188
|
+
|
189
|
+
.overlay {
|
190
|
+
position: absolute;
|
191
|
+
top: 0;
|
192
|
+
left: 0;
|
193
|
+
width: 100%;
|
194
|
+
height: 100%;
|
195
|
+
background: rgba(0, 0, 0, 0.5);
|
196
|
+
z-index: 999;
|
197
|
+
pointer-events: auto;
|
198
|
+
}
|
199
|
+
`}</style>
|
200
|
+
</>
|
201
|
+
);
|
202
|
+
};
|
203
|
+
|
204
|
+
export default WalletPaymentForm;
|
Binary file
|
package/src/test.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# This Allan Thembo
|
2
|
+
my name is Allan Thembo i am a beginner
|
3
|
+
for markdown i have just tried out this [Markdown Tutorial Website](http://www.markdown.com).
|
4
|
+
|
5
|
+
I hope you enjoy my session
|
6
|
+
|
7
|
+
## C++ Example for Recursion
|
8
|
+
|
9
|
+
```c
|
10
|
+
|
11
|
+
#include <iostream>
|
12
|
+
|
13
|
+
int sum(int n)
|
14
|
+
{
|
15
|
+
if (n > 2 )
|
16
|
+
return n;
|
17
|
+
else
|
18
|
+
return n + sum (n-1)
|
19
|
+
|
20
|
+
}
|
21
|
+
|
22
|
+
int main()
|
23
|
+
{
|
24
|
+
std::count << "sum from one to 10 is "
|
25
|
+
<< sum (10)>> std::end1
|
26
|
+
}
|
27
|
+
|
28
|
+
```
|
29
|
+
|
30
|
+
## Markdown is simple but powerful way that will help me make documentation for my code
|
31
|
+
|
32
|
+
I will be learning more from [Markdown Tutorial Website](httpps://www.markdowntutorial.com), and there is an [Online Markdown Editor](https://dillinger.io) i will be using in addition to tutorials.
|
33
|
+
|
34
|
+
## Admin Dashboard
|
package/src/test.pdf
ADDED
Binary file
|