@appcorp/stellar-solutions-invoice-module 0.1.48 → 0.1.50

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.
@@ -1,6 +1,7 @@
1
1
  import { ProductTypeBE } from '@appcorp/stellar-solutions-product-module/base-modules/product/types';
2
2
  import { CustomerTypeBE, DISCOUNT_UNIT, INVOICE_DRAWER, InvoiceState, InvoiceTypeBE, Product, Service } from './types';
3
3
  import { TaxTypeBE } from '@appcorp/stellar-solutions-modules/global-modules/preferences/types';
4
+ import { CompanyTypeBE } from '@appcorp/stellar-solutions-company-module/base-modules/company/types';
4
5
  export declare enum INVOICE_ACTION_TYPES {
5
6
  ADD_ITEM_PRODUCT = "ADD_ITEM_PRODUCT",
6
7
  ADD_ITEM_SERVICE = "ADD_ITEM_SERVICE",
@@ -29,8 +30,10 @@ export declare enum INVOICE_ACTION_TYPES {
29
30
  SET_SKELTON_LOADING = "SET_SKELTON_LOADING",
30
31
  SET_TAX = "SET_TAX",
31
32
  SET_PRODUCTS_LIST = "SET_PRODUCTS_LIST",
33
+ SET_COMPANIES_LIST = "SET_COMPANIES_LIST",
32
34
  SET_CUSTOMER = "SET_CUSTOMER",
33
- SET_TAXES = "SET_TAXES"
35
+ SET_TAXES = "SET_TAXES",
36
+ SET_CUSTOMER_FORM = "SET_CUSTOMER_FORM"
34
37
  }
35
38
  export type InvoiceUpdateFieldAction = {
36
39
  type: INVOICE_ACTION_TYPES.SET_INPUT_FIELD;
@@ -175,10 +178,24 @@ export type InvoiceSetProductsListAction = {
175
178
  productsList: ProductTypeBE[];
176
179
  };
177
180
  };
181
+ export type InvoiceSetCompaniesListAction = {
182
+ type: INVOICE_ACTION_TYPES.SET_COMPANIES_LIST;
183
+ payload: {
184
+ companiesList: CompanyTypeBE[];
185
+ };
186
+ };
178
187
  export type InvoiceSetCustomerAction = {
179
188
  type: INVOICE_ACTION_TYPES.SET_CUSTOMER;
180
189
  payload: {
181
190
  customer: CustomerTypeBE;
191
+ customerId: string;
192
+ };
193
+ };
194
+ export type InvoiceSetCustomerFormAction = {
195
+ type: INVOICE_ACTION_TYPES.SET_CUSTOMER_FORM;
196
+ payload: {
197
+ key: keyof CustomerTypeBE;
198
+ value: string;
182
199
  };
183
200
  };
184
201
  export type InvoiceSetTaxesAction = {
@@ -187,4 +204,4 @@ export type InvoiceSetTaxesAction = {
187
204
  taxes: TaxTypeBE[];
188
205
  };
189
206
  };
190
- export type InvoiceActions = InvoiceAddItemProductAction | InvoiceAddItemServiceAction | InvoiceResetErrorAction | InvoiceDeleteItemProductAction | InvoiceDeleteItemServiceAction | InvoiceResetFormAction | InvoiceSetButtonDisableAction | InvoiceSetCurrentPageAction | InvoiceSetCustomerDataAction | InvoiceSetDiscountUnitAction | InvoiceSetErrorsAction | InvoiceSetFormLoadingAction | InvoiceSetInvoicesAction | InvoiceSetInvoiceFormAction | InvoiceSetIsInvoiceApiSuccessAction | InvoiceSetMaxPageLimitAction | InvoiceSetSearchQueryAction | InvoiceUpdateFieldAction | InvoiceToggleLoadingAction | InvoiceSetDrawerAction | InvoiceSetCountAction | InvoiceSetFormAction | InvoiceSetAfterDiscountAction | InvoiceSetTaxAction | InvoiceSetFormToRenderAction | InvoiceSetProductsListAction | InvoiceSetCustomerAction | InvoiceSetTaxesAction;
207
+ export type InvoiceActions = InvoiceAddItemProductAction | InvoiceAddItemServiceAction | InvoiceResetErrorAction | InvoiceDeleteItemProductAction | InvoiceDeleteItemServiceAction | InvoiceResetFormAction | InvoiceSetButtonDisableAction | InvoiceSetCurrentPageAction | InvoiceSetCustomerDataAction | InvoiceSetDiscountUnitAction | InvoiceSetErrorsAction | InvoiceSetFormLoadingAction | InvoiceSetInvoicesAction | InvoiceSetInvoiceFormAction | InvoiceSetIsInvoiceApiSuccessAction | InvoiceSetMaxPageLimitAction | InvoiceSetSearchQueryAction | InvoiceUpdateFieldAction | InvoiceToggleLoadingAction | InvoiceSetDrawerAction | InvoiceSetCountAction | InvoiceSetFormAction | InvoiceSetAfterDiscountAction | InvoiceSetTaxAction | InvoiceSetFormToRenderAction | InvoiceSetProductsListAction | InvoiceSetCustomerAction | InvoiceSetTaxesAction | InvoiceSetCustomerFormAction | InvoiceSetCompaniesListAction;
@@ -30,6 +30,8 @@ var INVOICE_ACTION_TYPES;
30
30
  INVOICE_ACTION_TYPES["SET_SKELTON_LOADING"] = "SET_SKELTON_LOADING";
31
31
  INVOICE_ACTION_TYPES["SET_TAX"] = "SET_TAX";
32
32
  INVOICE_ACTION_TYPES["SET_PRODUCTS_LIST"] = "SET_PRODUCTS_LIST";
33
+ INVOICE_ACTION_TYPES["SET_COMPANIES_LIST"] = "SET_COMPANIES_LIST";
33
34
  INVOICE_ACTION_TYPES["SET_CUSTOMER"] = "SET_CUSTOMER";
34
35
  INVOICE_ACTION_TYPES["SET_TAXES"] = "SET_TAXES";
36
+ INVOICE_ACTION_TYPES["SET_CUSTOMER_FORM"] = "SET_CUSTOMER_FORM";
35
37
  })(INVOICE_ACTION_TYPES || (exports.INVOICE_ACTION_TYPES = INVOICE_ACTION_TYPES = {}));
