@monarkmarkets/marketplace 2.0.2 → 2.0.4

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.esm.js CHANGED
@@ -1,7 +1,7 @@
1
- import { __awaiter, __generator } from 'tslib';
2
1
  import { jsx, jsxs } from 'react/jsx-runtime';
3
2
  import { memo, useCallback, useMemo, useState, useEffect } from 'react';
4
- import { Client, SortOrder4, MonarkStage, SortOrder9 } from '@monarkmarkets/api-client';
3
+ import { __awaiter, __generator } from 'tslib';
4
+ import { Client, SortOrder7, SortOrder12, MonarkStage } from '@monarkmarkets/api-client';
5
5
 
6
6
  /**
7
7
  * CompanyLogo component that displays either a company logo or a fallback initial.
@@ -290,28 +290,87 @@ var LoadingSpinner = function () {
290
290
  });
291
291
  };
292
292
 
293
+ /**
294
+ * Service for managing Pre-IPO company operations.
295
+ */
293
296
  var PreIPOCompanySpvService = /** @class */function () {
294
297
  function PreIPOCompanySpvService() {
295
298
  this._client = new Client("/api");
296
299
  }
297
- PreIPOCompanySpvService.prototype.GetAllCompanies = function (searchTerm_1, page_1) {
298
- return __awaiter(this, arguments, void 0, function (searchTerm, page, pageSize) {
300
+ /**
301
+ * Retrieves all Pre-IPO companies with optional filtering and pagination.
302
+ *
303
+ * @param searchTerm - Optional search term to filter companies
304
+ * @param searchCategories - Optional array of categories to filter by
305
+ * @param sortBy - Field to sort by
306
+ * @param sortOrder - Sort order for results (default: Descending)
307
+ * @param minLastValuation - Minimum last valuation filter
308
+ * @param maxLastValuation - Maximum last valuation filter
309
+ * @param minTotalFunding - Minimum total funding filter
310
+ * @param maxTotalFunding - Maximum total funding filter
311
+ * @param page - Optional page number for pagination
312
+ * @param pageSize - Number of items per page (default: 25)
313
+ * @returns Promise resolving to PreIPOCompanyApiResponse or null if operation fails
314
+ */
315
+ PreIPOCompanySpvService.prototype.getAllCompanies = function (searchTerm_1, searchCategories_1, sortBy_1) {
316
+ return __awaiter(this, arguments, void 0, function (searchTerm, searchCategories, sortBy, sortOrder, minLastValuation, maxLastValuation, minTotalFunding, maxTotalFunding, page, pageSize) {
299
317
  var error_1;
318
+ if (sortOrder === void 0) {
319
+ sortOrder = SortOrder7.Descending;
320
+ }
300
321
  if (pageSize === void 0) {
301
322
  pageSize = 25;
302
323
  }
303
324
  return __generator(this, function (_a) {
304
325
  switch (_a.label) {
305
326
  case 0:
306
- _a.trys.push([0, 2,, 3]);
307
- return [4 /*yield*/, this._client.preIpoCompany2(searchTerm, SortOrder4.Descending, page, pageSize)];
327
+ if (pageSize <= 0 || pageSize > 100) {
328
+ throw new Error("pageSize must be between 1 and 100");
329
+ }
330
+ if (page !== undefined && page < 0) {
331
+ throw new Error("page must be non-negative");
332
+ }
333
+ if (minLastValuation !== undefined && minLastValuation < 0) {
334
+ throw new Error("minLastValuation must be non-negative");
335
+ }
336
+ if (maxLastValuation !== undefined && maxLastValuation < 0) {
337
+ throw new Error("maxLastValuation must be non-negative");
338
+ }
339
+ if (minLastValuation !== undefined && maxLastValuation !== undefined && minLastValuation > maxLastValuation) {
340
+ throw new Error("minLastValuation cannot be greater than maxLastValuation");
341
+ }
342
+ if (minTotalFunding !== undefined && minTotalFunding < 0) {
343
+ throw new Error("minTotalFunding must be non-negative");
344
+ }
345
+ if (maxTotalFunding !== undefined && maxTotalFunding < 0) {
346
+ throw new Error("maxTotalFunding must be non-negative");
347
+ }
348
+ if (minTotalFunding !== undefined && maxTotalFunding !== undefined && minTotalFunding > maxTotalFunding) {
349
+ throw new Error("minTotalFunding cannot be greater than maxTotalFunding");
350
+ }
351
+ _a.label = 1;
308
352
  case 1:
309
- return [2 /*return*/, _a.sent()];
353
+ _a.trys.push([1, 3,, 4]);
354
+ return [4 /*yield*/, this._client.preIpoCompany2(searchTerm, searchCategories, sortBy, sortOrder, minLastValuation, maxLastValuation, minTotalFunding, maxTotalFunding, page, pageSize)];
310
355
  case 2:
356
+ return [2 /*return*/, _a.sent()];
357
+ case 3:
311
358
  error_1 = _a.sent();
312
- console.error('Failed to retrieve all of the company information.', error_1);
359
+ console.error('Failed to retrieve Pre-IPO companies:', {
360
+ searchTerm: searchTerm,
361
+ searchCategories: searchCategories,
362
+ sortBy: sortBy,
363
+ sortOrder: sortOrder,
364
+ minLastValuation: minLastValuation,
365
+ maxLastValuation: maxLastValuation,
366
+ minTotalFunding: minTotalFunding,
367
+ maxTotalFunding: maxTotalFunding,
368
+ page: page,
369
+ pageSize: pageSize,
370
+ error: error_1 instanceof Error ? error_1.message : error_1
371
+ });
313
372
  return [2 /*return*/, null];
314
- case 3:
373
+ case 4:
315
374
  return [2 /*return*/];
316
375
  }
317
376
  });
@@ -320,113 +379,187 @@ var PreIPOCompanySpvService = /** @class */function () {
320
379
  return PreIPOCompanySpvService;
321
380
  }();
322
381
 
323
- var privateColumns = [{
324
- title: 'Company'
325
- }, {
326
- title: 'Total Funding'
327
- }, {
328
- title: 'Last Round'
329
- }, {
330
- title: 'Last Round Price/Share'
331
- }, {
332
- title: 'Indicate Interest'
333
- }];
334
382
  /**
335
- * PrivateTable component displays a table of pre-IPO companies with pagination and loading states.
336
- * It includes table headers, rows, and pagination controls with built-in data fetching.
383
+ * Hook for fetching private company data with automatic loading states and error handling.
337
384
  */
338
- var PrivateTable = function (_a) {
339
- var investorId = _a.investorId,
340
- onButtonClick = _a.onButtonClick,
341
- _b = _a.buttonText,
342
- buttonText = _b === void 0 ? "Submit IOI" : _b,
343
- _c = _a.isLoading,
344
- externalLoading = _c === void 0 ? false : _c,
345
- _d = _a.initialPage,
346
- initialPage = _d === void 0 ? 1 : _d,
347
- _e = _a.pageSize,
348
- pageSize = _e === void 0 ? 10 : _e,
349
- _f = _a.searchTerm,
350
- searchTerm = _f === void 0 ? '' : _f,
351
- onPageChange = _a.onPageChange,
352
- onDataLoaded = _a.onDataLoaded;
353
- var _g = useState(true),
354
- internalLoading = _g[0],
355
- setInternalLoading = _g[1];
356
- var _h = useState([]),
357
- preIpoCompany = _h[0],
358
- setPreIpoCompany = _h[1];
359
- var _j = useState(initialPage),
360
- currentPage = _j[0],
361
- setCurrentPage = _j[1];
362
- var _k = useState(1),
363
- totalPages = _k[0],
364
- setTotalPages = _k[1];
365
- var _l = useState(false),
366
- error = _l[0],
367
- setError = _l[1];
368
- var isLoading = externalLoading || internalLoading;
369
- var fetchCompanies = useCallback(function (page) {
385
+ var usePrivateCompanies = function (_a) {
386
+ var searchTerm = _a.searchTerm,
387
+ searchCategories = _a.searchCategories,
388
+ sortBy = _a.sortBy,
389
+ _b = _a.sortOrder,
390
+ sortOrder = _b === void 0 ? SortOrder7.Descending : _b,
391
+ minLastValuation = _a.minLastValuation,
392
+ maxLastValuation = _a.maxLastValuation,
393
+ minTotalFunding = _a.minTotalFunding,
394
+ maxTotalFunding = _a.maxTotalFunding,
395
+ page = _a.page,
396
+ _c = _a.pageSize,
397
+ pageSize = _c === void 0 ? 25 : _c,
398
+ _d = _a.enabled,
399
+ enabled = _d === void 0 ? true : _d;
400
+ var _e = useState(null),
401
+ data = _e[0],
402
+ setData = _e[1];
403
+ var _f = useState(false),
404
+ loading = _f[0],
405
+ setLoading = _f[1];
406
+ var _g = useState(null),
407
+ error = _g[0],
408
+ setError = _g[1];
409
+ var preIPOService = new PreIPOCompanySpvService();
410
+ var fetchData = useCallback(function () {
370
411
  return __awaiter(void 0, void 0, void 0, function () {
371
- var service, result, e_1;
372
- var _a, _b;
373
- return __generator(this, function (_c) {
374
- switch (_c.label) {
412
+ var result, err_1;
413
+ return __generator(this, function (_a) {
414
+ switch (_a.label) {
375
415
  case 0:
376
- setInternalLoading(true);
377
- setError(false);
378
- service = new PreIPOCompanySpvService();
379
- _c.label = 1;
416
+ if (!enabled) {
417
+ return [2 /*return*/];
418
+ }
419
+ setLoading(true);
420
+ setError(null);
421
+ _a.label = 1;
380
422
  case 1:
381
- _c.trys.push([1, 3, 4, 5]);
382
- return [4 /*yield*/, service.GetAllCompanies(searchTerm, page, pageSize)];
423
+ _a.trys.push([1, 3, 4, 5]);
424
+ return [4 /*yield*/, preIPOService.getAllCompanies(searchTerm, searchCategories, sortBy, sortOrder, minLastValuation, maxLastValuation, minTotalFunding, maxTotalFunding, page, pageSize)];
383
425
  case 2:
384
- result = _c.sent();
385
- if (result && result.items) {
386
- setPreIpoCompany(result.items);
387
- setTotalPages(((_a = result.pagination) === null || _a === void 0 ? void 0 : _a.totalPages) || 1);
388
- onDataLoaded === null || onDataLoaded === void 0 ? void 0 : onDataLoaded(result.items, ((_b = result.pagination) === null || _b === void 0 ? void 0 : _b.totalPages) || 1);
426
+ result = _a.sent();
427
+ if (result === null) {
428
+ setError('Failed to fetch private company data');
429
+ setData(null);
389
430
  } else {
390
- setPreIpoCompany([]);
391
- setTotalPages(1);
392
- onDataLoaded === null || onDataLoaded === void 0 ? void 0 : onDataLoaded([], 1);
431
+ setData(result);
393
432
  }
394
433
  return [3 /*break*/, 5];
395
434
  case 3:
396
- e_1 = _c.sent();
397
- console.error('Error fetching pre-IPO companies:', e_1);
398
- setError(true);
399
- setPreIpoCompany([]);
435
+ err_1 = _a.sent();
436
+ setError(err_1 instanceof Error ? err_1.message : 'An unexpected error occurred');
437
+ setData(null);
400
438
  return [3 /*break*/, 5];
401
439
  case 4:
402
- setInternalLoading(false);
440
+ setLoading(false);
403
441
  return [7 /*endfinally*/];
404
442
  case 5:
405
443
  return [2 /*return*/];
406
444
  }
407
445
  });
408
446
  });
409
- }, [searchTerm, pageSize, onDataLoaded]);
447
+ }, [enabled, searchTerm, searchCategories, sortBy, sortOrder, minLastValuation, maxLastValuation, minTotalFunding, maxTotalFunding, page, pageSize]);
410
448
  useEffect(function () {
411
- fetchCompanies(currentPage);
412
- }, [currentPage, fetchCompanies]);
449
+ fetchData();
450
+ }, [fetchData]);
451
+ var refetch = useCallback(function () {
452
+ return __awaiter(void 0, void 0, void 0, function () {
453
+ return __generator(this, function (_a) {
454
+ switch (_a.label) {
455
+ case 0:
456
+ return [4 /*yield*/, fetchData()];
457
+ case 1:
458
+ _a.sent();
459
+ return [2 /*return*/];
460
+ }
461
+ });
462
+ });
463
+ }, [fetchData]);
464
+ return {
465
+ data: data,
466
+ loading: loading,
467
+ error: error,
468
+ refetch: refetch
469
+ };
470
+ };
471
+
472
+ /**
473
+ * Constants for Pre-IPO company operations
474
+ */
475
+ var PRIVATE_COMPANY_CONSTANTS = {
476
+ /**
477
+ * Default page size for pagination
478
+ */
479
+ DEFAULT_PAGE_SIZE: 25,
480
+ /**
481
+ * Error messages
482
+ */
483
+ ERRORS: {
484
+ FETCH_FAILED: 'Failed to fetch Pre-IPO company data'}};
485
+
486
+ var privateColumns = [{
487
+ title: 'Company'
488
+ }, {
489
+ title: 'Last Round Valuation'
490
+ }, {
491
+ title: 'Last Round'
492
+ }, {
493
+ title: 'Last Round Price/Share'
494
+ }, {
495
+ title: 'Indicate Interest'
496
+ }];
497
+ /**
498
+ * PrivateTable component displays a table of pre-IPO companies with pagination and loading states.
499
+ * It includes table headers, rows, and pagination controls using the usePrivateCompanies hook.
500
+ */
501
+ var PrivateTable = function (_a) {
502
+ var _b;
503
+ var investorId = _a.investorId,
504
+ onButtonClick = _a.onButtonClick,
505
+ _c = _a.buttonText,
506
+ buttonText = _c === void 0 ? "Submit IOI" : _c,
507
+ _d = _a.isLoading,
508
+ externalLoading = _d === void 0 ? false : _d,
509
+ _e = _a.initialPage,
510
+ initialPage = _e === void 0 ? 1 : _e,
511
+ _f = _a.pageSize,
512
+ pageSize = _f === void 0 ? PRIVATE_COMPANY_CONSTANTS.DEFAULT_PAGE_SIZE : _f,
513
+ _g = _a.searchTerm,
514
+ searchTerm = _g === void 0 ? '' : _g,
515
+ onPageChange = _a.onPageChange,
516
+ onDataLoaded = _a.onDataLoaded;
517
+ var _h = useState(initialPage),
518
+ currentPage = _h[0],
519
+ setCurrentPage = _h[1];
520
+ // Use the custom hook for data fetching
521
+ var _j = usePrivateCompanies({
522
+ searchTerm: searchTerm,
523
+ page: currentPage,
524
+ pageSize: pageSize,
525
+ sortOrder: SortOrder7.Descending,
526
+ enabled: true
527
+ }),
528
+ data = _j.data,
529
+ loading = _j.loading,
530
+ error = _j.error,
531
+ refetch = _j.refetch;
532
+ var isLoading = externalLoading || loading;
533
+ var preIpoCompany = (data === null || data === void 0 ? void 0 : data.items) || [];
534
+ var totalPages = ((_b = data === null || data === void 0 ? void 0 : data.pagination) === null || _b === void 0 ? void 0 : _b.totalPages) || 1;
535
+ // Reset to first page when search term changes
413
536
  useEffect(function () {
414
537
  setCurrentPage(1);
415
538
  }, [searchTerm]);
539
+ // Call onDataLoaded callback when data changes
540
+ useEffect(function () {
541
+ if (data) {
542
+ onDataLoaded === null || onDataLoaded === void 0 ? void 0 : onDataLoaded(preIpoCompany, totalPages);
543
+ }
544
+ }, [data, preIpoCompany, totalPages, onDataLoaded]);
416
545
  var handlePageChange = function (page) {
417
546
  setCurrentPage(page);
418
547
  onPageChange === null || onPageChange === void 0 ? void 0 : onPageChange(page);
419
548
  };
420
549
  if (error) {
421
- return jsx("div", {
550
+ return jsxs("div", {
422
551
  className: "bg-white rounded-lg shadow-sm p-8 text-center",
423
- children: jsx("p", {
552
+ children: [jsxs("p", {
424
553
  className: "text-gray-500",
425
- children: "Failed to load companies. Please try again later."
426
- })
554
+ children: [PRIVATE_COMPANY_CONSTANTS.ERRORS.FETCH_FAILED, ". Please try again later."]
555
+ }), jsx("button", {
556
+ onClick: refetch,
557
+ className: "mt-2 px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600",
558
+ children: "Retry"
559
+ })]
427
560
  });
428
561
  }
429
- if (!isLoading && (!preIpoCompany || preIpoCompany.length === 0)) {
562
+ if (!isLoading && preIpoCompany.length === 0) {
430
563
  return jsx("div", {
431
564
  className: "bg-white rounded-lg shadow-sm p-8 text-center",
432
565
  children: jsx("p", {
@@ -625,28 +758,66 @@ var TableRow = /*#__PURE__*/memo(function (_a) {
625
758
  });
626
759
  TableRow.displayName = 'TableRow';
627
760
 
761
+ /**
762
+ * Service for managing Special Purpose Vehicle (SPV) operations.
763
+ */
628
764
  var SpvService = /** @class */function () {
629
765
  function SpvService() {
630
766
  this._client = new Client("/api");
631
767
  }
632
- SpvService.prototype.GetAllSpvs = function (investorId_1, nameFilter_1, page_1) {
633
- return __awaiter(this, arguments, void 0, function (investorId, nameFilter, page, pageSize) {
768
+ /**
769
+ * Retrieves all SPVs for a specific investor with optional filtering and pagination.
770
+ *
771
+ * @param investorId - The unique identifier of the investor
772
+ * @param nameFilter - Optional filter to search SPVs by name
773
+ * @param preIPOCompanyId - Optional filter to search by pre-IPO company ID
774
+ * @param preIPOCompanyInvestmentId - Optional filter to search by pre-IPO company investment ID
775
+ * @param page - Optional page number for pagination
776
+ * @param pageSize - Number of items per page (default: 25)
777
+ * @param sortOrder - Sort order for results (default: Descending)
778
+ * @param sortBy - Field to sort by
779
+ * @returns Promise resolving to PreIPOCompanySPVApiResponse or null if operation fails
780
+ */
781
+ SpvService.prototype.getAllSpvs = function (investorId_1, nameFilter_1, preIPOCompanyId_1, preIPOCompanyInvestmentId_1, page_1) {
782
+ return __awaiter(this, arguments, void 0, function (investorId, nameFilter, preIPOCompanyId, preIPOCompanyInvestmentId, page, pageSize, sortOrder, sortBy) {
634
783
  var error_1;
635
784
  if (pageSize === void 0) {
636
785
  pageSize = 25;
637
786
  }
787
+ if (sortOrder === void 0) {
788
+ sortOrder = SortOrder12.Descending;
789
+ }
638
790
  return __generator(this, function (_a) {
639
791
  switch (_a.label) {
640
792
  case 0:
641
- _a.trys.push([0, 2,, 3]);
642
- return [4 /*yield*/, this._client.investorGET5(investorId, MonarkStage.PRIMARY_FUNDRAISE, nameFilter, page, pageSize, SortOrder9.Descending)];
793
+ if (!(investorId === null || investorId === void 0 ? void 0 : investorId.trim())) {
794
+ throw new Error("investorId is required and cannot be empty");
795
+ }
796
+ if (pageSize <= 0 || pageSize > 100) {
797
+ throw new Error("pageSize must be between 1 and 100");
798
+ }
799
+ if (page !== undefined && page < 0) {
800
+ throw new Error("page must be non-negative");
801
+ }
802
+ _a.label = 1;
643
803
  case 1:
644
- return [2 /*return*/, _a.sent()];
804
+ _a.trys.push([1, 3,, 4]);
805
+ return [4 /*yield*/, this._client.investorGET6(investorId, MonarkStage.PRIMARY_FUNDRAISE, nameFilter, preIPOCompanyId, preIPOCompanyInvestmentId, page, pageSize, sortOrder, sortBy)];
645
806
  case 2:
807
+ return [2 /*return*/, _a.sent()];
808
+ case 3:
646
809
  error_1 = _a.sent();
647
- console.error('Failed to retrieve all SPVs.', error_1);
810
+ console.error("Failed to retrieve SPVs for investor ".concat(investorId, ":"), {
811
+ investorId: investorId,
812
+ nameFilter: nameFilter,
813
+ preIPOCompanyId: preIPOCompanyId,
814
+ preIPOCompanyInvestmentId: preIPOCompanyInvestmentId,
815
+ page: page,
816
+ pageSize: pageSize,
817
+ error: error_1 instanceof Error ? error_1.message : error_1
818
+ });
648
819
  return [2 /*return*/, null];
649
- case 3:
820
+ case 4:
650
821
  return [2 /*return*/];
651
822
  }
652
823
  });
@@ -655,113 +826,183 @@ var SpvService = /** @class */function () {
655
826
  return SpvService;
656
827
  }();
657
828
 
658
- var primaryColumns = [{
659
- title: 'Company'
660
- }, {
661
- title: 'Price Per Share'
662
- }, {
663
- title: 'Minimum Investment'
664
- }, {
665
- title: 'Fees'
666
- }, {
667
- title: 'Invest'
668
- }];
669
829
  /**
670
- * PrimaryTable component displays a table of SPV investment opportunities.
671
- * It includes table headers and rows with built-in data fetching.
830
+ * Hook for fetching primary company SPV data with automatic loading states and error handling.
672
831
  */
673
- var PrimaryTable = function (_a) {
832
+ var usePrimaryCompany = function (_a) {
674
833
  var investorId = _a.investorId,
675
- onButtonClick = _a.onButtonClick,
676
- _b = _a.buttonText,
677
- buttonText = _b === void 0 ? "Invest" : _b,
678
- _c = _a.isLoading,
679
- externalLoading = _c === void 0 ? false : _c,
680
- _d = _a.initialPage,
681
- initialPage = _d === void 0 ? 1 : _d,
682
- _e = _a.pageSize,
683
- pageSize = _e === void 0 ? 10 : _e,
684
- _f = _a.searchTerm,
685
- searchTerm = _f === void 0 ? '' : _f,
686
- onPageChange = _a.onPageChange,
687
- onDataLoaded = _a.onDataLoaded;
688
- var _g = useState(true),
689
- internalLoading = _g[0],
690
- setInternalLoading = _g[1];
691
- var _h = useState([]),
692
- preIPOCompanySPV = _h[0],
693
- setPreIPOCompanySPV = _h[1];
694
- var _j = useState(initialPage),
695
- currentPage = _j[0],
696
- setCurrentPage = _j[1];
697
- var _k = useState(1),
698
- totalPages = _k[0],
699
- setTotalPages = _k[1];
700
- var _l = useState(false),
701
- error = _l[0],
702
- setError = _l[1];
703
- var isLoading = externalLoading || internalLoading;
704
- var fetchSpvs = useCallback(function (page) {
834
+ nameFilter = _a.nameFilter,
835
+ preIPOCompanyId = _a.preIPOCompanyId,
836
+ preIPOCompanyInvestmentId = _a.preIPOCompanyInvestmentId,
837
+ page = _a.page,
838
+ _b = _a.pageSize,
839
+ pageSize = _b === void 0 ? 25 : _b,
840
+ _c = _a.sortOrder,
841
+ sortOrder = _c === void 0 ? SortOrder12.Descending : _c,
842
+ sortBy = _a.sortBy,
843
+ _d = _a.enabled,
844
+ enabled = _d === void 0 ? true : _d;
845
+ var _e = useState(null),
846
+ data = _e[0],
847
+ setData = _e[1];
848
+ var _f = useState(false),
849
+ loading = _f[0],
850
+ setLoading = _f[1];
851
+ var _g = useState(null),
852
+ error = _g[0],
853
+ setError = _g[1];
854
+ var spvService = new SpvService();
855
+ var fetchData = useCallback(function () {
705
856
  return __awaiter(void 0, void 0, void 0, function () {
706
- var service, result, e_1;
707
- var _a, _b;
708
- return __generator(this, function (_c) {
709
- switch (_c.label) {
857
+ var result, err_1;
858
+ return __generator(this, function (_a) {
859
+ switch (_a.label) {
710
860
  case 0:
711
- setInternalLoading(true);
712
- setError(false);
713
- service = new SpvService();
714
- _c.label = 1;
861
+ if (!enabled || !investorId) {
862
+ return [2 /*return*/];
863
+ }
864
+ setLoading(true);
865
+ setError(null);
866
+ _a.label = 1;
715
867
  case 1:
716
- _c.trys.push([1, 3, 4, 5]);
717
- return [4 /*yield*/, service.GetAllSpvs(investorId, searchTerm, page, pageSize)];
868
+ _a.trys.push([1, 3, 4, 5]);
869
+ return [4 /*yield*/, spvService.getAllSpvs(investorId, nameFilter, preIPOCompanyId, preIPOCompanyInvestmentId, page, pageSize, sortOrder, sortBy)];
718
870
  case 2:
719
- result = _c.sent();
720
- if (result && result.items) {
721
- setPreIPOCompanySPV(result.items);
722
- setTotalPages(((_a = result.pagination) === null || _a === void 0 ? void 0 : _a.totalPages) || 1);
723
- onDataLoaded === null || onDataLoaded === void 0 ? void 0 : onDataLoaded(result.items, ((_b = result.pagination) === null || _b === void 0 ? void 0 : _b.totalPages) || 1);
871
+ result = _a.sent();
872
+ if (result === null) {
873
+ setError('Failed to fetch SPV data');
874
+ setData(null);
724
875
  } else {
725
- setPreIPOCompanySPV([]);
726
- setTotalPages(1);
727
- onDataLoaded === null || onDataLoaded === void 0 ? void 0 : onDataLoaded([], 1);
876
+ setData(result);
728
877
  }
729
878
  return [3 /*break*/, 5];
730
879
  case 3:
731
- e_1 = _c.sent();
732
- console.error('Error fetching SPVs:', e_1);
733
- setError(true);
734
- setPreIPOCompanySPV([]);
880
+ err_1 = _a.sent();
881
+ setError(err_1 instanceof Error ? err_1.message : 'An unexpected error occurred');
882
+ setData(null);
735
883
  return [3 /*break*/, 5];
736
884
  case 4:
737
- setInternalLoading(false);
885
+ setLoading(false);
738
886
  return [7 /*endfinally*/];
739
887
  case 5:
740
888
  return [2 /*return*/];
741
889
  }
742
890
  });
743
891
  });
744
- }, [investorId, searchTerm, pageSize, onDataLoaded]);
892
+ }, [enabled, investorId, nameFilter, preIPOCompanyId, preIPOCompanyInvestmentId, page, pageSize, sortOrder, sortBy]);
745
893
  useEffect(function () {
746
- fetchSpvs(currentPage);
747
- }, [currentPage, fetchSpvs]);
894
+ fetchData();
895
+ }, [fetchData]);
896
+ var refetch = useCallback(function () {
897
+ return __awaiter(void 0, void 0, void 0, function () {
898
+ return __generator(this, function (_a) {
899
+ switch (_a.label) {
900
+ case 0:
901
+ return [4 /*yield*/, fetchData()];
902
+ case 1:
903
+ _a.sent();
904
+ return [2 /*return*/];
905
+ }
906
+ });
907
+ });
908
+ }, [fetchData]);
909
+ return {
910
+ data: data,
911
+ loading: loading,
912
+ error: error,
913
+ refetch: refetch
914
+ };
915
+ };
916
+
917
+ /**
918
+ * Constants for primary company SPV operations
919
+ */
920
+ var PRIMARY_COMPANY_CONSTANTS = {
921
+ /**
922
+ * Default page size for pagination
923
+ */
924
+ DEFAULT_PAGE_SIZE: 25,
925
+ /**
926
+ * Error messages
927
+ */
928
+ ERRORS: {
929
+ FETCH_FAILED: 'Failed to fetch SPV data'}};
930
+
931
+ var primaryColumns = [{
932
+ title: 'Company'
933
+ }, {
934
+ title: 'Price Per Share'
935
+ }, {
936
+ title: 'Minimum Investment'
937
+ }, {
938
+ title: 'Fees'
939
+ }, {
940
+ title: 'Invest'
941
+ }];
942
+ /**
943
+ * PrimaryTable component displays a table of SPV investment opportunities.
944
+ * It includes table headers and rows with built-in data fetching using the usePrimaryCompany hook.
945
+ */
946
+ var PrimaryTable = function (_a) {
947
+ var _b;
948
+ var investorId = _a.investorId,
949
+ onButtonClick = _a.onButtonClick,
950
+ _c = _a.buttonText,
951
+ buttonText = _c === void 0 ? "Invest" : _c,
952
+ _d = _a.isLoading,
953
+ externalLoading = _d === void 0 ? false : _d,
954
+ _e = _a.initialPage,
955
+ initialPage = _e === void 0 ? 1 : _e,
956
+ _f = _a.pageSize,
957
+ pageSize = _f === void 0 ? PRIMARY_COMPANY_CONSTANTS.DEFAULT_PAGE_SIZE : _f,
958
+ _g = _a.searchTerm,
959
+ searchTerm = _g === void 0 ? '' : _g,
960
+ onPageChange = _a.onPageChange,
961
+ onDataLoaded = _a.onDataLoaded;
962
+ var _h = useState(initialPage),
963
+ currentPage = _h[0],
964
+ setCurrentPage = _h[1];
965
+ var _j = usePrimaryCompany({
966
+ investorId: investorId,
967
+ nameFilter: searchTerm,
968
+ page: currentPage,
969
+ pageSize: pageSize,
970
+ sortOrder: SortOrder12.Descending,
971
+ enabled: !!investorId
972
+ }),
973
+ data = _j.data,
974
+ loading = _j.loading,
975
+ error = _j.error,
976
+ refetch = _j.refetch;
977
+ var isLoading = externalLoading || loading;
978
+ var preIPOCompanySPV = (data === null || data === void 0 ? void 0 : data.items) || [];
979
+ var totalPages = ((_b = data === null || data === void 0 ? void 0 : data.pagination) === null || _b === void 0 ? void 0 : _b.totalPages) || 1;
748
980
  useEffect(function () {
749
981
  setCurrentPage(1);
750
982
  }, [searchTerm]);
983
+ useEffect(function () {
984
+ if (data) {
985
+ onDataLoaded === null || onDataLoaded === void 0 ? void 0 : onDataLoaded(preIPOCompanySPV, totalPages);
986
+ }
987
+ }, [data, preIPOCompanySPV, totalPages, onDataLoaded]);
751
988
  var handlePageChange = function (page) {
752
989
  setCurrentPage(page);
753
990
  onPageChange === null || onPageChange === void 0 ? void 0 : onPageChange(page);
754
991
  };
755
992
  if (error) {
756
- return jsx("div", {
993
+ return jsxs("div", {
757
994
  className: "bg-white rounded-lg shadow-sm p-8 text-center",
758
- children: jsx("p", {
995
+ children: [jsxs("p", {
759
996
  className: "text-gray-500",
760
- children: "Failed to load companies. Please try again later."
761
- })
997
+ children: [PRIMARY_COMPANY_CONSTANTS.ERRORS.FETCH_FAILED, ". Please try again later."]
998
+ }), jsx("button", {
999
+ onClick: refetch,
1000
+ className: "mt-2 px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600",
1001
+ children: "Retry"
1002
+ })]
762
1003
  });
763
1004
  }
764
- if (!isLoading && (!preIPOCompanySPV || preIPOCompanySPV.length === 0)) {
1005
+ if (!isLoading && preIPOCompanySPV.length === 0) {
765
1006
  return jsx("div", {
766
1007
  className: "bg-white rounded-lg shadow-sm p-8 text-center",
767
1008
  children: jsx("p", {