@cranberry-money/shared-utils 8.3.0 → 8.5.0

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.d.ts CHANGED
@@ -22,4 +22,6 @@ export { formatQuantityWithSuffix, formatLargeNumber, formatAsPercentage, format
22
22
  export { validateAllocations } from './allocations';
23
23
  export { calculatePortfolioValue, calculateHoldingAllocations, groupHoldingsByInstrument, filterHoldingsByMinQuantity, sortHoldings, } from './holdings';
24
24
  export { processAllocationData, calculateTotals, formatPercentage, formatDashboardCurrency, type AllocationDisplayItem, } from './dashboard';
25
+ export { isValidTemplateSelection, validatePortfolioSelection, type PortfolioSelectionValidation, type PortfolioSelectionState, } from './portfolio-validation';
26
+ export { getStatusColor, getStatusLabel, getWithdrawalTypeLabel, getReasonLabel, getLiquidationStatusColor, getLiquidationStatusLabel, type WithdrawalStatus, type WithdrawalType, type WithdrawalReason, type LiquidationStatus, } from './withdrawal-status';
25
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -44,3 +44,7 @@ export { validateAllocations } from './allocations';
44
44
  export { calculatePortfolioValue, calculateHoldingAllocations, groupHoldingsByInstrument, filterHoldingsByMinQuantity, sortHoldings, } from './holdings';
45
45
  // Dashboard utilities
46
46
  export { processAllocationData, calculateTotals, formatPercentage, formatDashboardCurrency, } from './dashboard';
47
+ // Portfolio validation utilities
48
+ export { isValidTemplateSelection, validatePortfolioSelection, } from './portfolio-validation';
49
+ // Withdrawal status utilities
50
+ export { getStatusColor, getStatusLabel, getWithdrawalTypeLabel, getReasonLabel, getLiquidationStatusColor, getLiquidationStatusLabel, } from './withdrawal-status';
@@ -0,0 +1,42 @@
1
+ import type { MessageFieldValidation, BaseFormValidation } from '@cranberry-money/shared-types';
2
+ /**
3
+ * Portfolio selection form validation interface
4
+ */
5
+ export interface PortfolioSelectionValidation extends BaseFormValidation {
6
+ readonly selectedTemplate: MessageFieldValidation;
7
+ }
8
+ /**
9
+ * Portfolio selection state interface
10
+ */
11
+ export interface PortfolioSelectionState {
12
+ readonly selectedTemplateUuid: string | null;
13
+ readonly viewingDetailsForUuid?: string | null;
14
+ }
15
+ /**
16
+ * Validates if a portfolio template is selected
17
+ *
18
+ * @param selectedTemplateUuid - The UUID of the selected template
19
+ * @returns true if a template is selected, false otherwise
20
+ *
21
+ * @example
22
+ * isValidTemplateSelection('123-456'); // returns true
23
+ * isValidTemplateSelection(null); // returns false
24
+ * isValidTemplateSelection(''); // returns false
25
+ */
26
+ export declare const isValidTemplateSelection: (selectedTemplateUuid: string | null) => boolean;
27
+ /**
28
+ * Comprehensive validation for portfolio selection form
29
+ *
30
+ * @param state - The portfolio selection state
31
+ * @returns Validation object with field-level and form-level validity
32
+ *
33
+ * @example
34
+ * const state = { selectedTemplateUuid: '123-456' };
35
+ * validatePortfolioSelection(state);
36
+ * // returns {
37
+ * // selectedTemplate: { isValid: true, message: '' },
38
+ * // isFormValid: true
39
+ * // }
40
+ */
41
+ export declare const validatePortfolioSelection: (state: PortfolioSelectionState) => PortfolioSelectionValidation;
42
+ //# sourceMappingURL=portfolio-validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"portfolio-validation.d.ts","sourceRoot":"","sources":["../src/portfolio-validation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAEhG;;GAEG;AACH,MAAM,WAAW,4BAA6B,SAAQ,kBAAkB;IACtE,QAAQ,CAAC,gBAAgB,EAAE,sBAAsB,CAAC;CACnD;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAChD;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,GAAI,sBAAsB,MAAM,GAAG,IAAI,KAAG,OAE9E,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,0BAA0B,GAAI,OAAO,uBAAuB,KAAG,4BAa3E,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Validates if a portfolio template is selected
3
+ *
4
+ * @param selectedTemplateUuid - The UUID of the selected template
5
+ * @returns true if a template is selected, false otherwise
6
+ *
7
+ * @example
8
+ * isValidTemplateSelection('123-456'); // returns true
9
+ * isValidTemplateSelection(null); // returns false
10
+ * isValidTemplateSelection(''); // returns false
11
+ */
12
+ export const isValidTemplateSelection = (selectedTemplateUuid) => {
13
+ return Boolean(selectedTemplateUuid);
14
+ };
15
+ /**
16
+ * Comprehensive validation for portfolio selection form
17
+ *
18
+ * @param state - The portfolio selection state
19
+ * @returns Validation object with field-level and form-level validity
20
+ *
21
+ * @example
22
+ * const state = { selectedTemplateUuid: '123-456' };
23
+ * validatePortfolioSelection(state);
24
+ * // returns {
25
+ * // selectedTemplate: { isValid: true, message: '' },
26
+ * // isFormValid: true
27
+ * // }
28
+ */
29
+ export const validatePortfolioSelection = (state) => {
30
+ const validation = {
31
+ selectedTemplate: {
32
+ isValid: isValidTemplateSelection(state.selectedTemplateUuid),
33
+ message: isValidTemplateSelection(state.selectedTemplateUuid) ? '' : 'Please select a portfolio template',
34
+ },
35
+ isFormValid: false,
36
+ };
37
+ // Overall form validity
38
+ validation.isFormValid = validation.selectedTemplate.isValid;
39
+ return validation;
40
+ };
@@ -0,0 +1,72 @@
1
+ import { WITHDRAWAL_STATUS_PENDING_REVIEW, WITHDRAWAL_STATUS_APPROVED, WITHDRAWAL_STATUS_REJECTED, WITHDRAWAL_STATUS_PROCESSING, WITHDRAWAL_STATUS_AWAITING_LIQUIDATION, WITHDRAWAL_STATUS_LIQUIDATION_IN_PROGRESS, WITHDRAWAL_STATUS_COMPLETED, WITHDRAWAL_STATUS_CANCELLED, WITHDRAWAL_STATUS_FAILED, WITHDRAWAL_TYPE_FULL_CASH, WITHDRAWAL_TYPE_PARTIAL_CASH, WITHDRAWAL_REASON_INVESTMENT_STRATEGY, WITHDRAWAL_REASON_PERSONAL_EXPENSES, WITHDRAWAL_REASON_EMERGENCY, WITHDRAWAL_REASON_OTHER, LIQUIDATION_STATUS_PENDING, LIQUIDATION_STATUS_TRADES_CREATED, LIQUIDATION_STATUS_EXECUTED, LIQUIDATION_STATUS_SETTLED, LIQUIDATION_STATUS_FAILED } from '@cranberry-money/shared-constants';
2
+ export type WithdrawalStatus = typeof WITHDRAWAL_STATUS_PENDING_REVIEW | typeof WITHDRAWAL_STATUS_APPROVED | typeof WITHDRAWAL_STATUS_REJECTED | typeof WITHDRAWAL_STATUS_PROCESSING | typeof WITHDRAWAL_STATUS_AWAITING_LIQUIDATION | typeof WITHDRAWAL_STATUS_LIQUIDATION_IN_PROGRESS | typeof WITHDRAWAL_STATUS_COMPLETED | typeof WITHDRAWAL_STATUS_CANCELLED | typeof WITHDRAWAL_STATUS_FAILED;
3
+ export type WithdrawalType = typeof WITHDRAWAL_TYPE_FULL_CASH | typeof WITHDRAWAL_TYPE_PARTIAL_CASH;
4
+ export type WithdrawalReason = typeof WITHDRAWAL_REASON_INVESTMENT_STRATEGY | typeof WITHDRAWAL_REASON_PERSONAL_EXPENSES | typeof WITHDRAWAL_REASON_EMERGENCY | typeof WITHDRAWAL_REASON_OTHER;
5
+ export type LiquidationStatus = typeof LIQUIDATION_STATUS_PENDING | typeof LIQUIDATION_STATUS_TRADES_CREATED | typeof LIQUIDATION_STATUS_EXECUTED | typeof LIQUIDATION_STATUS_SETTLED | typeof LIQUIDATION_STATUS_FAILED;
6
+ /**
7
+ * Get the color class for a withdrawal status
8
+ *
9
+ * @param status - The withdrawal status
10
+ * @returns The corresponding color class string
11
+ *
12
+ * @example
13
+ * getStatusColor('pending_review'); // returns 'text-warning-600'
14
+ * getStatusColor('completed'); // returns 'text-success-600'
15
+ */
16
+ export declare const getStatusColor: (status: WithdrawalStatus) => string;
17
+ /**
18
+ * Get the display label for a withdrawal status
19
+ *
20
+ * @param status - The withdrawal status
21
+ * @returns The human-readable label
22
+ *
23
+ * @example
24
+ * getStatusLabel('pending_review'); // returns 'Pending Review'
25
+ * getStatusLabel('liquidation_in_progress'); // returns 'Liquidation in Progress'
26
+ */
27
+ export declare const getStatusLabel: (status: WithdrawalStatus) => string;
28
+ /**
29
+ * Get the display label for a withdrawal type
30
+ *
31
+ * @param type - The withdrawal type
32
+ * @returns The human-readable label
33
+ *
34
+ * @example
35
+ * getWithdrawalTypeLabel('full_cash'); // returns 'Full Cash'
36
+ * getWithdrawalTypeLabel('partial_cash'); // returns 'Partial Cash'
37
+ */
38
+ export declare const getWithdrawalTypeLabel: (type: WithdrawalType) => string;
39
+ /**
40
+ * Get the display label for a withdrawal reason
41
+ *
42
+ * @param reason - The withdrawal reason (optional)
43
+ * @returns The human-readable label
44
+ *
45
+ * @example
46
+ * getReasonLabel('investment_strategy'); // returns 'Investment Strategy'
47
+ * getReasonLabel(null); // returns 'Not specified'
48
+ */
49
+ export declare const getReasonLabel: (reason: WithdrawalReason | null | undefined) => string;
50
+ /**
51
+ * Get the color class for a liquidation status
52
+ *
53
+ * @param status - The liquidation status
54
+ * @returns The corresponding color class string
55
+ *
56
+ * @example
57
+ * getLiquidationStatusColor('pending'); // returns 'text-warning-600'
58
+ * getLiquidationStatusColor('settled'); // returns 'text-success-600'
59
+ */
60
+ export declare const getLiquidationStatusColor: (status: LiquidationStatus) => string;
61
+ /**
62
+ * Get the display label for a liquidation status
63
+ *
64
+ * @param status - The liquidation status
65
+ * @returns The human-readable label
66
+ *
67
+ * @example
68
+ * getLiquidationStatusLabel('trades_created'); // returns 'Trades Created'
69
+ * getLiquidationStatusLabel('executed'); // returns 'Executed'
70
+ */
71
+ export declare const getLiquidationStatusLabel: (status: LiquidationStatus) => string;
72
+ //# sourceMappingURL=withdrawal-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withdrawal-status.d.ts","sourceRoot":"","sources":["../src/withdrawal-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,gCAAgC,EAChC,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,EAC5B,sCAAsC,EACtC,yCAAyC,EACzC,2BAA2B,EAC3B,2BAA2B,EAC3B,wBAAwB,EAUxB,yBAAyB,EACzB,4BAA4B,EAG5B,qCAAqC,EACrC,mCAAmC,EACnC,2BAA2B,EAC3B,uBAAuB,EAKvB,0BAA0B,EAC1B,iCAAiC,EACjC,2BAA2B,EAC3B,0BAA0B,EAC1B,yBAAyB,EAM1B,MAAM,mCAAmC,CAAC;AAG3C,MAAM,MAAM,gBAAgB,GACxB,OAAO,gCAAgC,GACvC,OAAO,0BAA0B,GACjC,OAAO,0BAA0B,GACjC,OAAO,4BAA4B,GACnC,OAAO,sCAAsC,GAC7C,OAAO,yCAAyC,GAChD,OAAO,2BAA2B,GAClC,OAAO,2BAA2B,GAClC,OAAO,wBAAwB,CAAC;AAEpC,MAAM,MAAM,cAAc,GAAG,OAAO,yBAAyB,GAAG,OAAO,4BAA4B,CAAC;AAEpG,MAAM,MAAM,gBAAgB,GACxB,OAAO,qCAAqC,GAC5C,OAAO,mCAAmC,GAC1C,OAAO,2BAA2B,GAClC,OAAO,uBAAuB,CAAC;AAEnC,MAAM,MAAM,iBAAiB,GACzB,OAAO,0BAA0B,GACjC,OAAO,iCAAiC,GACxC,OAAO,2BAA2B,GAClC,OAAO,0BAA0B,GACjC,OAAO,yBAAyB,CAAC;AAErC;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,gBAAgB,KAAG,MAazD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,gBAAgB,KAAG,MAazD,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,GAAI,MAAM,cAAc,KAAG,MAM7D,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,cAAc,GAAI,QAAQ,gBAAgB,GAAG,IAAI,GAAG,SAAS,KAAG,MAU5E,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,GAAI,QAAQ,iBAAiB,KAAG,MASrE,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,yBAAyB,GAAI,QAAQ,iBAAiB,KAAG,MASrE,CAAC"}
@@ -0,0 +1,127 @@
1
+ import { STATUS_COLOR_PENDING, STATUS_COLOR_APPROVED, STATUS_COLOR_REJECTED, STATUS_COLOR_PROCESSING, STATUS_COLOR_AWAITING, STATUS_COLOR_IN_PROGRESS, STATUS_COLOR_COMPLETED, STATUS_COLOR_CANCELLED, STATUS_COLOR_FAILED, STATUS_COLOR_DEFAULT, WITHDRAWAL_STATUS_PENDING_REVIEW, WITHDRAWAL_STATUS_APPROVED, WITHDRAWAL_STATUS_REJECTED, WITHDRAWAL_STATUS_PROCESSING, WITHDRAWAL_STATUS_AWAITING_LIQUIDATION, WITHDRAWAL_STATUS_LIQUIDATION_IN_PROGRESS, WITHDRAWAL_STATUS_COMPLETED, WITHDRAWAL_STATUS_CANCELLED, WITHDRAWAL_STATUS_FAILED, WITHDRAWAL_STATUS_LABEL_PENDING_REVIEW, WITHDRAWAL_STATUS_LABEL_APPROVED, WITHDRAWAL_STATUS_LABEL_REJECTED, WITHDRAWAL_STATUS_LABEL_PROCESSING, WITHDRAWAL_STATUS_LABEL_AWAITING_LIQUIDATION, WITHDRAWAL_STATUS_LABEL_LIQUIDATION_IN_PROGRESS, WITHDRAWAL_STATUS_LABEL_COMPLETED, WITHDRAWAL_STATUS_LABEL_CANCELLED, WITHDRAWAL_STATUS_LABEL_FAILED, WITHDRAWAL_TYPE_FULL_CASH, WITHDRAWAL_TYPE_PARTIAL_CASH, WITHDRAWAL_TYPE_LABEL_FULL_CASH, WITHDRAWAL_TYPE_LABEL_PARTIAL_CASH, WITHDRAWAL_REASON_INVESTMENT_STRATEGY, WITHDRAWAL_REASON_PERSONAL_EXPENSES, WITHDRAWAL_REASON_EMERGENCY, WITHDRAWAL_REASON_OTHER, WITHDRAWAL_REASON_LABEL_INVESTMENT_STRATEGY, WITHDRAWAL_REASON_LABEL_PERSONAL_EXPENSES, WITHDRAWAL_REASON_LABEL_EMERGENCY, WITHDRAWAL_REASON_LABEL_OTHER, LIQUIDATION_STATUS_PENDING, LIQUIDATION_STATUS_TRADES_CREATED, LIQUIDATION_STATUS_EXECUTED, LIQUIDATION_STATUS_SETTLED, LIQUIDATION_STATUS_FAILED, LIQUIDATION_STATUS_LABEL_PENDING, LIQUIDATION_STATUS_LABEL_TRADES_CREATED, LIQUIDATION_STATUS_LABEL_EXECUTED, LIQUIDATION_STATUS_LABEL_SETTLED, LIQUIDATION_STATUS_LABEL_FAILED, } from '@cranberry-money/shared-constants';
2
+ /**
3
+ * Get the color class for a withdrawal status
4
+ *
5
+ * @param status - The withdrawal status
6
+ * @returns The corresponding color class string
7
+ *
8
+ * @example
9
+ * getStatusColor('pending_review'); // returns 'text-warning-600'
10
+ * getStatusColor('completed'); // returns 'text-success-600'
11
+ */
12
+ export const getStatusColor = (status) => {
13
+ const statusColors = {
14
+ [WITHDRAWAL_STATUS_PENDING_REVIEW]: STATUS_COLOR_PENDING,
15
+ [WITHDRAWAL_STATUS_APPROVED]: STATUS_COLOR_APPROVED,
16
+ [WITHDRAWAL_STATUS_REJECTED]: STATUS_COLOR_REJECTED,
17
+ [WITHDRAWAL_STATUS_PROCESSING]: STATUS_COLOR_PROCESSING,
18
+ [WITHDRAWAL_STATUS_AWAITING_LIQUIDATION]: STATUS_COLOR_AWAITING,
19
+ [WITHDRAWAL_STATUS_LIQUIDATION_IN_PROGRESS]: STATUS_COLOR_IN_PROGRESS,
20
+ [WITHDRAWAL_STATUS_COMPLETED]: STATUS_COLOR_COMPLETED,
21
+ [WITHDRAWAL_STATUS_CANCELLED]: STATUS_COLOR_CANCELLED,
22
+ [WITHDRAWAL_STATUS_FAILED]: STATUS_COLOR_FAILED,
23
+ };
24
+ return statusColors[status] || STATUS_COLOR_DEFAULT;
25
+ };
26
+ /**
27
+ * Get the display label for a withdrawal status
28
+ *
29
+ * @param status - The withdrawal status
30
+ * @returns The human-readable label
31
+ *
32
+ * @example
33
+ * getStatusLabel('pending_review'); // returns 'Pending Review'
34
+ * getStatusLabel('liquidation_in_progress'); // returns 'Liquidation in Progress'
35
+ */
36
+ export const getStatusLabel = (status) => {
37
+ const statusLabels = {
38
+ [WITHDRAWAL_STATUS_PENDING_REVIEW]: WITHDRAWAL_STATUS_LABEL_PENDING_REVIEW,
39
+ [WITHDRAWAL_STATUS_APPROVED]: WITHDRAWAL_STATUS_LABEL_APPROVED,
40
+ [WITHDRAWAL_STATUS_REJECTED]: WITHDRAWAL_STATUS_LABEL_REJECTED,
41
+ [WITHDRAWAL_STATUS_PROCESSING]: WITHDRAWAL_STATUS_LABEL_PROCESSING,
42
+ [WITHDRAWAL_STATUS_AWAITING_LIQUIDATION]: WITHDRAWAL_STATUS_LABEL_AWAITING_LIQUIDATION,
43
+ [WITHDRAWAL_STATUS_LIQUIDATION_IN_PROGRESS]: WITHDRAWAL_STATUS_LABEL_LIQUIDATION_IN_PROGRESS,
44
+ [WITHDRAWAL_STATUS_COMPLETED]: WITHDRAWAL_STATUS_LABEL_COMPLETED,
45
+ [WITHDRAWAL_STATUS_CANCELLED]: WITHDRAWAL_STATUS_LABEL_CANCELLED,
46
+ [WITHDRAWAL_STATUS_FAILED]: WITHDRAWAL_STATUS_LABEL_FAILED,
47
+ };
48
+ return statusLabels[status] || status;
49
+ };
50
+ /**
51
+ * Get the display label for a withdrawal type
52
+ *
53
+ * @param type - The withdrawal type
54
+ * @returns The human-readable label
55
+ *
56
+ * @example
57
+ * getWithdrawalTypeLabel('full_cash'); // returns 'Full Cash'
58
+ * getWithdrawalTypeLabel('partial_cash'); // returns 'Partial Cash'
59
+ */
60
+ export const getWithdrawalTypeLabel = (type) => {
61
+ const typeLabels = {
62
+ [WITHDRAWAL_TYPE_FULL_CASH]: WITHDRAWAL_TYPE_LABEL_FULL_CASH,
63
+ [WITHDRAWAL_TYPE_PARTIAL_CASH]: WITHDRAWAL_TYPE_LABEL_PARTIAL_CASH,
64
+ };
65
+ return typeLabels[type] || type;
66
+ };
67
+ /**
68
+ * Get the display label for a withdrawal reason
69
+ *
70
+ * @param reason - The withdrawal reason (optional)
71
+ * @returns The human-readable label
72
+ *
73
+ * @example
74
+ * getReasonLabel('investment_strategy'); // returns 'Investment Strategy'
75
+ * getReasonLabel(null); // returns 'Not specified'
76
+ */
77
+ export const getReasonLabel = (reason) => {
78
+ if (!reason)
79
+ return 'Not specified';
80
+ const reasonLabels = {
81
+ [WITHDRAWAL_REASON_INVESTMENT_STRATEGY]: WITHDRAWAL_REASON_LABEL_INVESTMENT_STRATEGY,
82
+ [WITHDRAWAL_REASON_PERSONAL_EXPENSES]: WITHDRAWAL_REASON_LABEL_PERSONAL_EXPENSES,
83
+ [WITHDRAWAL_REASON_EMERGENCY]: WITHDRAWAL_REASON_LABEL_EMERGENCY,
84
+ [WITHDRAWAL_REASON_OTHER]: WITHDRAWAL_REASON_LABEL_OTHER,
85
+ };
86
+ return reasonLabels[reason] || reason;
87
+ };
88
+ /**
89
+ * Get the color class for a liquidation status
90
+ *
91
+ * @param status - The liquidation status
92
+ * @returns The corresponding color class string
93
+ *
94
+ * @example
95
+ * getLiquidationStatusColor('pending'); // returns 'text-warning-600'
96
+ * getLiquidationStatusColor('settled'); // returns 'text-success-600'
97
+ */
98
+ export const getLiquidationStatusColor = (status) => {
99
+ const statusColors = {
100
+ [LIQUIDATION_STATUS_PENDING]: 'text-warning-600',
101
+ [LIQUIDATION_STATUS_TRADES_CREATED]: 'text-primary-600',
102
+ [LIQUIDATION_STATUS_EXECUTED]: 'text-accent-secondary',
103
+ [LIQUIDATION_STATUS_SETTLED]: 'text-success-600',
104
+ [LIQUIDATION_STATUS_FAILED]: 'text-error-600',
105
+ };
106
+ return statusColors[status] || 'text-content-muted';
107
+ };
108
+ /**
109
+ * Get the display label for a liquidation status
110
+ *
111
+ * @param status - The liquidation status
112
+ * @returns The human-readable label
113
+ *
114
+ * @example
115
+ * getLiquidationStatusLabel('trades_created'); // returns 'Trades Created'
116
+ * getLiquidationStatusLabel('executed'); // returns 'Executed'
117
+ */
118
+ export const getLiquidationStatusLabel = (status) => {
119
+ const statusLabels = {
120
+ [LIQUIDATION_STATUS_PENDING]: LIQUIDATION_STATUS_LABEL_PENDING,
121
+ [LIQUIDATION_STATUS_TRADES_CREATED]: LIQUIDATION_STATUS_LABEL_TRADES_CREATED,
122
+ [LIQUIDATION_STATUS_EXECUTED]: LIQUIDATION_STATUS_LABEL_EXECUTED,
123
+ [LIQUIDATION_STATUS_SETTLED]: LIQUIDATION_STATUS_LABEL_SETTLED,
124
+ [LIQUIDATION_STATUS_FAILED]: LIQUIDATION_STATUS_LABEL_FAILED,
125
+ };
126
+ return statusLabels[status] || status;
127
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cranberry-money/shared-utils",
3
- "version": "8.3.0",
3
+ "version": "8.5.0",
4
4
  "description": "Shared utility functions for MyPortfolio platform",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",