powr-sdk-web 2.0.7 → 2.0.9
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/dist/index.js +7 -0
- package/dist/invoices/admin.js +837 -0
- package/package.json +4 -4
package/dist/index.js
CHANGED
|
@@ -39,6 +39,12 @@ Object.defineProperty(exports, "PowrBaseInvoice", {
|
|
|
39
39
|
return _invoice["default"];
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
|
+
Object.defineProperty(exports, "PowrBaseInvoicesAdmin", {
|
|
43
|
+
enumerable: true,
|
|
44
|
+
get: function get() {
|
|
45
|
+
return _admin4["default"];
|
|
46
|
+
}
|
|
47
|
+
});
|
|
42
48
|
Object.defineProperty(exports, "PowrBaseLike", {
|
|
43
49
|
enumerable: true,
|
|
44
50
|
get: function get() {
|
|
@@ -101,4 +107,5 @@ var _auth = _interopRequireDefault(require("./auth"));
|
|
|
101
107
|
var _forms = _interopRequireDefault(require("./forms"));
|
|
102
108
|
var _admin2 = _interopRequireDefault(require("./forms/admin"));
|
|
103
109
|
var _admin3 = _interopRequireDefault(require("./slides/admin"));
|
|
110
|
+
var _admin4 = _interopRequireDefault(require("./invoices/admin"));
|
|
104
111
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
|
|
@@ -0,0 +1,837 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports["default"] = void 0;
|
|
8
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
9
|
+
var _reactToastify = require("react-toastify");
|
|
10
|
+
require("react-toastify/dist/ReactToastify.css");
|
|
11
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t4 in e) "default" !== _t4 && {}.hasOwnProperty.call(e, _t4) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t4)) && (i.get || i.set) ? o(f, _t4, i) : f[_t4] = e[_t4]); return f; })(e, t); }
|
|
12
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
13
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
14
|
+
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
15
|
+
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
|
|
16
|
+
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
17
|
+
function _regenerator() { /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ var e, t, r = "function" == typeof Symbol ? Symbol : {}, n = r.iterator || "@@iterator", o = r.toStringTag || "@@toStringTag"; function i(r, n, o, i) { var c = n && n.prototype instanceof Generator ? n : Generator, u = Object.create(c.prototype); return _regeneratorDefine2(u, "_invoke", function (r, n, o) { var i, c, u, f = 0, p = o || [], y = !1, G = { p: 0, n: 0, v: e, a: d, f: d.bind(e, 4), d: function d(t, r) { return i = t, c = 0, u = e, G.n = r, a; } }; function d(r, n) { for (c = r, u = n, t = 0; !y && f && !o && t < p.length; t++) { var o, i = p[t], d = G.p, l = i[2]; r > 3 ? (o = l === n) && (u = i[(c = i[4]) ? 5 : (c = 3, 3)], i[4] = i[5] = e) : i[0] <= d && ((o = r < 2 && d < i[1]) ? (c = 0, G.v = n, G.n = i[1]) : d < l && (o = r < 3 || i[0] > n || n > l) && (i[4] = r, i[5] = n, G.n = l, c = 0)); } if (o || r > 1) return a; throw y = !0, n; } return function (o, p, l) { if (f > 1) throw TypeError("Generator is already running"); for (y && 1 === p && d(p, l), c = p, u = l; (t = c < 2 ? e : u) || !y;) { i || (c ? c < 3 ? (c > 1 && (G.n = -1), d(c, u)) : G.n = u : G.v = u); try { if (f = 2, i) { if (c || (o = "next"), t = i[o]) { if (!(t = t.call(i, u))) throw TypeError("iterator result is not an object"); if (!t.done) return t; u = t.value, c < 2 && (c = 0); } else 1 === c && (t = i["return"]) && t.call(i), c < 2 && (u = TypeError("The iterator does not provide a '" + o + "' method"), c = 1); i = e; } else if ((t = (y = G.n < 0) ? u : r.call(n, G)) !== a) break; } catch (t) { i = e, c = 1, u = t; } finally { f = 1; } } return { value: t, done: y }; }; }(r, o, i), !0), u; } var a = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} t = Object.getPrototypeOf; var c = [][n] ? t(t([][n]())) : (_regeneratorDefine2(t = {}, n, function () { return this; }), t), u = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(c); function f(e) { return Object.setPrototypeOf ? Object.setPrototypeOf(e, GeneratorFunctionPrototype) : (e.__proto__ = GeneratorFunctionPrototype, _regeneratorDefine2(e, o, "GeneratorFunction")), e.prototype = Object.create(u), e; } return GeneratorFunction.prototype = GeneratorFunctionPrototype, _regeneratorDefine2(u, "constructor", GeneratorFunctionPrototype), _regeneratorDefine2(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = "GeneratorFunction", _regeneratorDefine2(GeneratorFunctionPrototype, o, "GeneratorFunction"), _regeneratorDefine2(u), _regeneratorDefine2(u, o, "Generator"), _regeneratorDefine2(u, n, function () { return this; }), _regeneratorDefine2(u, "toString", function () { return "[object Generator]"; }), (_regenerator = function _regenerator() { return { w: i, m: f }; })(); }
|
|
18
|
+
function _regeneratorDefine2(e, r, n, t) { var i = Object.defineProperty; try { i({}, "", {}); } catch (e) { i = 0; } _regeneratorDefine2 = function _regeneratorDefine(e, r, n, t) { function o(r, n) { _regeneratorDefine2(e, r, function (e) { return this._invoke(r, n, e); }); } r ? i ? i(e, r, { value: n, enumerable: !t, configurable: !t, writable: !t }) : e[r] = n : (o("next", 0), o("throw", 1), o("return", 2)); }, _regeneratorDefine2(e, r, n, t); }
|
|
19
|
+
function asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }
|
|
20
|
+
function _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }
|
|
21
|
+
function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
|
|
22
|
+
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
23
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
24
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
25
|
+
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
|
|
26
|
+
function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
|
|
27
|
+
var PowrBaseInvoicesAdmin = function PowrBaseInvoicesAdmin(_ref) {
|
|
28
|
+
var projectId = _ref.projectId,
|
|
29
|
+
_ref$apiUrl = _ref.apiUrl,
|
|
30
|
+
apiUrl = _ref$apiUrl === void 0 ? 'https://api.powrbase.cloud/invoice' : _ref$apiUrl,
|
|
31
|
+
onInvoiceAction = _ref.onInvoiceAction,
|
|
32
|
+
onRefresh = _ref.onRefresh;
|
|
33
|
+
var _useState = (0, _react.useState)([]),
|
|
34
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
35
|
+
invoices = _useState2[0],
|
|
36
|
+
setInvoices = _useState2[1];
|
|
37
|
+
var _useState3 = (0, _react.useState)(true),
|
|
38
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
39
|
+
loading = _useState4[0],
|
|
40
|
+
setLoading = _useState4[1];
|
|
41
|
+
var _useState5 = (0, _react.useState)(null),
|
|
42
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
43
|
+
error = _useState6[0],
|
|
44
|
+
setError = _useState6[1];
|
|
45
|
+
var _useState7 = (0, _react.useState)(false),
|
|
46
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
47
|
+
showAddModal = _useState8[0],
|
|
48
|
+
setShowAddModal = _useState8[1];
|
|
49
|
+
var _useState9 = (0, _react.useState)(false),
|
|
50
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
51
|
+
addLoading = _useState0[0],
|
|
52
|
+
setAddLoading = _useState0[1];
|
|
53
|
+
var _useState1 = (0, _react.useState)({
|
|
54
|
+
invoiceNumber: 'INV-20250707',
|
|
55
|
+
dateOfIssue: '2025-07-07',
|
|
56
|
+
paymentStatus: 'Paid',
|
|
57
|
+
customerInfo: {
|
|
58
|
+
name: 'Raj Nandani',
|
|
59
|
+
email: 'raj@example.com',
|
|
60
|
+
phoneNumber: '9876543210',
|
|
61
|
+
customerId: 'CUS123'
|
|
62
|
+
},
|
|
63
|
+
serviceSection: {
|
|
64
|
+
serviceTitle: 'Web Development Bootcamp',
|
|
65
|
+
providerName: 'John Doe',
|
|
66
|
+
duration: '3 months',
|
|
67
|
+
schedule: 'July - Sept 2025',
|
|
68
|
+
deliveryMode: 'Online'
|
|
69
|
+
},
|
|
70
|
+
paymentSection: {
|
|
71
|
+
baseAmount: 15000,
|
|
72
|
+
tax: 2700,
|
|
73
|
+
discount: 1000,
|
|
74
|
+
totalAmount: 16700
|
|
75
|
+
}
|
|
76
|
+
}),
|
|
77
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
78
|
+
form = _useState10[0],
|
|
79
|
+
setForm = _useState10[1];
|
|
80
|
+
var _useState11 = (0, _react.useState)(null),
|
|
81
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
82
|
+
addError = _useState12[0],
|
|
83
|
+
setAddError = _useState12[1];
|
|
84
|
+
var _useState13 = (0, _react.useState)(null),
|
|
85
|
+
_useState14 = _slicedToArray(_useState13, 2),
|
|
86
|
+
editInvoiceId = _useState14[0],
|
|
87
|
+
setEditInvoiceId = _useState14[1];
|
|
88
|
+
var _useState15 = (0, _react.useState)(null),
|
|
89
|
+
_useState16 = _slicedToArray(_useState15, 2),
|
|
90
|
+
editForm = _useState16[0],
|
|
91
|
+
setEditForm = _useState16[1];
|
|
92
|
+
var _useState17 = (0, _react.useState)(false),
|
|
93
|
+
_useState18 = _slicedToArray(_useState17, 2),
|
|
94
|
+
editLoading = _useState18[0],
|
|
95
|
+
setEditLoading = _useState18[1];
|
|
96
|
+
var _useState19 = (0, _react.useState)(null),
|
|
97
|
+
_useState20 = _slicedToArray(_useState19, 2),
|
|
98
|
+
editError = _useState20[0],
|
|
99
|
+
setEditError = _useState20[1];
|
|
100
|
+
var _useState21 = (0, _react.useState)(null),
|
|
101
|
+
_useState22 = _slicedToArray(_useState21, 2),
|
|
102
|
+
detailInvoice = _useState22[0],
|
|
103
|
+
setDetailInvoice = _useState22[1];
|
|
104
|
+
var fetchInvoices = /*#__PURE__*/function () {
|
|
105
|
+
var _ref2 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee() {
|
|
106
|
+
var response, data, _t;
|
|
107
|
+
return _regenerator().w(function (_context) {
|
|
108
|
+
while (1) switch (_context.n) {
|
|
109
|
+
case 0:
|
|
110
|
+
if (projectId) {
|
|
111
|
+
_context.n = 1;
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
return _context.a(2);
|
|
115
|
+
case 1:
|
|
116
|
+
setLoading(true);
|
|
117
|
+
setError(null);
|
|
118
|
+
_context.p = 2;
|
|
119
|
+
_context.n = 3;
|
|
120
|
+
return fetch("".concat(apiUrl, "?projectId=").concat(projectId));
|
|
121
|
+
case 3:
|
|
122
|
+
response = _context.v;
|
|
123
|
+
if (response.ok) {
|
|
124
|
+
_context.n = 4;
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
throw new Error('Failed to fetch invoices');
|
|
128
|
+
case 4:
|
|
129
|
+
_context.n = 5;
|
|
130
|
+
return response.json();
|
|
131
|
+
case 5:
|
|
132
|
+
data = _context.v;
|
|
133
|
+
if (data.success && data.invoices) {
|
|
134
|
+
setInvoices(data.invoices);
|
|
135
|
+
} else {
|
|
136
|
+
setInvoices([]);
|
|
137
|
+
}
|
|
138
|
+
_context.n = 7;
|
|
139
|
+
break;
|
|
140
|
+
case 6:
|
|
141
|
+
_context.p = 6;
|
|
142
|
+
_t = _context.v;
|
|
143
|
+
setError('Failed to load invoices');
|
|
144
|
+
setInvoices([]);
|
|
145
|
+
case 7:
|
|
146
|
+
_context.p = 7;
|
|
147
|
+
setLoading(false);
|
|
148
|
+
return _context.f(7);
|
|
149
|
+
case 8:
|
|
150
|
+
return _context.a(2);
|
|
151
|
+
}
|
|
152
|
+
}, _callee, null, [[2, 6, 7, 8]]);
|
|
153
|
+
}));
|
|
154
|
+
return function fetchInvoices() {
|
|
155
|
+
return _ref2.apply(this, arguments);
|
|
156
|
+
};
|
|
157
|
+
}();
|
|
158
|
+
(0, _react.useEffect)(function () {
|
|
159
|
+
fetchInvoices();
|
|
160
|
+
}, [projectId]);
|
|
161
|
+
var handleAddInvoice = /*#__PURE__*/function () {
|
|
162
|
+
var _ref3 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee2(e) {
|
|
163
|
+
var response, data, _t2;
|
|
164
|
+
return _regenerator().w(function (_context2) {
|
|
165
|
+
while (1) switch (_context2.n) {
|
|
166
|
+
case 0:
|
|
167
|
+
e.preventDefault();
|
|
168
|
+
if (projectId) {
|
|
169
|
+
_context2.n = 1;
|
|
170
|
+
break;
|
|
171
|
+
}
|
|
172
|
+
return _context2.a(2);
|
|
173
|
+
case 1:
|
|
174
|
+
setAddLoading(true);
|
|
175
|
+
setAddError(null);
|
|
176
|
+
_context2.p = 2;
|
|
177
|
+
_context2.n = 3;
|
|
178
|
+
return fetch("".concat(apiUrl, "?projectId=").concat(projectId), {
|
|
179
|
+
method: 'POST',
|
|
180
|
+
headers: {
|
|
181
|
+
'Content-Type': 'application/json'
|
|
182
|
+
},
|
|
183
|
+
body: JSON.stringify(form)
|
|
184
|
+
});
|
|
185
|
+
case 3:
|
|
186
|
+
response = _context2.v;
|
|
187
|
+
if (response.ok) {
|
|
188
|
+
_context2.n = 4;
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
throw new Error('Failed to add invoice');
|
|
192
|
+
case 4:
|
|
193
|
+
_context2.n = 5;
|
|
194
|
+
return response.json();
|
|
195
|
+
case 5:
|
|
196
|
+
data = _context2.v;
|
|
197
|
+
if (!data.success) {
|
|
198
|
+
_context2.n = 7;
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
setShowAddModal(false);
|
|
202
|
+
setForm({
|
|
203
|
+
invoiceNumber: 'INV-20250707',
|
|
204
|
+
dateOfIssue: '2025-07-07',
|
|
205
|
+
paymentStatus: 'Paid',
|
|
206
|
+
customerInfo: {
|
|
207
|
+
name: 'Raj Nandani',
|
|
208
|
+
email: 'raj@example.com',
|
|
209
|
+
phoneNumber: '9876543210',
|
|
210
|
+
customerId: 'CUS123'
|
|
211
|
+
},
|
|
212
|
+
serviceSection: {
|
|
213
|
+
serviceTitle: 'Web Development Bootcamp',
|
|
214
|
+
providerName: 'John Doe',
|
|
215
|
+
duration: '3 months',
|
|
216
|
+
schedule: 'July - Sept 2025',
|
|
217
|
+
deliveryMode: 'Online'
|
|
218
|
+
},
|
|
219
|
+
paymentSection: {
|
|
220
|
+
baseAmount: 15000,
|
|
221
|
+
tax: 2700,
|
|
222
|
+
discount: 1000,
|
|
223
|
+
totalAmount: 16700
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
setAddError(null);
|
|
227
|
+
_context2.n = 6;
|
|
228
|
+
return fetchInvoices();
|
|
229
|
+
case 6:
|
|
230
|
+
if (onInvoiceAction) {
|
|
231
|
+
onInvoiceAction('success', 'Invoice added successfully!');
|
|
232
|
+
} else {
|
|
233
|
+
_reactToastify.toast.success('Invoice added successfully!');
|
|
234
|
+
}
|
|
235
|
+
_context2.n = 8;
|
|
236
|
+
break;
|
|
237
|
+
case 7:
|
|
238
|
+
setAddError('Failed to add invoice');
|
|
239
|
+
if (onInvoiceAction) {
|
|
240
|
+
onInvoiceAction('error', 'Failed to add invoice');
|
|
241
|
+
} else {
|
|
242
|
+
_reactToastify.toast.error('Failed to add invoice');
|
|
243
|
+
}
|
|
244
|
+
case 8:
|
|
245
|
+
_context2.n = 10;
|
|
246
|
+
break;
|
|
247
|
+
case 9:
|
|
248
|
+
_context2.p = 9;
|
|
249
|
+
_t2 = _context2.v;
|
|
250
|
+
setAddError('Failed to add invoice');
|
|
251
|
+
if (onInvoiceAction) {
|
|
252
|
+
onInvoiceAction('error', 'Failed to add invoice');
|
|
253
|
+
} else {
|
|
254
|
+
_reactToastify.toast.error('Failed to add invoice');
|
|
255
|
+
}
|
|
256
|
+
case 10:
|
|
257
|
+
_context2.p = 10;
|
|
258
|
+
setAddLoading(false);
|
|
259
|
+
return _context2.f(10);
|
|
260
|
+
case 11:
|
|
261
|
+
return _context2.a(2);
|
|
262
|
+
}
|
|
263
|
+
}, _callee2, null, [[2, 9, 10, 11]]);
|
|
264
|
+
}));
|
|
265
|
+
return function handleAddInvoice(_x) {
|
|
266
|
+
return _ref3.apply(this, arguments);
|
|
267
|
+
};
|
|
268
|
+
}();
|
|
269
|
+
var handleFormChange = function handleFormChange(e) {
|
|
270
|
+
var _e$target = e.target,
|
|
271
|
+
name = _e$target.name,
|
|
272
|
+
value = _e$target.value;
|
|
273
|
+
if (name.startsWith('customerInfo.')) {
|
|
274
|
+
setForm(function (prev) {
|
|
275
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
276
|
+
customerInfo: _objectSpread(_objectSpread({}, prev.customerInfo), {}, _defineProperty({}, name.replace('customerInfo.', ''), value))
|
|
277
|
+
});
|
|
278
|
+
});
|
|
279
|
+
} else if (name.startsWith('serviceSection.')) {
|
|
280
|
+
setForm(function (prev) {
|
|
281
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
282
|
+
serviceSection: _objectSpread(_objectSpread({}, prev.serviceSection), {}, _defineProperty({}, name.replace('serviceSection.', ''), value))
|
|
283
|
+
});
|
|
284
|
+
});
|
|
285
|
+
} else if (name.startsWith('paymentSection.')) {
|
|
286
|
+
setForm(function (prev) {
|
|
287
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
288
|
+
paymentSection: _objectSpread(_objectSpread({}, prev.paymentSection), {}, _defineProperty({}, name.replace('paymentSection.', ''), Number(value)))
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
} else {
|
|
292
|
+
setForm(function (prev) {
|
|
293
|
+
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, name, value));
|
|
294
|
+
});
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
var handleEditClick = function handleEditClick(invoice) {
|
|
298
|
+
setEditInvoiceId(invoice._id);
|
|
299
|
+
setEditForm({
|
|
300
|
+
invoiceNumber: invoice.invoiceNumber,
|
|
301
|
+
dateOfIssue: invoice.dateOfIssue,
|
|
302
|
+
paymentStatus: invoice.paymentStatus,
|
|
303
|
+
customerInfo: _objectSpread({}, invoice.customerInfo),
|
|
304
|
+
serviceSection: _objectSpread({}, invoice.serviceSection),
|
|
305
|
+
paymentSection: _objectSpread({}, invoice.paymentSection)
|
|
306
|
+
});
|
|
307
|
+
setEditError(null);
|
|
308
|
+
};
|
|
309
|
+
var handleEditFormChange = function handleEditFormChange(e) {
|
|
310
|
+
var _e$target2 = e.target,
|
|
311
|
+
name = _e$target2.name,
|
|
312
|
+
value = _e$target2.value;
|
|
313
|
+
if (name.startsWith('customerInfo.')) {
|
|
314
|
+
setEditForm(function (prev) {
|
|
315
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
316
|
+
customerInfo: _objectSpread(_objectSpread({}, prev.customerInfo), {}, _defineProperty({}, name.replace('customerInfo.', ''), value))
|
|
317
|
+
});
|
|
318
|
+
});
|
|
319
|
+
} else if (name.startsWith('serviceSection.')) {
|
|
320
|
+
setEditForm(function (prev) {
|
|
321
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
322
|
+
serviceSection: _objectSpread(_objectSpread({}, prev.serviceSection), {}, _defineProperty({}, name.replace('serviceSection.', ''), value))
|
|
323
|
+
});
|
|
324
|
+
});
|
|
325
|
+
} else if (name.startsWith('paymentSection.')) {
|
|
326
|
+
setEditForm(function (prev) {
|
|
327
|
+
return _objectSpread(_objectSpread({}, prev), {}, {
|
|
328
|
+
paymentSection: _objectSpread(_objectSpread({}, prev.paymentSection), {}, _defineProperty({}, name.replace('paymentSection.', ''), Number(value)))
|
|
329
|
+
});
|
|
330
|
+
});
|
|
331
|
+
} else {
|
|
332
|
+
setEditForm(function (prev) {
|
|
333
|
+
return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, name, value));
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
};
|
|
337
|
+
var handleEditSubmit = /*#__PURE__*/function () {
|
|
338
|
+
var _ref4 = _asyncToGenerator(/*#__PURE__*/_regenerator().m(function _callee3(e) {
|
|
339
|
+
var response, data, _t3;
|
|
340
|
+
return _regenerator().w(function (_context3) {
|
|
341
|
+
while (1) switch (_context3.n) {
|
|
342
|
+
case 0:
|
|
343
|
+
e.preventDefault();
|
|
344
|
+
if (!(!editInvoiceId || !projectId)) {
|
|
345
|
+
_context3.n = 1;
|
|
346
|
+
break;
|
|
347
|
+
}
|
|
348
|
+
return _context3.a(2);
|
|
349
|
+
case 1:
|
|
350
|
+
setEditLoading(true);
|
|
351
|
+
setEditError(null);
|
|
352
|
+
_context3.p = 2;
|
|
353
|
+
_context3.n = 3;
|
|
354
|
+
return fetch("".concat(apiUrl, "/").concat(editInvoiceId, "?projectId=").concat(projectId), {
|
|
355
|
+
method: 'PUT',
|
|
356
|
+
headers: {
|
|
357
|
+
'Content-Type': 'application/json'
|
|
358
|
+
},
|
|
359
|
+
body: JSON.stringify(editForm)
|
|
360
|
+
});
|
|
361
|
+
case 3:
|
|
362
|
+
response = _context3.v;
|
|
363
|
+
if (response.ok) {
|
|
364
|
+
_context3.n = 4;
|
|
365
|
+
break;
|
|
366
|
+
}
|
|
367
|
+
throw new Error('Failed to update invoice');
|
|
368
|
+
case 4:
|
|
369
|
+
_context3.n = 5;
|
|
370
|
+
return response.json();
|
|
371
|
+
case 5:
|
|
372
|
+
data = _context3.v;
|
|
373
|
+
if (!data.success) {
|
|
374
|
+
_context3.n = 7;
|
|
375
|
+
break;
|
|
376
|
+
}
|
|
377
|
+
setEditInvoiceId(null);
|
|
378
|
+
setEditForm(null);
|
|
379
|
+
setEditError(null);
|
|
380
|
+
_context3.n = 6;
|
|
381
|
+
return fetchInvoices();
|
|
382
|
+
case 6:
|
|
383
|
+
if (onInvoiceAction) {
|
|
384
|
+
onInvoiceAction('success', 'Invoice updated successfully!');
|
|
385
|
+
} else {
|
|
386
|
+
_reactToastify.toast.success('Invoice updated successfully!');
|
|
387
|
+
}
|
|
388
|
+
_context3.n = 8;
|
|
389
|
+
break;
|
|
390
|
+
case 7:
|
|
391
|
+
setEditError('Failed to update invoice');
|
|
392
|
+
if (onInvoiceAction) {
|
|
393
|
+
onInvoiceAction('error', 'Failed to update invoice');
|
|
394
|
+
} else {
|
|
395
|
+
_reactToastify.toast.error('Failed to update invoice');
|
|
396
|
+
}
|
|
397
|
+
case 8:
|
|
398
|
+
_context3.n = 10;
|
|
399
|
+
break;
|
|
400
|
+
case 9:
|
|
401
|
+
_context3.p = 9;
|
|
402
|
+
_t3 = _context3.v;
|
|
403
|
+
setEditError('Failed to update invoice');
|
|
404
|
+
if (onInvoiceAction) {
|
|
405
|
+
onInvoiceAction('error', 'Failed to update invoice');
|
|
406
|
+
} else {
|
|
407
|
+
_reactToastify.toast.error('Failed to update invoice');
|
|
408
|
+
}
|
|
409
|
+
case 10:
|
|
410
|
+
_context3.p = 10;
|
|
411
|
+
setEditLoading(false);
|
|
412
|
+
return _context3.f(10);
|
|
413
|
+
case 11:
|
|
414
|
+
return _context3.a(2);
|
|
415
|
+
}
|
|
416
|
+
}, _callee3, null, [[2, 9, 10, 11]]);
|
|
417
|
+
}));
|
|
418
|
+
return function handleEditSubmit(_x2) {
|
|
419
|
+
return _ref4.apply(this, arguments);
|
|
420
|
+
};
|
|
421
|
+
}();
|
|
422
|
+
if (loading) {
|
|
423
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
424
|
+
className: "flex items-center justify-center h-64"
|
|
425
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
426
|
+
className: "animate-spin rounded-full h-8 w-8 border-b-2 border-orange-600"
|
|
427
|
+
}));
|
|
428
|
+
}
|
|
429
|
+
if (!projectId) {
|
|
430
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
431
|
+
className: "flex items-center justify-center h-64"
|
|
432
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
433
|
+
className: "text-center"
|
|
434
|
+
}, /*#__PURE__*/_react["default"].createElement("p", {
|
|
435
|
+
className: "text-gray-500"
|
|
436
|
+
}, "No project selected"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
437
|
+
className: "text-sm text-gray-400"
|
|
438
|
+
}, "Please select a project to view invoices")));
|
|
439
|
+
}
|
|
440
|
+
if (error) {
|
|
441
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
442
|
+
className: "flex items-center justify-center h-64"
|
|
443
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
444
|
+
className: "text-center text-red-500"
|
|
445
|
+
}, error));
|
|
446
|
+
}
|
|
447
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
448
|
+
className: "space-y-6"
|
|
449
|
+
}, /*#__PURE__*/_react["default"].createElement(_reactToastify.ToastContainer, null), /*#__PURE__*/_react["default"].createElement("div", {
|
|
450
|
+
className: "flex items-center justify-between"
|
|
451
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("h1", {
|
|
452
|
+
className: "text-2xl font-bold text-gray-900"
|
|
453
|
+
}, "Invoice Management"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
454
|
+
className: "text-gray-600 mt-1"
|
|
455
|
+
}, "View and manage your project invoices")), /*#__PURE__*/_react["default"].createElement("button", {
|
|
456
|
+
onClick: function onClick() {
|
|
457
|
+
return setShowAddModal(true);
|
|
458
|
+
},
|
|
459
|
+
className: "bg-orange-600 hover:bg-orange-700 text-white px-4 py-2 rounded-md transition-colors"
|
|
460
|
+
}, "Add Invoice")), showAddModal && /*#__PURE__*/_react["default"].createElement("div", {
|
|
461
|
+
className: "fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50"
|
|
462
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
463
|
+
className: "bg-white rounded-lg p-6 w-full max-w-4xl max-h-[90vh] overflow-y-auto"
|
|
464
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
465
|
+
className: "flex justify-between items-center mb-4"
|
|
466
|
+
}, /*#__PURE__*/_react["default"].createElement("h2", {
|
|
467
|
+
className: "text-xl font-bold"
|
|
468
|
+
}, "Add Invoice"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
469
|
+
onClick: function onClick() {
|
|
470
|
+
return setShowAddModal(false);
|
|
471
|
+
},
|
|
472
|
+
className: "text-gray-500 hover:text-gray-700"
|
|
473
|
+
}, "\u2715")), /*#__PURE__*/_react["default"].createElement("form", {
|
|
474
|
+
onSubmit: handleAddInvoice,
|
|
475
|
+
className: "space-y-4"
|
|
476
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
477
|
+
className: "grid grid-cols-1 md:grid-cols-2 gap-4"
|
|
478
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
479
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
480
|
+
}, "Invoice Number"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
481
|
+
name: "invoiceNumber",
|
|
482
|
+
value: form.invoiceNumber,
|
|
483
|
+
onChange: handleFormChange,
|
|
484
|
+
required: true,
|
|
485
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
486
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
487
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
488
|
+
}, "Date of Issue"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
489
|
+
name: "dateOfIssue",
|
|
490
|
+
type: "date",
|
|
491
|
+
value: form.dateOfIssue,
|
|
492
|
+
onChange: handleFormChange,
|
|
493
|
+
required: true,
|
|
494
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
495
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
496
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
497
|
+
}, "Payment Status"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
498
|
+
name: "paymentStatus",
|
|
499
|
+
value: form.paymentStatus,
|
|
500
|
+
onChange: handleFormChange,
|
|
501
|
+
required: true,
|
|
502
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
503
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
504
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
505
|
+
}, "Customer Name"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
506
|
+
name: "customerInfo.name",
|
|
507
|
+
value: form.customerInfo.name,
|
|
508
|
+
onChange: handleFormChange,
|
|
509
|
+
required: true,
|
|
510
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
511
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
512
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
513
|
+
}, "Customer Email"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
514
|
+
name: "customerInfo.email",
|
|
515
|
+
value: form.customerInfo.email,
|
|
516
|
+
onChange: handleFormChange,
|
|
517
|
+
required: true,
|
|
518
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
519
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
520
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
521
|
+
}, "Customer Phone"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
522
|
+
name: "customerInfo.phoneNumber",
|
|
523
|
+
value: form.customerInfo.phoneNumber,
|
|
524
|
+
onChange: handleFormChange,
|
|
525
|
+
required: true,
|
|
526
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
527
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
528
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
529
|
+
}, "Customer ID"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
530
|
+
name: "customerInfo.customerId",
|
|
531
|
+
value: form.customerInfo.customerId,
|
|
532
|
+
onChange: handleFormChange,
|
|
533
|
+
required: true,
|
|
534
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
535
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
536
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
537
|
+
}, "Service Title"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
538
|
+
name: "serviceSection.serviceTitle",
|
|
539
|
+
value: form.serviceSection.serviceTitle,
|
|
540
|
+
onChange: handleFormChange,
|
|
541
|
+
required: true,
|
|
542
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
543
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
544
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
545
|
+
}, "Provider Name"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
546
|
+
name: "serviceSection.providerName",
|
|
547
|
+
value: form.serviceSection.providerName,
|
|
548
|
+
onChange: handleFormChange,
|
|
549
|
+
required: true,
|
|
550
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
551
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
552
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
553
|
+
}, "Duration"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
554
|
+
name: "serviceSection.duration",
|
|
555
|
+
value: form.serviceSection.duration,
|
|
556
|
+
onChange: handleFormChange,
|
|
557
|
+
required: true,
|
|
558
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
559
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
560
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
561
|
+
}, "Schedule"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
562
|
+
name: "serviceSection.schedule",
|
|
563
|
+
value: form.serviceSection.schedule,
|
|
564
|
+
onChange: handleFormChange,
|
|
565
|
+
required: true,
|
|
566
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
567
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
568
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
569
|
+
}, "Delivery Mode"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
570
|
+
name: "serviceSection.deliveryMode",
|
|
571
|
+
value: form.serviceSection.deliveryMode,
|
|
572
|
+
onChange: handleFormChange,
|
|
573
|
+
required: true,
|
|
574
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
575
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
576
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
577
|
+
}, "Base Amount"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
578
|
+
name: "paymentSection.baseAmount",
|
|
579
|
+
type: "number",
|
|
580
|
+
value: form.paymentSection.baseAmount,
|
|
581
|
+
onChange: handleFormChange,
|
|
582
|
+
required: true,
|
|
583
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
584
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
585
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
586
|
+
}, "Tax"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
587
|
+
name: "paymentSection.tax",
|
|
588
|
+
type: "number",
|
|
589
|
+
value: form.paymentSection.tax,
|
|
590
|
+
onChange: handleFormChange,
|
|
591
|
+
required: true,
|
|
592
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
593
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
594
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
595
|
+
}, "Discount"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
596
|
+
name: "paymentSection.discount",
|
|
597
|
+
type: "number",
|
|
598
|
+
value: form.paymentSection.discount,
|
|
599
|
+
onChange: handleFormChange,
|
|
600
|
+
required: true,
|
|
601
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
602
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
603
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
604
|
+
}, "Total Amount"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
605
|
+
name: "paymentSection.totalAmount",
|
|
606
|
+
type: "number",
|
|
607
|
+
value: form.paymentSection.totalAmount,
|
|
608
|
+
onChange: handleFormChange,
|
|
609
|
+
required: true,
|
|
610
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
611
|
+
}))), addError && /*#__PURE__*/_react["default"].createElement("div", {
|
|
612
|
+
className: "text-red-500 text-sm"
|
|
613
|
+
}, addError), /*#__PURE__*/_react["default"].createElement("div", {
|
|
614
|
+
className: "flex justify-end gap-4"
|
|
615
|
+
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
616
|
+
type: "button",
|
|
617
|
+
onClick: function onClick() {
|
|
618
|
+
return setShowAddModal(false);
|
|
619
|
+
},
|
|
620
|
+
className: "px-4 py-2 bg-gray-300 text-gray-700 rounded-md hover:bg-gray-400 transition-colors"
|
|
621
|
+
}, "Cancel"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
622
|
+
type: "submit",
|
|
623
|
+
disabled: addLoading,
|
|
624
|
+
className: "px-4 py-2 bg-orange-600 text-white rounded-md hover:bg-orange-700 transition-colors disabled:opacity-50"
|
|
625
|
+
}, addLoading ? 'Adding...' : 'Add Invoice'))))), editInvoiceId && /*#__PURE__*/_react["default"].createElement("div", {
|
|
626
|
+
className: "fixed inset-0 flex items-center justify-center bg-black bg-opacity-50 z-50"
|
|
627
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
628
|
+
className: "bg-white rounded-lg p-6 w-full max-w-4xl max-h-[90vh] overflow-y-auto"
|
|
629
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
630
|
+
className: "flex justify-between items-center mb-4"
|
|
631
|
+
}, /*#__PURE__*/_react["default"].createElement("h2", {
|
|
632
|
+
className: "text-xl font-bold"
|
|
633
|
+
}, "Edit Invoice"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
634
|
+
onClick: function onClick() {
|
|
635
|
+
return setEditInvoiceId(null);
|
|
636
|
+
},
|
|
637
|
+
className: "text-gray-500 hover:text-gray-700"
|
|
638
|
+
}, "\u2715")), editForm && /*#__PURE__*/_react["default"].createElement("form", {
|
|
639
|
+
onSubmit: handleEditSubmit,
|
|
640
|
+
className: "space-y-4"
|
|
641
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
642
|
+
className: "grid grid-cols-1 md:grid-cols-2 gap-4"
|
|
643
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
644
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
645
|
+
}, "Invoice Number"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
646
|
+
name: "invoiceNumber",
|
|
647
|
+
value: editForm.invoiceNumber,
|
|
648
|
+
onChange: handleEditFormChange,
|
|
649
|
+
required: true,
|
|
650
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
651
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
652
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
653
|
+
}, "Date of Issue"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
654
|
+
name: "dateOfIssue",
|
|
655
|
+
type: "date",
|
|
656
|
+
value: editForm.dateOfIssue,
|
|
657
|
+
onChange: handleEditFormChange,
|
|
658
|
+
required: true,
|
|
659
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
660
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
661
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
662
|
+
}, "Payment Status"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
663
|
+
name: "paymentStatus",
|
|
664
|
+
value: editForm.paymentStatus,
|
|
665
|
+
onChange: handleEditFormChange,
|
|
666
|
+
required: true,
|
|
667
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
668
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
669
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
670
|
+
}, "Customer Name"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
671
|
+
name: "customerInfo.name",
|
|
672
|
+
value: editForm.customerInfo.name,
|
|
673
|
+
onChange: handleEditFormChange,
|
|
674
|
+
required: true,
|
|
675
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
676
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
677
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
678
|
+
}, "Customer Email"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
679
|
+
name: "customerInfo.email",
|
|
680
|
+
value: editForm.customerInfo.email,
|
|
681
|
+
onChange: handleEditFormChange,
|
|
682
|
+
required: true,
|
|
683
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
684
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
685
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
686
|
+
}, "Customer Phone"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
687
|
+
name: "customerInfo.phoneNumber",
|
|
688
|
+
value: editForm.customerInfo.phoneNumber,
|
|
689
|
+
onChange: handleEditFormChange,
|
|
690
|
+
required: true,
|
|
691
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
692
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
693
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
694
|
+
}, "Customer ID"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
695
|
+
name: "customerInfo.customerId",
|
|
696
|
+
value: editForm.customerInfo.customerId,
|
|
697
|
+
onChange: handleEditFormChange,
|
|
698
|
+
required: true,
|
|
699
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
700
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
701
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
702
|
+
}, "Service Title"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
703
|
+
name: "serviceSection.serviceTitle",
|
|
704
|
+
value: editForm.serviceSection.serviceTitle,
|
|
705
|
+
onChange: handleEditFormChange,
|
|
706
|
+
required: true,
|
|
707
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
708
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
709
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
710
|
+
}, "Provider Name"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
711
|
+
name: "serviceSection.providerName",
|
|
712
|
+
value: editForm.serviceSection.providerName,
|
|
713
|
+
onChange: handleEditFormChange,
|
|
714
|
+
required: true,
|
|
715
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
716
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
717
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
718
|
+
}, "Duration"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
719
|
+
name: "serviceSection.duration",
|
|
720
|
+
value: editForm.serviceSection.duration,
|
|
721
|
+
onChange: handleEditFormChange,
|
|
722
|
+
required: true,
|
|
723
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
724
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
725
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
726
|
+
}, "Schedule"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
727
|
+
name: "serviceSection.schedule",
|
|
728
|
+
value: editForm.serviceSection.schedule,
|
|
729
|
+
onChange: handleEditFormChange,
|
|
730
|
+
required: true,
|
|
731
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
732
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
733
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
734
|
+
}, "Delivery Mode"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
735
|
+
name: "serviceSection.deliveryMode",
|
|
736
|
+
value: editForm.serviceSection.deliveryMode,
|
|
737
|
+
onChange: handleEditFormChange,
|
|
738
|
+
required: true,
|
|
739
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
740
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
741
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
742
|
+
}, "Base Amount"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
743
|
+
name: "paymentSection.baseAmount",
|
|
744
|
+
type: "number",
|
|
745
|
+
value: editForm.paymentSection.baseAmount,
|
|
746
|
+
onChange: handleEditFormChange,
|
|
747
|
+
required: true,
|
|
748
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
749
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
750
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
751
|
+
}, "Tax"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
752
|
+
name: "paymentSection.tax",
|
|
753
|
+
type: "number",
|
|
754
|
+
value: editForm.paymentSection.tax,
|
|
755
|
+
onChange: handleEditFormChange,
|
|
756
|
+
required: true,
|
|
757
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
758
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
759
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
760
|
+
}, "Discount"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
761
|
+
name: "paymentSection.discount",
|
|
762
|
+
type: "number",
|
|
763
|
+
value: editForm.paymentSection.discount,
|
|
764
|
+
onChange: handleEditFormChange,
|
|
765
|
+
required: true,
|
|
766
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
767
|
+
})), /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("label", {
|
|
768
|
+
className: "block text-sm font-medium text-gray-700 mb-1"
|
|
769
|
+
}, "Total Amount"), /*#__PURE__*/_react["default"].createElement("input", {
|
|
770
|
+
name: "paymentSection.totalAmount",
|
|
771
|
+
type: "number",
|
|
772
|
+
value: editForm.paymentSection.totalAmount,
|
|
773
|
+
onChange: handleEditFormChange,
|
|
774
|
+
required: true,
|
|
775
|
+
className: "w-full px-3 py-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500"
|
|
776
|
+
}))), editError && /*#__PURE__*/_react["default"].createElement("div", {
|
|
777
|
+
className: "text-red-500 text-sm"
|
|
778
|
+
}, editError), /*#__PURE__*/_react["default"].createElement("div", {
|
|
779
|
+
className: "flex justify-end gap-4"
|
|
780
|
+
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
781
|
+
type: "button",
|
|
782
|
+
onClick: function onClick() {
|
|
783
|
+
return setEditInvoiceId(null);
|
|
784
|
+
},
|
|
785
|
+
className: "px-4 py-2 bg-gray-300 text-gray-700 rounded-md hover:bg-gray-400 transition-colors"
|
|
786
|
+
}, "Cancel"), /*#__PURE__*/_react["default"].createElement("button", {
|
|
787
|
+
type: "submit",
|
|
788
|
+
disabled: editLoading,
|
|
789
|
+
className: "px-4 py-2 bg-orange-600 text-white rounded-md hover:bg-orange-700 transition-colors disabled:opacity-50"
|
|
790
|
+
}, editLoading ? 'Saving...' : 'Save'))))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
791
|
+
className: "bg-white rounded-lg shadow"
|
|
792
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
793
|
+
className: "p-6"
|
|
794
|
+
}, /*#__PURE__*/_react["default"].createElement("h3", {
|
|
795
|
+
className: "text-lg font-semibold mb-4"
|
|
796
|
+
}, "Available Invoices"), invoices.length === 0 ? /*#__PURE__*/_react["default"].createElement("div", {
|
|
797
|
+
className: "text-center py-8 text-gray-500"
|
|
798
|
+
}, /*#__PURE__*/_react["default"].createElement("p", null, "No invoices available yet"), /*#__PURE__*/_react["default"].createElement("p", {
|
|
799
|
+
className: "text-sm"
|
|
800
|
+
}, "Invoices will appear here when generated")) : /*#__PURE__*/_react["default"].createElement("div", {
|
|
801
|
+
className: "space-y-4"
|
|
802
|
+
}, invoices.map(function (invoice) {
|
|
803
|
+
return /*#__PURE__*/_react["default"].createElement("div", {
|
|
804
|
+
key: invoice._id,
|
|
805
|
+
className: "border p-4 relative cursor-pointer hover:shadow-lg transition-shadow rounded-lg",
|
|
806
|
+
onClick: function onClick(e) {
|
|
807
|
+
if (e.target.closest('button')) return;
|
|
808
|
+
setDetailInvoice(invoice);
|
|
809
|
+
}
|
|
810
|
+
}, /*#__PURE__*/_react["default"].createElement("button", {
|
|
811
|
+
className: "absolute top-3 right-3 p-2 hover:bg-gray-100 rounded-md",
|
|
812
|
+
onClick: function onClick(e) {
|
|
813
|
+
e.stopPropagation();
|
|
814
|
+
handleEditClick(invoice);
|
|
815
|
+
}
|
|
816
|
+
}, "\u270F\uFE0F"), /*#__PURE__*/_react["default"].createElement("div", {
|
|
817
|
+
className: "flex flex-col md:flex-row md:justify-between md:items-center gap-2"
|
|
818
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, /*#__PURE__*/_react["default"].createElement("div", {
|
|
819
|
+
className: "font-semibold text-lg"
|
|
820
|
+
}, invoice.invoiceNumber), /*#__PURE__*/_react["default"].createElement("div", {
|
|
821
|
+
className: "text-sm text-gray-500"
|
|
822
|
+
}, "Issued: ", invoice.dateOfIssue), /*#__PURE__*/_react["default"].createElement("div", {
|
|
823
|
+
className: "text-sm text-gray-500"
|
|
824
|
+
}, "Status: ", /*#__PURE__*/_react["default"].createElement("span", {
|
|
825
|
+
className: invoice.paymentStatus === 'Paid' ? 'text-green-600' : 'text-yellow-600'
|
|
826
|
+
}, invoice.paymentStatus))), /*#__PURE__*/_react["default"].createElement("div", {
|
|
827
|
+
className: "text-sm"
|
|
828
|
+
}, /*#__PURE__*/_react["default"].createElement("div", null, "Customer: ", invoice.customerInfo.name, " (", invoice.customerInfo.email, ")"), /*#__PURE__*/_react["default"].createElement("div", null, "Service: ", invoice.serviceSection.serviceTitle, " (", invoice.serviceSection.duration, ")"), /*#__PURE__*/_react["default"].createElement("div", null, "Provider: ", invoice.serviceSection.providerName), /*#__PURE__*/_react["default"].createElement("div", null, "Schedule: ", invoice.serviceSection.schedule), /*#__PURE__*/_react["default"].createElement("div", null, "Mode: ", invoice.serviceSection.deliveryMode)), /*#__PURE__*/_react["default"].createElement("div", {
|
|
829
|
+
className: "text-right"
|
|
830
|
+
}, /*#__PURE__*/_react["default"].createElement("div", {
|
|
831
|
+
className: "font-bold text-xl"
|
|
832
|
+
}, "\u20B9", invoice.paymentSection.totalAmount.toLocaleString()), /*#__PURE__*/_react["default"].createElement("div", {
|
|
833
|
+
className: "text-xs text-gray-400"
|
|
834
|
+
}, "Base: \u20B9", invoice.paymentSection.baseAmount.toLocaleString(), " | Tax: \u20B9", invoice.paymentSection.tax.toLocaleString(), " | Discount: \u20B9", invoice.paymentSection.discount.toLocaleString()))));
|
|
835
|
+
})))));
|
|
836
|
+
};
|
|
837
|
+
var _default = exports["default"] = PowrBaseInvoicesAdmin;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "powr-sdk-web",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.9",
|
|
4
4
|
"main": "dist/index.js",
|
|
5
5
|
|
|
6
6
|
"scripts": {
|
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
},
|
|
24
24
|
"peerDependencies": {
|
|
25
25
|
"react": "*",
|
|
26
|
-
"react-dom": "*"
|
|
26
|
+
"react-dom": "*",
|
|
27
|
+
"react-toastify": "*"
|
|
27
28
|
},
|
|
28
29
|
"dependencies": {
|
|
29
30
|
"react-hook-form": "^7.58.0",
|
|
30
31
|
"axios": "^1.7.7",
|
|
31
32
|
"react-filepond": "^7.1.2",
|
|
32
|
-
"filepond": "^4.30.4"
|
|
33
|
-
"react-toastify": "^9.1.3"
|
|
33
|
+
"filepond": "^4.30.4"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@babel/cli": "^7.24.1",
|