@@ -10,7 +10,7 @@ var calculateTotal = function (subtotal, taxRate, discountUnit, discount) {
10
10
  ? (subtotalValue * discountValue) / 100
11
11
  : discountValue;
12
12
  var afterDiscount = subtotalValue - discountedAmount;
13
- var tax = ((afterDiscount * parseFloat(taxRate)) / 100).toFixed(2);
13
+ var tax = taxRate ? ((afterDiscount * parseFloat(taxRate)) / 100).toFixed(2) : Number(0).toFixed(2);
14
14
  var total = (subtotalValue +
15
15
  parseFloat(tax) -
16
16
  discountedAmount).toFixed(2);
@@ -25,6 +25,7 @@ export declare const INVOICE_API_ROUTES: {
25
25
  CUSTOMER_BY_PHONE: string;
26
26
  TAXES: string;
27
27
  TAX: string;
28
+ COMPANIES: string;
28
29
  };
29
30
  export declare const tableBodyCols: ({
30
31
  componentType: VISTA_TABLE_CELL_TYPE;
@@ -38,6 +39,12 @@ export declare const tableBodyCols: ({
38
39
  componentType: VISTA_TABLE_CELL_TYPE;
39
40
  key: string[];
40
41
  expression: (text: string) => string;
42
+ } | {
43
+ componentType: VISTA_TABLE_CELL_TYPE;
44
+ key: string;
45
+ expression: (text: string, obj: {
46
+ currency: string;
47
+ }) => string;
41
48
  } | {
42
49
  componentType: VISTA_TABLE_CELL_TYPE;
43
50
  key?: undefined;
@@ -108,8 +108,8 @@ exports.staticCompanySection = (_a = {},
108
108
  order: 4,
109
109
  query: '',
110
110
  required: true,
111
- selectKey1: 'option',
112
- selectedItem: { option: 'PKR' },
111
+ selectKey1: 'code',
112
+ selectedItem: { code: '' },
113
113
  },
114
114
  // {
115
115
  // enabled: false,
@@ -128,7 +128,6 @@ exports.staticCompanySection = (_a = {},
128
128
  exports.staticCustomerSection = (_b = {},
129
129
  _b[form_schema_1.VISTA_FORM_ELEMENTS.TEXT_INPUT_V1] = [
130
130
  {
131
- className: 'col-span-2',
132
131
  disabled: false,
133
132
  enabled: true,
134
133
  error: '',
@@ -136,7 +135,7 @@ exports.staticCustomerSection = (_b = {},
136
135
  id: 'phone',
137
136
  label: 'Phone',
138
137
  order: 1,
139
- placeholder: '03** *****',
138
+ placeholder: '+92 300 0000000',
140
139
  required: true,
141
140
  type: 'text',
142
141
  value: ''
@@ -158,7 +157,7 @@ exports.staticCustomerSection = (_b = {},
158
157
  disabled: false,
159
158
  enabled: true,
160
159
  error: '',
161
- handleOnChange: function () { },
160
+ handleOnChange: function () { return void 0; },
162
161
  id: 'lastName',
163
162
  label: 'Last Name',
164
163
  order: 3,
@@ -171,11 +170,11 @@ exports.staticCustomerSection = (_b = {},
171
170
  disabled: false,
172
171
  enabled: true,
173
172
  error: '',
174
- handleOnChange: function () { },
173
+ handleOnChange: function () { return void 0; },
175
174
  id: 'email',
176
175
  label: 'Email',
177
176
  order: 7,
178
- placeholder: 'xyz@company.com',
177
+ placeholder: 'name@company.com',
179
178
  required: false,
180
179
  type: 'text',
181
180
  value: '',
@@ -184,7 +183,7 @@ exports.staticCustomerSection = (_b = {},
184
183
  disabled: false,
185
184
  enabled: true,
186
185
  error: '',
187
- handleOnChange: function () { },
186
+ handleOnChange: function () { return void 0; },
188
187
  id: 'city',
189
188
  label: 'City',
190
189
  order: 6,
@@ -197,11 +196,11 @@ exports.staticCustomerSection = (_b = {},
197
196
  disabled: false,
198
197
  enabled: true,
199
198
  error: '',
200
- handleOnChange: function () { },
199
+ handleOnChange: function () { return void 0; },
201
200
  id: 'address',
202
201
  label: 'Address',
203
202
  order: 5,
204
- placeholder: 'xyz street .....',
203
+ placeholder: '123 Street',
205
204
  required: false,
206
205
  type: 'text',
207
206
  value: '',
@@ -224,6 +223,22 @@ exports.staticCustomerSection = (_b = {},
224
223
  selectKey1: 'name',
225
224
  selectedItem: { name: '' },
226
225
  },
226
+ {
227
+ enabled: true,
228
+ handleInputOnChange: function () { return void 0; },
229
+ handleOnBlur: function () { return void 0; },
230
+ handleOnChange: function () { },
231
+ label: 'Currency',
232
+ listItems: [],
233
+ nodeQueryKey: '',
234
+ nodeSelectKey: 'currency',
235
+ order: 7,
236
+ placeholder: '',
237
+ query: '',
238
+ required: true,
239
+ selectKey1: 'code',
240
+ selectedItem: { code: '' },
241
+ },
227
242
  ],
228
243
  _b);
229
244
  exports.staticPricingSection = (_c = {},
@@ -507,6 +522,7 @@ exports.INVOICE_API_ROUTES = {
507
522
  CUSTOMER_BY_PHONE: '/api/customer/by-phone',
508
523
  TAXES: '/api/taxes',
509
524
  TAX: '/api/tax',
525
+ COMPANIES: '/api/companies'
510
526
  };
511
527
  exports.tableBodyCols = [
512
528
  {
@@ -515,21 +531,13 @@ exports.tableBodyCols = [
515
531
  },
516
532
  {
517
533
  componentType: vista_table_type_1.VISTA_TABLE_CELL_TYPE.OBJECT,
518
- key: ['company', 'name'],
519
- },
520
- {
521
- componentType: vista_table_type_1.VISTA_TABLE_CELL_TYPE.TEXT,
522
- key: 'currency',
534
+ key: ['company:customer', 'name:firstName'],
523
535
  },
524
536
  {
525
537
  componentType: vista_table_type_1.VISTA_TABLE_CELL_TYPE.MULTIPLE_TEXT_LINES,
526
538
  key: ['date', 'expiryDate'],
527
539
  expression: function (text) { return (0, util_functions_1.formatDate)(text, util_functions_1.DATE_FORMATS.LOCALE_DATE); },
528
540
  },
529
- {
530
- componentType: vista_table_type_1.VISTA_TABLE_CELL_TYPE.TEXT,
531
- key: 'note',
532
- },
533
541
  {
534
542
  componentType: vista_table_type_1.VISTA_TABLE_CELL_TYPE.TEXT,
535
543
  key: 'ref',
@@ -537,6 +545,7 @@ exports.tableBodyCols = [
537
545
  {
538
546
  componentType: vista_table_type_1.VISTA_TABLE_CELL_TYPE.TEXT,
539
547
  key: 'subTotal',
548
+ expression: function (text, obj) { return "".concat(obj.currency).concat(text); },
540
549
  },
541
550
  {
542
551
  componentType: vista_table_type_1.VISTA_TABLE_CELL_TYPE.TEXT,
@@ -549,6 +558,7 @@ exports.tableBodyCols = [
549
558
  {
550
559
  componentType: vista_table_type_1.VISTA_TABLE_CELL_TYPE.TEXT,
551
560
  key: 'total',
561
+ expression: function (text, obj) { return "".concat(obj.currency).concat(text); },
552
562
  },
553
563
  {
554
564
  componentType: vista_table_type_1.VISTA_TABLE_CELL_TYPE.TEXT,
@@ -102,27 +102,34 @@ var types_1 = require("./types");
102
102
  var validate_1 = require("./validate");
103
103
  var generate_toast_1 = require("@appcorp/app-corp-vista/utils/generate-toast");
104
104
  var calculate_subtotal_1 = require("./calculate-subtotal");
105
- var context_1 = require("@appcorp/stellar-solutions-company-module/base-modules/company/context");
106
105
  var date_fns_1 = require("date-fns");
107
106
  var calculate_total_1 = require("./calculate-total");
108
107
  var util_functions_2 = require("@react-pakistan/util-functions");
109
- var context_2 = require("@appcorp/stellar-solutions-modules/global-modules/tax/context");
108
+ var context_1 = require("@appcorp/stellar-solutions-modules/global-modules/tax/context");
109
+ var context_2 = require("@appcorp/stellar-solutions-modules/global-modules/preferences/context");
110
110
  var useInvoiceState = function () {
111
111
  var _a = (0, react_1.useReducer)(reducer_1.invoiceReducer, reducer_1.initialInvoiceState), state = _a[0], dispatch = _a[1];
112
- var companies = (0, context_1.useCompanyStateContext)().companies;
113
- var taxes = (0, context_2.useTaxStateContext)().taxes;
112
+ var taxes = (0, context_1.useTaxStateContext)().taxes;
113
+ var currencies = (0, context_2.usePreferenceStateContext)().currencies;
114
114
  var debouncedQuery = (0, util_functions_1.useDebounce)(state.searchQuery, 800);
115
115
  var debouncedProductList = (0, util_functions_1.useDebounce)(state.productQuery, 800);
116
- var debouncedCustomerList = (0, util_functions_1.useDebounce)(state.phone, 800);
116
+ var debouncedCustomer = (0, util_functions_1.useDebounce)(state.phone, 800);
117
117
  var debouncedTaxList = (0, util_functions_1.useDebounce)(state.taxQuery, 800);
118
+ var debouncedCompanyList = (0, util_functions_1.useDebounce)(state.companyQuery, 800);
118
119
  var defaultTax = (0, react_1.useMemo)(function () {
119
120
  return taxes.filter(function (_a) {
120
121
  var isDefault = _a.isDefault;
121
122
  return isDefault;
122
123
  })[0];
123
124
  }, [taxes]);
125
+ var defaultCurrency = (0, react_1.useMemo)(function () {
126
+ return currencies.filter(function (_a) {
127
+ var isDefault = _a.isDefault;
128
+ return isDefault;
129
+ })[0];
130
+ }, [currencies]);
124
131
  var listParams = {
125
- category: types_1.QUOTE_INVOICE.INVOICE,
132
+ category: types_1.QUOTE_INVOICE_CATEGORY.INVOICE,
126
133
  currentPage: state.currentPage,
127
134
  pageLimit: state.pageLimit,
128
135
  searchQuery: state.searchQuery,
@@ -159,6 +166,7 @@ var useInvoiceState = function () {
159
166
  invoiceStatus: state.invoiceStatus,
160
167
  mode: state.mode,
161
168
  note: state.note.trim(),
169
+ phone: state.phone,
162
170
  products: state.products,
163
171
  quoteStatus: state.quoteStatus,
164
172
  ref: state.ref,
@@ -197,7 +205,7 @@ var useInvoiceState = function () {
197
205
  id: state.id,
198
206
  };
199
207
  var byIdCallback = function (_a) {
200
- var _b, _c;
208
+ var _b, _c, _d, _e, _f, _g, _h;
201
209
  var data = _a.data, error = _a.error;
202
210
  if (error) {
203
211
  (0, generate_toast_1.generateToast)({
@@ -211,27 +219,37 @@ var useInvoiceState = function () {
211
219
  return (__assign(__assign({}, item), { rowTotal: Number(item.quantity) * Number(item.price) }));
212
220
  });
213
221
  var updatedProducts = __spreadArray([], data.products, true).map(function (item) { return (__assign(__assign({}, item), { price: item.product.salePrice, id: item.productId, quantity: item.quantity, rowTotal: parseFloat(item.product.salePrice) * parseInt(item.quantity) })); });
214
- var updatedData = __assign(__assign({}, data), { mode: 'Edit', companyId: data.company.id, services: __spreadArray([], updatedServices, true).filter(function (item) { return item.name; }), products: __spreadArray([], updatedProducts, true).filter(function (item) { return item.id; }) });
215
- if ((_b = updatedData === null || updatedData === void 0 ? void 0 : updatedData.company) === null || _b === void 0 ? void 0 : _b.name) {
222
+ var updatedData = __assign(__assign(__assign(__assign({}, data), { mode: 'Edit', companyId: ((_b = data === null || data === void 0 ? void 0 : data.company) === null || _b === void 0 ? void 0 : _b.id) || '', customerId: ((_c = data === null || data === void 0 ? void 0 : data.customer) === null || _c === void 0 ? void 0 : _c.id) || '' }), (((_d = data === null || data === void 0 ? void 0 : data.customer) === null || _d === void 0 ? void 0 : _d.id) && {
223
+ customer: __assign({}, data.customer),
224
+ })), { services: __spreadArray([], updatedServices, true).filter(function (item) { return item.name; }), products: __spreadArray([], updatedProducts, true).filter(function (item) { return item.id; }) });
225
+ if ((_e = updatedData === null || updatedData === void 0 ? void 0 : updatedData.company) === null || _e === void 0 ? void 0 : _e.name) {
216
226
  dispatch({
217
- type: actions_1.INVOICE_ACTION_TYPES.SET_FORM_TO_RENDER,
218
- payload: { formToRender: 'company' },
227
+ type: actions_1.INVOICE_ACTION_TYPES.SET_DRAWER,
228
+ payload: { drawer: types_1.INVOICE_DRAWER.INVOICE_COMPANY_FORM_DRAWER },
219
229
  });
220
230
  }
221
- if ((_c = updatedData === null || updatedData === void 0 ? void 0 : updatedData.customer) === null || _c === void 0 ? void 0 : _c.name) {
231
+ if ((_f = updatedData === null || updatedData === void 0 ? void 0 : updatedData.customer) === null || _f === void 0 ? void 0 : _f.firstName) {
222
232
  dispatch({
223
- type: actions_1.INVOICE_ACTION_TYPES.SET_FORM_TO_RENDER,
224
- payload: { formToRender: 'customer' },
233
+ type: actions_1.INVOICE_ACTION_TYPES.SET_DRAWER,
234
+ payload: { drawer: types_1.INVOICE_DRAWER.INVOICE_CUSTOMER_FORM_DRAWER },
225
235
  });
226
236
  }
227
237
  dispatch({
228
238
  type: actions_1.INVOICE_ACTION_TYPES.SET_FORM,
229
239
  payload: { form: updatedData },
230
240
  });
231
- dispatch({
232
- type: actions_1.INVOICE_ACTION_TYPES.SET_DRAWER,
233
- payload: { drawer: types_1.INVOICE_DRAWER.INVOICE_COMPANY_FORM_DRAWER },
234
- });
241
+ if ((_g = updatedData === null || updatedData === void 0 ? void 0 : updatedData.company) === null || _g === void 0 ? void 0 : _g.name) {
242
+ dispatch({
243
+ type: actions_1.INVOICE_ACTION_TYPES.SET_DRAWER,
244
+ payload: { drawer: types_1.INVOICE_DRAWER.INVOICE_COMPANY_FORM_DRAWER },
245
+ });
246
+ }
247
+ if ((_h = updatedData === null || updatedData === void 0 ? void 0 : updatedData.customer) === null || _h === void 0 ? void 0 : _h.firstName) {
248
+ dispatch({
249
+ type: actions_1.INVOICE_ACTION_TYPES.SET_DRAWER,
250
+ payload: { drawer: types_1.INVOICE_DRAWER.INVOICE_CUSTOMER_FORM_DRAWER },
251
+ });
252
+ }
235
253
  }
236
254
  };
237
255
  var deleteParams = {
@@ -307,7 +325,7 @@ var useInvoiceState = function () {
307
325
  }); })();
308
326
  }, [debouncedProductList]);
309
327
  (0, react_1.useEffect)(function () {
310
- if (state.formToRender === 'customer' && debouncedCustomerList) {
328
+ if (state.drawer === types_1.INVOICE_DRAWER.INVOICE_CUSTOMER_FORM_DRAWER && debouncedCustomer) {
311
329
  (function () { return __awaiter(void 0, void 0, void 0, function () {
312
330
  var data;
313
331
  return __generator(this, function (_a) {
@@ -316,7 +334,7 @@ var useInvoiceState = function () {
316
334
  url: constants_1.INVOICE_API_ROUTES.CUSTOMER_BY_PHONE,
317
335
  method: util_functions_1.API_METHODS.POST,
318
336
  body: JSON.stringify({
319
- phone: debouncedCustomerList,
337
+ phone: debouncedCustomer,
320
338
  }),
321
339
  })];
322
340
  case 1:
@@ -324,7 +342,7 @@ var useInvoiceState = function () {
324
342
  if (data) {
325
343
  dispatch({
326
344
  type: actions_1.INVOICE_ACTION_TYPES.SET_CUSTOMER,
327
- payload: { customer: __assign({}, data.data) },
345
+ payload: { customer: __assign({}, data), customerId: data.id },
328
346
  });
329
347
  }
330
348
  return [2 /*return*/];
@@ -332,13 +350,36 @@ var useInvoiceState = function () {
332
350
  });
333
351
  }); })();
334
352
  }
335
- else {
336
- dispatch({
337
- type: actions_1.INVOICE_ACTION_TYPES.SET_CUSTOMER,
338
- payload: { customer: { phone: '', firstName: '', lastName: '', email: '', address: '', city: '', country: '', createdAt: '', updatedAt: '', id: '', invoices: [] } },
339
- });
353
+ }, [debouncedCustomer, state.drawer]);
354
+ (0, react_1.useEffect)(function () {
355
+ if (state.drawer === types_1.INVOICE_DRAWER.INVOICE_COMPANY_FORM_DRAWER && debouncedCompanyList) {
356
+ (function () { return __awaiter(void 0, void 0, void 0, function () {
357
+ var data;
358
+ return __generator(this, function (_a) {
359
+ switch (_a.label) {
360
+ case 0: return [4 /*yield*/, (0, util_functions_1.fetchData)({
361
+ url: constants_1.INVOICE_API_ROUTES.COMPANIES,
362
+ method: util_functions_1.API_METHODS.POST,
363
+ body: JSON.stringify({
364
+ searchQuery: debouncedCompanyList,
365
+ pageLimit: 100,
366
+ currentPage: 1,
367
+ }),
368
+ })];
369
+ case 1:
370
+ data = (_a.sent()).data;
371
+ if (data === null || data === void 0 ? void 0 : data.items) {
372
+ dispatch({
373
+ type: actions_1.INVOICE_ACTION_TYPES.SET_COMPANIES_LIST,
374
+ payload: { companiesList: data.items },
375
+ });
376
+ }
377
+ return [2 /*return*/];
378
+ }
379
+ });
380
+ }); })();
340
381
  }
341
- }, [debouncedCustomerList, state.formToRender]);
382
+ }, [debouncedCompanyList, state.drawer]);
342
383
  (0, react_1.useEffect)(function () {
343
384
  (function () { return __awaiter(void 0, void 0, void 0, function () {
344
385
  var data;
@@ -429,20 +470,12 @@ var useInvoiceState = function () {
429
470
  type: actions_1.INVOICE_ACTION_TYPES.SET_DRAWER,
430
471
  payload: { drawer: types_1.INVOICE_DRAWER.INVOICE_COMPANY_FORM_DRAWER },
431
472
  });
432
- dispatch({
433
- type: actions_1.INVOICE_ACTION_TYPES.SET_FORM_TO_RENDER,
434
- payload: { formToRender: 'company' },
435
- });
436
473
  }
437
474
  if (text === 'customer') {
438
475
  dispatch({
439
476
  type: actions_1.INVOICE_ACTION_TYPES.SET_DRAWER,
440
477
  payload: { drawer: types_1.INVOICE_DRAWER.INVOICE_CUSTOMER_FORM_DRAWER },
441
478
  });
442
- dispatch({
443
- type: actions_1.INVOICE_ACTION_TYPES.SET_FORM_TO_RENDER,
444
- payload: { formToRender: 'customer' },
445
- });
446
479
  }
447
480
  };
448
481
  var handleEdit = function (id) {
@@ -461,11 +494,11 @@ var useInvoiceState = function () {
461
494
  payload: { disableSaveButton: true },
462
495
  });
463
496
  (0, util_functions_1.validateForm)({
464
- params: updateParams,
497
+ params: __assign(__assign({}, updateParams), { currency: updateParams.currency || defaultCurrency.code, taxRate: updateParams.taxRate || defaultTax.taxRate }),
465
498
  schema: validate_1.formValidation,
466
499
  successCallback: function () {
467
500
  updateFetchNow(undefined, {
468
- body: JSON.stringify(__assign(__assign({}, updateParams), { products: updateParams.products.filter(function (item) { return item.id; }), services: updateParams.services.filter(function (item) { return item.name; }) })),
501
+ body: JSON.stringify(__assign(__assign({}, updateParams), { products: updateParams.products.filter(function (item) { return item.id; }), services: updateParams.services.filter(function (item) { return item.name; }), currency: updateParams.currency || defaultCurrency.code, taxRate: updateParams.taxRate || defaultTax.taxRate })),
469
502
  });
470
503
  },
471
504
  errorCallback: function (e) {
@@ -475,20 +508,26 @@ var useInvoiceState = function () {
475
508
  });
476
509
  },
477
510
  });
478
- }, [updateFetchNow, updateParams]);
511
+ }, [updateFetchNow, updateParams, defaultCurrency, defaultTax]);
479
512
  var handleChange = (0, react_1.useCallback)(function (key, value) {
480
- console.log({ key: key, value: value });
481
- // if (key === 'taxRate') {
482
- // dispatch({
483
- // type: INVOICE_ACTION_TYPES.SET_INPUT_FIELD,
484
- // payload: {
485
- // key: key as keyof InvoiceTypeBE,
486
- // value: value,
487
- // },
488
- // });
489
- // }
513
+ var _a;
514
+ if (key === 'phone') {
515
+ var formattedNumber = (_a = (0, util_functions_1.formatPhone)(value)) === null || _a === void 0 ? void 0 : _a.international;
516
+ dispatch({
517
+ type: actions_1.INVOICE_ACTION_TYPES.SET_CUSTOMER_FORM,
518
+ payload: { key: key, value: formattedNumber || value },
519
+ });
520
+ return;
521
+ }
522
+ if (key === 'companyQuery') {
523
+ dispatch({
524
+ type: actions_1.INVOICE_ACTION_TYPES.SET_INPUT_FIELD,
525
+ payload: { key: key, value: value },
526
+ });
527
+ return;
528
+ }
490
529
  dispatch({
491
- type: actions_1.INVOICE_ACTION_TYPES.SET_INPUT_FIELD,
530
+ type: actions_1.INVOICE_ACTION_TYPES.SET_CUSTOMER_FORM,
492
531
  payload: { key: key, value: String(value) },
493
532
  });
494
533
  dispatch({
@@ -587,47 +626,26 @@ var useInvoiceState = function () {
587
626
  type: actions_1.INVOICE_ACTION_TYPES.SET_DISCOUNT_UNIT,
588
627
  payload: { discountUnit: v },
589
628
  });
590
- // if (e.target.value === 'Percentage(%)') {
591
- // invoiceDispatch({
592
- // type: INVOICE_ACTION_TYPES.SET_DISCOUNT_UNIT,
593
- // payload: '%',
594
- // });
595
- // } else {
596
- // invoiceDispatch({
597
- // type: INVOICE_ACTION_TYPES.SET_DISCOUNT_UNIT,
598
- // payload: '',
599
- // });
600
- // }
601
629
  };
602
- // const handleSelectInputChange = useCallback(async (key: string, value: string) => {
603
- // const response = await fetch(INVOICE_CATEGORY_API_ROUTES.INVOICE_CATEGORIES, {
604
- // method: API_METHODS.POST,
605
- // body: JSON.stringify({
606
- // searchQuery: debouncedList,
607
- // pageLimit: 1000,
608
- // currentPage: 1,
609
- // }),
610
- // });
611
- // const result = await response.json();
612
- // dispatch({
613
- // type: INVOICE_ACTION_TYPES.SET_INVOICE_CATEGORIES,
614
- // payload: { productCategories: result as ProductCategoryBE[] },
615
- // });
616
- // dispatch({
617
- // type: INVOICE_ACTION_TYPES.SET_INVOICE_QUERY,
618
- // payload: { productCategoryQuery: value },
619
- // });
620
- // }, []);
621
630
  var handleSelectChange = function (key, value) {
622
631
  var val = __assign({}, value);
623
- console.log('seleect', key, value);
624
632
  if (key === 'taxRate') {
625
633
  dispatch({
626
634
  type: actions_1.INVOICE_ACTION_TYPES.SET_INPUT_FIELD,
627
635
  payload: {
628
636
  key: key,
629
- value: val[key],
630
- }
637
+ value: val.taxRate,
638
+ },
639
+ });
640
+ return;
641
+ }
642
+ if (key === 'country') {
643
+ dispatch({
644
+ type: actions_1.INVOICE_ACTION_TYPES.SET_CUSTOMER_FORM,
645
+ payload: {
646
+ key: key,
647
+ value: val.name,
648
+ },
631
649
  });
632
650
  return;
633
651
  }
@@ -636,8 +654,8 @@ var useInvoiceState = function () {
636
654
  type: actions_1.INVOICE_ACTION_TYPES.SET_INPUT_FIELD,
637
655
  payload: {
638
656
  key: key,
639
- value: val['option'],
640
- }
657
+ value: val.code,
658
+ },
641
659
  });
642
660
  return;
643
661
  }
@@ -711,39 +729,46 @@ var useInvoiceState = function () {
711
729
  var comboboxElements = (_b = elements[form_schema_1.VISTA_FORM_ELEMENTS.COMBOBOX_V1]) === null || _b === void 0 ? void 0 : _b.sort(function (a, b) { return a.order - b.order; });
712
730
  if (comboboxElements) {
713
731
  comboboxElements[0].selectedItem = { id: state.companyId };
714
- comboboxElements[0].listItems = companies;
732
+ comboboxElements[0].listItems = state.companiesList;
715
733
  comboboxElements[0].query = state.companyQuery;
716
734
  comboboxElements[0].handleOnChange = handleSelectChange;
717
735
  comboboxElements[0].handleInputOnChange = handleChange;
718
736
  comboboxElements[0].handleOnBlur = handleChange;
719
- comboboxElements[1].selectedItem = { option: state.currency };
720
- comboboxElements[1].listItems = [];
737
+ comboboxElements[1].selectedItem = { code: state.currency || (defaultCurrency === null || defaultCurrency === void 0 ? void 0 : defaultCurrency.code) };
738
+ comboboxElements[1].listItems = currencies;
739
+ comboboxElements[1].handleOnChange = handleSelectChange;
740
+ comboboxElements[1].handleInputOnChange = handleChange;
721
741
  }
722
742
  return elements;
723
- }, [state, handleChange, companies]);
743
+ }, [state, handleChange, currencies, defaultCurrency]);
724
744
  var dynamicCustomerFormElements = (0, react_1.useMemo)(function () {
725
- var _a, _b;
745
+ var _a, _b, _c;
726
746
  var elements = __assign({}, constants_1.staticCustomerSection);
727
747
  var textInputElements = (_a = elements[form_schema_1.VISTA_FORM_ELEMENTS.TEXT_INPUT_V1]) === null || _a === void 0 ? void 0 : _a.sort(function (a, b) { return a.order - b.order; });
728
748
  if (textInputElements) {
729
749
  textInputElements.forEach(function (_a, i) {
750
+ var _b;
730
751
  var id = _a.id;
731
752
  textInputElements[i].error = state.errors[id];
732
753
  textInputElements[i].handleOnChange = handleChange;
733
- textInputElements[i].value = state[id];
754
+ textInputElements[i].value = (_b = state === null || state === void 0 ? void 0 : state.customer) === null || _b === void 0 ? void 0 : _b[id];
734
755
  });
735
756
  }
736
757
  var comboboxElements = (_b = elements[form_schema_1.VISTA_FORM_ELEMENTS.COMBOBOX_V1]) === null || _b === void 0 ? void 0 : _b.sort(function (a, b) { return a.order - b.order; });
737
758
  if (comboboxElements) {
738
- comboboxElements[0].selectedItem = { name: state.country };
759
+ comboboxElements[0].selectedItem = { name: (_c = state === null || state === void 0 ? void 0 : state.customer) === null || _c === void 0 ? void 0 : _c.country };
739
760
  comboboxElements[0].listItems = util_functions_2.countriesTimeZones;
740
761
  comboboxElements[0].query = state.countryQuery;
741
762
  comboboxElements[0].handleOnChange = handleSelectChange;
742
763
  comboboxElements[0].handleInputOnChange = handleChange;
743
764
  comboboxElements[0].handleOnBlur = handleChange;
765
+ comboboxElements[1].selectedItem = { code: state.currency || (defaultCurrency === null || defaultCurrency === void 0 ? void 0 : defaultCurrency.code) };
766
+ comboboxElements[1].listItems = currencies;
767
+ comboboxElements[1].handleOnChange = handleSelectChange;
768
+ comboboxElements[1].handleInputOnChange = handleChange;
744
769
  }
745
770
  return elements;
746
- }, [state, handleChange]);
771
+ }, [state, handleChange, currencies, defaultCurrency]);
747
772
  var dynamicPricingFormElements = (0, react_1.useMemo)(function () {
748
773
  var _a, _b, _c, _d, _e, _f;
749
774
  var elements = __assign({}, constants_1.staticPricingSection);
@@ -796,113 +821,6 @@ var useInvoiceState = function () {
796
821
  });
797
822
  }
798
823
  };
799
- // const dynamicServiceFormElements: VistaFormElements[] = useMemo(() => {
800
- // const elements: VistaFormElements = { ...staticServiceSection };
801
- // const servicesElements = state.services.map(() => ({
802
- // ...elements,
803
- // }));
804
- // servicesElements?.map((element, i) => {
805
- // const textInputElements: VistaTextInputV1Props[] | undefined = element[VISTA_FORM_ELEMENTS.TEXT_INPUT_V1]?.sort((a, b) => a.order - b.order);
806
- // if (textInputElements) {
807
- // textInputElements[0].value = state.services[i].name;
808
- // textInputElements[0].handleOnChange = (k, v) => handleItemChangeServices({
809
- // index: i,
810
- // key: k as keyof Service,
811
- // value: v,
812
- // });
813
- // textInputElements[1].value = state.services[i].description;
814
- // textInputElements[1].handleOnChange = (k, v) => handleItemChangeServices({
815
- // index: i,
816
- // key: k as keyof Service,
817
- // value: v,
818
- // });
819
- // textInputElements[2].value = state.services[i].quantity;
820
- // textInputElements[2].handleOnChange = (k, v) => handleItemChangeServices({
821
- // index: i,
822
- // key: k as keyof Service,
823
- // value: v,
824
- // });
825
- // textInputElements[3].value = state.services[i].price;
826
- // textInputElements[3].handleOnChange = (k, v) => handleItemChangeServices({
827
- // index: i,
828
- // key: k as keyof Service,
829
- // value: v,
830
- // });
831
- // textInputElements[4].value = state.services[i].rowTotal;
832
- // }
833
- // // state.services?.forEach((service, i) => {
834
- // // textInputElements[i].error = state.errors[id];
835
- // // textInputElements[i].error = state.errors[id];
836
- // // textInputElements[i].error = state.errors[id];
837
- // // textInputElements[i].error = state.errors[id];
838
- // // textInputElements[i].error = state.errors[id];
839
- // const buttonElements = element[VISTA_FORM_ELEMENTS.BUTTON_V1]?.sort((a, b) => a.order - b.order);
840
- // if (buttonElements) {
841
- // // state.services?.forEach((service, i) => {
842
- // buttonElements[0].handleOnClick = () => {
843
- // if (state.services.length > 1) {
844
- // const res = state.services.splice(i, 1);
845
- // dispatch({
846
- // type: INVOICE_ACTION_TYPES.DELETE_ITEM_SERVICE,
847
- // payload: { services: [...res] },
848
- // });
849
- // }
850
- // }
851
- // // });
852
- // }
853
- // });
854
- // // }
855
- // return servicesElements;
856
- // }, [state.services, handleItemChangeServices]);
857
- // const dynamicProductFormElements: VistaFormElements = useMemo(() => {
858
- // const elements: VistaFormElements = { ...staticProductSection };
859
- // const textInputElements: VistaTextInputV1Props[] | undefined = elements[VISTA_FORM_ELEMENTS.TEXT_INPUT_V1]?.sort((a, b) => a.order - b.order);
860
- // if (textInputElements) {
861
- // state.products?.forEach((product, i) => {
862
- // textInputElements[0].value = String(product.quantity);
863
- // textInputElements[0].handleOnChange = (k, v) => handleItemChangeProducts({
864
- // index: i,
865
- // key: k as keyof Product,
866
- // value: Number(v),
867
- // });
868
- // // textInputElements[i].error = state.errors[id];
869
- // textInputElements[2].value = product.rowTotal;
870
- // });
871
- // }
872
- // const comboboxElements: VistaComboboxV1Props[] | undefined = elements[VISTA_FORM_ELEMENTS.COMBOBOX_V1]?.sort((a, b) => a.order - b.order);
873
- // if (comboboxElements) {
874
- // state.products?.forEach((product, i) => {
875
- // comboboxElements[0].listItems = products;
876
- // comboboxElements[0].query = state.productQuery;
877
- // comboboxElements[0].handleInputOnChange = handleChange;
878
- // comboboxElements[0].handleOnBlur = handleChange;
879
- // comboboxElements[0].handleOnChange = (k, v: object) => {
880
- // console.log('_>>>>>>>>>', k, v);
881
- // const val = { ...v } as { id: string };
882
- // handleItemChangeProducts({
883
- // index: i,
884
- // key: k as keyof Product,
885
- // value: val.id,
886
- // });
887
- // }
888
- // })
889
- // }
890
- // const buttonElements = elements[VISTA_FORM_ELEMENTS.BUTTON_V1]?.sort((a, b) => a.order - b.order);
891
- // if (buttonElements) {
892
- // state.products?.forEach((product, i) => {
893
- // buttonElements[0].handleOnClick = () => {
894
- // if (state.products.length > 1) {
895
- // const res = state.products.splice(i, 1);
896
- // dispatch({
897
- // type: INVOICE_ACTION_TYPES.DELETE_ITEM_PRODUCT,
898
- // payload: { products: [...res] },
899
- // });
900
- // }
901
- // }
902
- // });
903
- // }
904
- // return elements;
905
- // }, [state, handleItemChangeProducts, products, handleChange]);
906
824
  var headerActions = [
907
825
  {
908
826
  enabled: true,
@@ -914,7 +832,7 @@ var useInvoiceState = function () {
914
832
  enabled: true,
915
833
  handleOnClick: function () { return handleCreate('customer'); },
916
834
  label: 'Invoice for Customer',
917
- order: 1,
835
+ order: 2,
918
836
  },
919
837
  ];
920
838
  var rowActions = [
@@ -931,16 +849,9 @@ var useInvoiceState = function () {
931
849
  order: 2,
932
850
  },
933
851
  ];
934
- return __assign(__assign({}, state), { byIdError: byIdError, byIdLoading: byIdLoading, clearSearch: clearSearch, closeDrawer: closeDrawer, deleteError: deleteError, deleteLoading: deleteLoading, dispatch: dispatch, dynamicCompanyFormElements: dynamicCompanyFormElements, dynamicPricingFormElements: dynamicPricingFormElements,
935
- // dynamicProductFormElements,
936
- // dynamicServiceFormElements,
937
- dynamicCustomerFormElements: dynamicCustomerFormElements, handleChange: handleChange, handleNextClick: handleNextClick, handlePageLimit: handlePageLimit, handlePreviousClick: handlePreviousClick, handleSubmit: handleSubmit,
938
- // handleUploadImage,
939
- headerActions: headerActions, listError: listError, listFetchNow: listFetchNow, listLoading: listLoading, rowActions: rowActions, searchOnChange: searchOnChange, updateError: updateError, updateLoading: updateLoading, handleAddItemService: handleAddItemService, handleAddItemProduct: handleAddItemProduct, handleItemChangeServices: handleItemChangeServices, handleDeleteServiceRow: handleDeleteServiceRow, handleItemChangeProducts: handleItemChangeProducts, handleDeleteProductRow: handleDeleteProductRow });
852
+ return __assign(__assign({}, state), { byIdError: byIdError, byIdLoading: byIdLoading, clearSearch: clearSearch, closeDrawer: closeDrawer, deleteError: deleteError, deleteLoading: deleteLoading, dispatch: dispatch, dynamicCompanyFormElements: dynamicCompanyFormElements, dynamicCustomerFormElements: dynamicCustomerFormElements, dynamicPricingFormElements: dynamicPricingFormElements, handleAddItemProduct: handleAddItemProduct, handleAddItemService: handleAddItemService, handleChange: handleChange, handleDeleteProductRow: handleDeleteProductRow, handleDeleteServiceRow: handleDeleteServiceRow, handleItemChangeProducts: handleItemChangeProducts, handleItemChangeServices: handleItemChangeServices, handleNextClick: handleNextClick, handlePageLimit: handlePageLimit, handlePreviousClick: handlePreviousClick, handleSubmit: handleSubmit, headerActions: headerActions, listError: listError, listFetchNow: listFetchNow, listLoading: listLoading, rowActions: rowActions, searchOnChange: searchOnChange, updateError: updateError, updateLoading: updateLoading });
940
853
  };
941
- exports.InvoiceStateContext = (0, react_1.createContext)(__assign(__assign({}, reducer_1.initialInvoiceState), { byIdError: undefined, byIdLoading: false, clearSearch: function () { return void 0; }, closeDrawer: function () { return void 0; }, deleteError: undefined, deleteLoading: false, dispatch: function () { return void 0; }, dynamicCompanyFormElements: {}, dynamicPricingFormElements: {}, dynamicCustomerFormElements: {}, handleChange: function () { return void 0; }, handleNextClick: function () { return void 0; }, handlePageLimit: function () { return void 0; }, handlePreviousClick: function () { return void 0; }, handleSubmit: function () { return void 0; },
942
- // handleUploadImage: () => void 0,
943
- headerActions: [], listError: undefined, listFetchNow: function () { return void 0; }, listLoading: false, rowActions: [], searchOnChange: function () { return void 0; }, updateError: undefined, updateLoading: false, handleAddItemService: function () { return void 0; }, handleAddItemProduct: function () { return void 0; }, handleItemChangeServices: function () { return void 0; }, handleDeleteServiceRow: function () { return void 0; }, handleItemChangeProducts: function () { return void 0; }, handleDeleteProductRow: function () { return void 0; } }));
854
+ exports.InvoiceStateContext = (0, react_1.createContext)(__assign(__assign({}, reducer_1.initialInvoiceState), { byIdError: undefined, byIdLoading: false, clearSearch: function () { return void 0; }, closeDrawer: function () { return void 0; }, deleteError: undefined, deleteLoading: false, dispatch: function () { return void 0; }, dynamicCompanyFormElements: {}, dynamicCustomerFormElements: {}, dynamicPricingFormElements: {}, handleAddItemProduct: function () { return void 0; }, handleAddItemService: function () { return void 0; }, handleChange: function () { return void 0; }, handleDeleteProductRow: function () { return void 0; }, handleDeleteServiceRow: function () { return void 0; }, handleItemChangeProducts: function () { return void 0; }, handleItemChangeServices: function () { return void 0; }, handleNextClick: function () { return void 0; }, handlePageLimit: function () { return void 0; }, handlePreviousClick: function () { return void 0; }, handleSubmit: function () { return void 0; }, headerActions: [], listError: undefined, listFetchNow: function () { return void 0; }, listLoading: false, rowActions: [], searchOnChange: function () { return void 0; }, updateError: undefined, updateLoading: false }));
944
855
  var InvoiceStateContextProvider = function (_a) {
945
856
  var children = _a.children;
946
857
  var state = useInvoiceState();
@@ -12,11 +12,12 @@ var services_form_section_1 = require("./services-form-section");
12
12
  var company_form_section_1 = require("./company-form-section");
13
13
  var context_1 = require("./context");
14
14
  var customer_form_section_1 = require("./customer-form-section");
15
+ var types_1 = require("./types");
15
16
  var InvoiceForm = function () {
16
- var formToRender = (0, context_1.useInvoiceStateContext)().formToRender;
17
+ var drawer = (0, context_1.useInvoiceStateContext)().drawer;
17
18
  return (react_1.default.createElement("div", { className: "flex flex-col gap-8" },
18
- formToRender === 'customer' && (react_1.default.createElement(customer_form_section_1.CustomerSection, null)),
19
- formToRender === 'company' && (react_1.default.createElement(company_form_section_1.CompanySection, null)),
19
+ drawer === types_1.INVOICE_DRAWER.INVOICE_CUSTOMER_FORM_DRAWER && (react_1.default.createElement(customer_form_section_1.CustomerSection, null)),
20
+ drawer === types_1.INVOICE_DRAWER.INVOICE_COMPANY_FORM_DRAWER && (react_1.default.createElement(company_form_section_1.CompanySection, null)),
20
21
  react_1.default.createElement(services_form_section_1.ServicesSection, null),
21
22
  react_1.default.createElement(products_form_section_1.ProductsSection, null),
22
23
  react_1.default.createElement(add_service_product_section_1.AddServiceProductSection, null),
@@ -14,9 +14,7 @@ var constants_1 = require("./constants");
14
14
  var drawer_1 = require("./drawer");
15
15
  var generate_toast_1 = require("@appcorp/app-corp-vista/utils/generate-toast");
16
16
  var InvoicePage = function () {
17
- var _a = (0, context_1.useInvoiceStateContext)(), count = _a.count, currentPage = _a.currentPage, pageLimit = _a.pageLimit, handleNextClick = _a.handleNextClick, handlePreviousClick = _a.handlePreviousClick,
18
- // toggleDrawerOpen,
19
- headerActions = _a.headerActions, handlePageLimit = _a.handlePageLimit, searchQuery = _a.searchQuery, searchOnChange = _a.searchOnChange, rowActions = _a.rowActions, invoices = _a.invoices, listLoading = _a.listLoading;
17
+ var _a = (0, context_1.useInvoiceStateContext)(), count = _a.count, currentPage = _a.currentPage, pageLimit = _a.pageLimit, handleNextClick = _a.handleNextClick, handlePreviousClick = _a.handlePreviousClick, headerActions = _a.headerActions, handlePageLimit = _a.handlePageLimit, searchQuery = _a.searchQuery, searchOnChange = _a.searchOnChange, rowActions = _a.rowActions, invoices = _a.invoices, listLoading = _a.listLoading;
20
18
  var t = (0, next_intl_1.useTranslations)('invoicePage');
21
19
  var translationMap = {
22
20
  formLabelName: 'formLabelName',
@@ -38,18 +36,10 @@ var InvoicePage = function () {
38
36
  label: t('tableColumnHeaderName'),
39
37
  width: '10%',
40
38
  },
41
- {
42
- label: t('tableColumnHeaderCurrency'),
43
- width: '5%',
44
- },
45
39
  {
46
40
  label: t('tableColumnHeaderIssueExpiryDate'),
47
41
  width: '10%',
48
42
  },
49
- {
50
- label: t('tableColumnHeaderNote'),
51
- width: '5%',
52
- },
53
43
  {
54
44
  label: t('tableColumnHeaderRef'),
55
45
  width: '5%',
@@ -81,7 +71,7 @@ var InvoicePage = function () {
81
71
  ];
82
72
  var totalPagePerRecord = (0, util_functions_1.calculatePages)(count, pageLimit);
83
73
  return (react_1.default.createElement(react_1.default.Fragment, null,
84
- react_1.default.createElement(vista_table_v1_1.VistaTableV1, { currentPage: currentPage, handleNextOnClick: handleNextClick, handleOnSelect: handlePageLimit, handlePreviousOnClick: handlePreviousClick, handleSearchInput: searchOnChange, headerActions: headerActions, isNextDisabled: (0, util_functions_1.isNextButtonDisabled)(currentPage, totalPagePerRecord), isPreviousDisabled: (0, util_functions_1.isPreviousButtonDisabled)(currentPage), listOptions: (0, util_functions_1.getAvailablePageLimits)(count), loading: listLoading, nodeSelectKey: "pageLimit", pageLimit: pageLimit, rowActions: rowActions, searchDisabled: false, searchEnabled: true, searchId: "inventory-search", searchPlaceholder: "Enter ID or Name...", searchValue: searchQuery, selectKey1: "option", selectedItem: { option: String(pageLimit) }, tableBodyCols: constants_1.tableBodyCols, tableBodyRows: invoices, tableDescription: t('subTitle'), tableHeadItems: tableHeadItems, tableHeading: t('title'), totalPages: totalPagePerRecord }),
74
+ react_1.default.createElement(vista_table_v1_1.VistaTableV1, { currentPage: currentPage, handleNextOnClick: handleNextClick, handleOnSelect: handlePageLimit, handlePreviousOnClick: handlePreviousClick, handleSearchInput: searchOnChange, headerActions: headerActions, isNextDisabled: (0, util_functions_1.isNextButtonDisabled)(currentPage, totalPagePerRecord), isPreviousDisabled: (0, util_functions_1.isPreviousButtonDisabled)(currentPage), listOptions: (0, util_functions_1.getAvailablePageLimits)(count), loading: listLoading, nodeSelectKey: "pageLimit", pageLimit: pageLimit, rowActions: rowActions, searchDisabled: false, searchEnabled: true, searchId: "invoice-search", searchPlaceholder: "Enter ID or Name...", searchValue: searchQuery, selectKey1: "option", selectedItem: { option: String(pageLimit) }, tableBodyCols: constants_1.tableBodyCols, tableBodyRows: invoices, tableDescription: t('subTitle'), tableHeadItems: tableHeadItems, tableHeading: t('title'), totalPages: totalPagePerRecord }),
85
75
  react_1.default.createElement(drawer_1.Drawer, { translationMap: translationMap }),
86
76
  react_1.default.createElement(generate_toast_1.VistaToaster, null)));
87
77
  };
@@ -27,16 +27,25 @@ var types_1 = require("./types");
27
27
  var constants_1 = require("./constants");
28
28
  var date_fns_1 = require("date-fns");
29
29
  exports.initialInvoiceState = {
30
- address: '',
31
30
  afterDiscount: '0',
32
- category: types_1.QUOTE_INVOICE.INVOICE,
33
- city: '',
31
+ category: types_1.QUOTE_INVOICE_CATEGORY.INVOICE,
34
32
  companyId: '',
35
33
  companyQuery: '',
36
34
  count: 0,
37
- country: '',
38
35
  countryQuery: '',
39
- currency: 'PKR',
36
+ currency: '',
37
+ customer: {
38
+ address: '',
39
+ city: '',
40
+ country: '',
41
+ createdAt: '',
42
+ email: '',
43
+ firstName: '',
44
+ id: '',
45
+ lastName: '',
46
+ phone: '',
47
+ updatedAt: '',
48
+ },
40
49
  contactsList: [],
41
50
  currentPage: 1,
42
51
  customerId: '',
@@ -45,15 +54,11 @@ exports.initialInvoiceState = {
45
54
  discount: '0',
46
55
  discountUnit: types_1.DISCOUNT_UNIT.FIXED_VALUE,
47
56
  drawer: null,
48
- email: '',
49
57
  errors: {},
50
58
  expiryDate: (0, date_fns_1.addDays)(new Date(), 7).toISOString(),
51
- firstName: '',
52
- formToRender: '',
53
59
  id: '',
54
60
  invoiceStatus: types_1.INVOICE_STATUS.UNPAID,
55
61
  invoices: [],
56
- lastName: '',
57
62
  loading: true,
58
63
  modal: null,
59
64
  mode: 'Create',
@@ -63,6 +68,7 @@ exports.initialInvoiceState = {
63
68
  payments: [],
64
69
  phone: '',
65
70
  productsList: [],
71
+ companiesList: [],
66
72
  productQuery: '',
67
73
  quoteStatus: types_1.QUOTE_STATUS.DRAFT,
68
74
  ref: '',
@@ -104,7 +110,7 @@ exports.initialInvoiceState = {
104
110
  ],
105
111
  };
106
112
  function invoiceReducer(state, action) {
107
- var _a;
113
+ var _a, _b;
108
114
  switch (action.type) {
109
115
  case actions_1.INVOICE_ACTION_TYPES.SET_DRAWER:
110
116
  return __assign(__assign({}, state), { drawer: action.payload.drawer });
@@ -122,11 +128,6 @@ function invoiceReducer(state, action) {
122
128
  return __assign(__assign({}, state), { disableSaveButton: false, errors: __assign({}, action.payload.errors) });
123
129
  case actions_1.INVOICE_ACTION_TYPES.SET_INPUT_FIELD:
124
130
  return __assign(__assign({}, state), (_a = {}, _a[action.payload.key] = action.payload.value, _a));
125
- // case INVOICE_ACTION_TYPES.SET_INPUT_IMAGES:
126
- // return {
127
- // ...state,
128
- // [action.payload.key]: [...action.payload.value],
129
- // };
130
131
  case actions_1.INVOICE_ACTION_TYPES.SET_PAGE_LIMIT:
131
132
  return __assign(__assign({}, state), { pageLimit: action.payload.pageLimit });
132
133
  case actions_1.INVOICE_ACTION_TYPES.SET_INVOICES:
@@ -156,14 +157,18 @@ function invoiceReducer(state, action) {
156
157
  return __assign(__assign({}, state), { services: __spreadArray([], action.payload.services, true) });
157
158
  case actions_1.INVOICE_ACTION_TYPES.DELETE_ITEM_PRODUCT:
158
159
  return __assign(__assign({}, state), { products: __spreadArray([], action.payload.products, true) });
159
- case actions_1.INVOICE_ACTION_TYPES.SET_FORM_TO_RENDER:
160
- return __assign(__assign({}, state), { formToRender: action.payload.formToRender });
161
160
  case actions_1.INVOICE_ACTION_TYPES.SET_PRODUCTS_LIST:
162
161
  return __assign(__assign({}, state), { productsList: __spreadArray([], action.payload.productsList, true) });
163
162
  case actions_1.INVOICE_ACTION_TYPES.SET_CUSTOMER:
164
- return __assign(__assign({}, state), action.payload.customer);
163
+ return __assign(__assign({}, state), { customerId: state.customerId, customer: __assign(__assign({}, state.customer), action.payload.customer) });
164
+ case actions_1.INVOICE_ACTION_TYPES.SET_CUSTOMER_FORM:
165
+ return __assign(__assign({}, state), (state.customer && ({
166
+ customer: __assign(__assign({}, state.customer), (_b = {}, _b[action.payload.key] = action.payload.value, _b)),
167
+ })));
165
168
  case actions_1.INVOICE_ACTION_TYPES.SET_TAXES:
166
169
  return __assign(__assign({}, state), { taxes: __spreadArray([], action.payload.taxes, true) });
170
+ case actions_1.INVOICE_ACTION_TYPES.SET_COMPANIES_LIST:
171
+ return __assign(__assign({}, state), { companiesList: __spreadArray([], action.payload.companiesList, true) });
167
172
  default:
168
173
  return state;
169
174
  }
@@ -70,7 +70,7 @@ export interface CustomerTypeBE {
70
70
  email?: string;
71
71
  firstName: string;
72
72
  id: string;
73
- invoices: InvoiceTypeBE[];
73
+ invoices?: InvoiceTypeBE[];
74
74
  lastName: string;
75
75
  phone: string;
76
76
  updatedAt: string;
@@ -96,13 +96,13 @@ export interface PaymentTypeBE {
96
96
  updatedAt: string;
97
97
  }
98
98
  export interface InvoiceTypeBE {
99
- category: QUOTE_INVOICE;
100
- company: CompanyTypeBE;
101
- companyId: string;
99
+ category: QUOTE_INVOICE_CATEGORY;
100
+ company?: CompanyTypeBE;
101
+ companyId?: string;
102
102
  createdAt: string;
103
103
  currency: string;
104
104
  customer?: CustomerTypeBE;
105
- customerId: string;
105
+ customerId?: string;
106
106
  date: string;
107
107
  discount: string;
108
108
  discountUnit: DISCOUNT_UNIT;
@@ -110,7 +110,7 @@ export interface InvoiceTypeBE {
110
110
  id: string;
111
111
  invoiceStatus: INVOICE_STATUS;
112
112
  note: string;
113
- payments: PaymentTypeBE[] | [];
113
+ payments: PaymentTypeBE[];
114
114
  products: Product[];
115
115
  quoteStatus: QUOTE_STATUS;
116
116
  ref: string;
@@ -121,25 +121,20 @@ export interface InvoiceTypeBE {
121
121
  updatedAt: string;
122
122
  }
123
123
  export interface InvoiceState extends Omit<InvoiceTypeBE, 'createdAt' | 'updatedAt'> {
124
- address: string;
125
124
  afterDiscount: string;
126
- city: string;
127
125
  companyQuery: string;
128
126
  contactsList: ContactTypeBE[];
129
127
  count: number;
130
- country: string;
131
128
  countryQuery: string;
132
129
  currentPage: number;
130
+ customer?: CustomerTypeBE;
131
+ customerId?: string;
133
132
  disableSaveButton: boolean;
134
133
  drawer: null | INVOICE_DRAWER;
135
- email: string;
136
134
  errors: {
137
135
  [key: string]: string;
138
136
  };
139
- firstName: string;
140
- formToRender: string;
141
137
  invoices: InvoiceTypeBE[];
142
- lastName: string;
143
138
  loading: boolean;
144
139
  modal: null | PRODUCT_MODAL;
145
140
  mode: 'Create' | 'Edit';
@@ -149,6 +144,7 @@ export interface InvoiceState extends Omit<InvoiceTypeBE, 'createdAt' | 'updated
149
144
  productQuery: string;
150
145
  products: Product[];
151
146
  productsList: ProductTypeBE[];
147
+ companiesList: CompanyTypeBE[];
152
148
  searchQuery: string;
153
149
  tax: string;
154
150
  taxQuery: string;
@@ -166,7 +162,7 @@ export declare enum INVOICE_DRAWER {
166
162
  export declare enum PRODUCT_MODAL {
167
163
  DUMMY = "DUMMY"
168
164
  }
169
- export declare enum QUOTE_INVOICE {
165
+ export declare enum QUOTE_INVOICE_CATEGORY {
170
166
  QUOTE = "QUOTE",
171
167
  INVOICE = "INVOICE"
172
168
  }
@@ -201,16 +197,3 @@ export declare enum DISCOUNT_UNIT {
201
197
  FIXED_VALUE = "FIXED_VALUE",
202
198
  PERCENTAGE_VALUE = "PERCENTAGE_VALUE"
203
199
  }
204
- export interface CustomerTypeBE {
205
- address?: string;
206
- city: string;
207
- country: string;
208
- createdAt: string;
209
- email?: string;
210
- firstName: string;
211
- id: string;
212
- invoices: InvoiceTypeBE[];
213
- lastName: string;
214
- phone: string;
215
- updatedAt: string;
216
- }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DISCOUNT_UNIT = exports.QUOTE_STATUS = exports.INVOICE_STATUS = exports.CURRENCY = exports.QUOTE_INVOICE = exports.PRODUCT_MODAL = exports.INVOICE_DRAWER = exports.PAYMENT_TYPE = exports.PAYMENT_MODE = void 0;
3
+ exports.DISCOUNT_UNIT = exports.QUOTE_STATUS = exports.INVOICE_STATUS = exports.CURRENCY = exports.QUOTE_INVOICE_CATEGORY = exports.PRODUCT_MODAL = exports.INVOICE_DRAWER = exports.PAYMENT_TYPE = exports.PAYMENT_MODE = void 0;
4
4
  var PAYMENT_MODE;
5
5
  (function (PAYMENT_MODE) {
6
6
  })(PAYMENT_MODE || (exports.PAYMENT_MODE = PAYMENT_MODE = {}));
@@ -16,11 +16,11 @@ var PRODUCT_MODAL;
16
16
  (function (PRODUCT_MODAL) {
17
17
  PRODUCT_MODAL["DUMMY"] = "DUMMY";
18
18
  })(PRODUCT_MODAL || (exports.PRODUCT_MODAL = PRODUCT_MODAL = {}));
19
- var QUOTE_INVOICE;
20
- (function (QUOTE_INVOICE) {
21
- QUOTE_INVOICE["QUOTE"] = "QUOTE";
22
- QUOTE_INVOICE["INVOICE"] = "INVOICE";
23
- })(QUOTE_INVOICE || (exports.QUOTE_INVOICE = QUOTE_INVOICE = {}));
19
+ var QUOTE_INVOICE_CATEGORY;
20
+ (function (QUOTE_INVOICE_CATEGORY) {
21
+ QUOTE_INVOICE_CATEGORY["QUOTE"] = "QUOTE";
22
+ QUOTE_INVOICE_CATEGORY["INVOICE"] = "INVOICE";
23
+ })(QUOTE_INVOICE_CATEGORY || (exports.QUOTE_INVOICE_CATEGORY = QUOTE_INVOICE_CATEGORY = {}));
24
24
  var CURRENCY;
25
25
  (function (CURRENCY) {
26
26
  CURRENCY["AUD"] = "AUD";
@@ -56,3 +56,16 @@ var DISCOUNT_UNIT;
56
56
  DISCOUNT_UNIT["FIXED_VALUE"] = "FIXED_VALUE";
57
57
  DISCOUNT_UNIT["PERCENTAGE_VALUE"] = "PERCENTAGE_VALUE";
58
58
  })(DISCOUNT_UNIT || (exports.DISCOUNT_UNIT = DISCOUNT_UNIT = {}));
59
+ // export interface CustomerTypeBE {
60
+ // address?: string;
61
+ // city: string;
62
+ // country: string;
63
+ // createdAt: string;
64
+ // email?: string;
65
+ // firstName: string;
66
+ // id: string;
67
+ // invoices?: InvoiceTypeBE[]
68
+ // lastName: string;
69
+ // phone: string;
70
+ // updatedAt: string;
71
+ // }
@@ -26,9 +26,6 @@ var products = zod_1.z.object({
26
26
  exports.formValidation = zod_1.z.object({
27
27
  companyId: zod_1.z.string().optional(),
28
28
  ref: zod_1.z.string().nonempty(constants_1.validationErrors.ref),
29
- // invoiceStatus: z
30
- // .string()
31
- // .nonempty(formErrors[DASHBOARD_DRAWERS_FORMS.INVOICE].status),
32
29
  date: zod_1.z.string().nonempty(constants_1.validationErrors.date),
33
30
  expiryDate: zod_1.z
34
31
  .string()
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@appcorp/stellar-solutions-invoice-module",
3
- "version": "0.1.48",
3
+ "version": "0.1.50",
4
4
  "scripts": {
5
5
  "build": "yarn clean && yarn build:ts && cp package.json lib && cp README.md lib && cp yarn.lock lib",
6
6
  "build:next": "next build",
@@ -17,14 +17,14 @@
17
17
  "upgrade": "ncu -u"
18
18
  },
19
19
  "devDependencies": {
20
- "@appcorp/app-corp-vista": "^0.2.88",
21
- "@appcorp/stellar-solutions-company-module": "^0.1.29",
22
- "@appcorp/stellar-solutions-modules": "^0.1.28",
23
- "@appcorp/stellar-solutions-product-module": "^0.2.5",
20
+ "@appcorp/app-corp-vista": "^0.2.99",
21
+ "@appcorp/stellar-solutions-company-module": "^0.1.30",
22
+ "@appcorp/stellar-solutions-modules": "^0.1.29",
23
+ "@appcorp/stellar-solutions-product-module": "^0.2.6",
24
24
  "@eslint/eslintrc": "^3",
25
25
  "@headlessui/react": "^2",
26
26
  "@heroicons/react": "^2",
27
- "@react-pakistan/util-functions": "^1.24.38",
27
+ "@react-pakistan/util-functions": "^1.24.41",
28
28
  "@supabase/supabase-js": "^2",
29
29
  "@tailwindcss/forms": "^0.5.10",
30
30
  "@tailwindcss/postcss": "^4",
@@ -37,6 +37,7 @@
37
37
  "eslint": "^9",
38
38
  "eslint-config-next": "^15",
39
39
  "husky": "^9",
40
+ "libphonenumber-js": "^1",
40
41
  "next": "^15",
41
42
  "next-intl": "^4",
42
43
  "react": "^19",