@appcorp/stellar-solutions-modules 0.1.34 → 0.1.36
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +128 -19
- package/components/theme-provider.d.ts +9 -0
- package/components/theme-provider.js +122 -0
- package/components/theme-switcher.d.ts +4 -0
- package/components/theme-switcher.js +60 -0
- package/components/ui/badge.d.ts +9 -0
- package/components/ui/badge.js +82 -0
- package/components/ui/button.d.ts +10 -0
- package/components/ui/button.js +91 -0
- package/components/ui/card.d.ts +9 -0
- package/components/ui/card.js +94 -0
- package/components/ui/checkbox.d.ts +9 -0
- package/components/ui/checkbox.js +87 -0
- package/components/ui/combobox.d.ts +70 -0
- package/components/ui/combobox.js +315 -0
- package/components/ui/command.d.ts +18 -0
- package/components/ui/command.js +115 -0
- package/components/ui/dialog.d.ts +15 -0
- package/components/ui/dialog.js +118 -0
- package/components/ui/drawer.d.ts +13 -0
- package/components/ui/drawer.js +115 -0
- package/components/ui/dropdown-menu.d.ts +25 -0
- package/components/ui/dropdown-menu.js +148 -0
- package/components/ui/enhanced-table-footer-action.d.ts +34 -0
- package/components/ui/enhanced-table-footer-action.js +117 -0
- package/components/ui/enhanced-table-footer-page.d.ts +32 -0
- package/components/ui/enhanced-table-footer-page.js +140 -0
- package/components/ui/enhanced-table-footer-pagination.d.ts +36 -0
- package/components/ui/enhanced-table-footer-pagination.js +122 -0
- package/components/ui/enhanced-table-header-action.d.ts +7 -0
- package/components/ui/enhanced-table-header-action.js +21 -0
- package/components/ui/enhanced-table-header-search.d.ts +12 -0
- package/components/ui/enhanced-table-header-search.js +17 -0
- package/components/ui/enhanced-table.d.ts +65 -0
- package/components/ui/enhanced-table.js +87 -0
- package/components/ui/form.d.ts +24 -0
- package/components/ui/form.js +125 -0
- package/components/ui/input.d.ts +8 -0
- package/components/ui/input.js +86 -0
- package/components/ui/label.d.ts +7 -0
- package/components/ui/label.js +68 -0
- package/components/ui/popover.d.ts +7 -0
- package/components/ui/popover.js +82 -0
- package/components/ui/select.d.ts +15 -0
- package/components/ui/select.js +127 -0
- package/components/ui/separator.d.ts +4 -0
- package/components/ui/separator.js +66 -0
- package/components/ui/sonner.d.ts +4 -0
- package/components/ui/sonner.js +54 -0
- package/components/ui/switch.d.ts +9 -0
- package/components/ui/switch.js +89 -0
- package/components/ui/table.d.ts +10 -0
- package/components/ui/table.js +101 -0
- package/components/ui/textarea.d.ts +8 -0
- package/components/ui/textarea.js +86 -0
- package/global-modules/bank/actions.d.ts +200 -0
- package/global-modules/bank/actions.js +124 -0
- package/global-modules/bank/bank.d.ts +2 -0
- package/global-modules/bank/bank.js +87 -0
- package/global-modules/bank/constants.d.ts +45 -0
- package/global-modules/bank/constants.js +98 -0
- package/global-modules/bank/context.d.ts +41 -0
- package/global-modules/bank/context.js +419 -0
- package/global-modules/bank/drawer.d.ts +31 -0
- package/global-modules/bank/drawer.js +114 -0
- package/global-modules/bank/form.d.ts +22 -0
- package/global-modules/bank/form.js +68 -0
- package/global-modules/bank/reducer.d.ts +25 -0
- package/global-modules/bank/reducer.js +161 -0
- package/global-modules/bank/types.d.ts +217 -0
- package/global-modules/bank/types.js +81 -0
- package/global-modules/bank/validate.d.ts +13 -0
- package/global-modules/bank/validate.js +22 -0
- package/global-modules/branch/actions.d.ts +154 -37
- package/global-modules/branch/actions.js +148 -6
- package/global-modules/branch/branch.d.ts +2 -2
- package/global-modules/branch/branch.js +46 -32
- package/global-modules/branch/constants.d.ts +34 -24
- package/global-modules/branch/constants.js +101 -122
- package/global-modules/branch/context.d.ts +33 -2
- package/global-modules/branch/context.js +195 -164
- package/global-modules/branch/drawer.d.ts +26 -3
- package/global-modules/branch/drawer.js +101 -6
- package/global-modules/branch/form.d.ts +15 -1
- package/global-modules/branch/form.js +54 -71
- package/global-modules/branch/reducer.d.ts +23 -2
- package/global-modules/branch/reducer.js +148 -118
- package/global-modules/branch/types.d.ts +196 -69
- package/global-modules/branch/types.js +66 -7
- package/global-modules/branch/validate.d.ts +1 -1
- package/global-modules/branch/validate.js +15 -11
- package/global-modules/payment-mode/actions.d.ts +154 -37
- package/global-modules/payment-mode/actions.js +148 -6
- package/global-modules/payment-mode/constants.d.ts +34 -17
- package/global-modules/payment-mode/constants.js +90 -66
- package/global-modules/payment-mode/context.d.ts +33 -2
- package/global-modules/payment-mode/context.js +185 -163
- package/global-modules/payment-mode/drawer.d.ts +26 -3
- package/global-modules/payment-mode/drawer.js +104 -9
- package/global-modules/payment-mode/form.d.ts +16 -2
- package/global-modules/payment-mode/form.js +45 -74
- package/global-modules/payment-mode/payment-mode.d.ts +25 -2
- package/global-modules/payment-mode/payment-mode.js +90 -23
- package/global-modules/payment-mode/reducer.d.ts +23 -2
- package/global-modules/payment-mode/reducer.js +140 -114
- package/global-modules/payment-mode/types.d.ts +327 -112
- package/global-modules/payment-mode/types.js +162 -11
- package/global-modules/payment-mode/validate.d.ts +1 -1
- package/global-modules/payment-mode/validate.js +7 -5
- package/global-modules/preferences/actions.d.ts +126 -27
- package/global-modules/preferences/actions.js +128 -4
- package/global-modules/preferences/constants.d.ts +46 -31
- package/global-modules/preferences/constants.js +129 -66
- package/global-modules/preferences/context.d.ts +2 -2
- package/global-modules/preferences/context.js +43 -43
- package/global-modules/preferences/currency.js +15 -10
- package/global-modules/preferences/preferences.d.ts +2 -2
- package/global-modules/preferences/preferences.js +3 -5
- package/global-modules/preferences/validate.d.ts +1 -1
- package/global-modules/preferences/validate.js +7 -7
- package/global-modules/tax/actions.d.ts +155 -38
- package/global-modules/tax/actions.js +149 -7
- package/global-modules/tax/constants.d.ts +31 -39
- package/global-modules/tax/constants.js +83 -114
- package/global-modules/tax/context.d.ts +33 -2
- package/global-modules/tax/context.js +146 -132
- package/global-modules/tax/drawer.d.ts +26 -3
- package/global-modules/tax/drawer.js +101 -6
- package/global-modules/tax/form.d.ts +20 -3
- package/global-modules/tax/form.js +101 -74
- package/global-modules/tax/reducer.d.ts +23 -2
- package/global-modules/tax/reducer.js +143 -24
- package/global-modules/tax/tax.d.ts +25 -2
- package/global-modules/tax/tax.js +92 -28
- package/global-modules/tax/types.d.ts +332 -102
- package/global-modules/tax/types.js +179 -11
- package/global-modules/tax/validate.d.ts +1 -1
- package/global-modules/tax/validate.js +9 -8
- package/hooks/use-rtl.d.ts +44 -0
- package/hooks/use-rtl.js +75 -0
- package/i18n/navigation.d.ts +340 -0
- package/i18n/navigation.js +9 -0
- package/i18n/request.d.ts +2 -0
- package/i18n/request.js +95 -0
- package/i18n/routing.d.ts +18 -0
- package/i18n/routing.js +9 -0
- package/index.d.ts +26 -0
- package/index.js +42 -0
- package/lib/themes.d.ts +147 -0
- package/lib/themes.js +150 -0
- package/lib/toast-utils.d.ts +44 -0
- package/lib/toast-utils.js +212 -0
- package/lib/utils.d.ts +2 -0
- package/lib/utils.js +12 -0
- package/package.json +21 -3
- package/supabase/supabase.d.ts +80 -1
- package/supabase/supabase.js +281 -6
- package/global-modules/branch/form-elements.d.ts +0 -3
- package/global-modules/branch/form-elements.js +0 -41
- package/global-modules/payment-mode/form-elements.d.ts +0 -3
- package/global-modules/payment-mode/form-elements.js +0 -41
- package/global-modules/preferences/bank.d.ts +0 -2
- package/global-modules/preferences/bank.js +0 -11
- package/global-modules/preferences/branch-drawer.js +0 -36
- package/global-modules/preferences/branch-form-elements.js +0 -30
- package/global-modules/preferences/branch-form.d.ts +0 -0
- package/global-modules/preferences/branch-form.js +0 -33
- package/global-modules/preferences/branch.d.ts +0 -0
- package/global-modules/preferences/branch.js +0 -106
- package/global-modules/preferences/payment-mode-drawer.d.ts +0 -0
- package/global-modules/preferences/payment-mode-drawer.js +0 -36
- package/global-modules/preferences/payment-mode-form-elements.d.ts +0 -0
- package/global-modules/preferences/payment-mode-form-elements.js +0 -30
- package/global-modules/preferences/payment-mode-form.d.ts +0 -0
- package/global-modules/preferences/payment-mode-form.js +0 -33
- package/global-modules/preferences/payment-mode.d.ts +0 -0
- package/global-modules/preferences/payment-mode.js +0 -94
- package/global-modules/tax/form-elements.d.ts +0 -3
- package/global-modules/tax/form-elements.js +0 -41
- /package/{global-modules/preferences/branch-drawer.d.ts → constants.d.ts} +0 -0
- /package/{global-modules/preferences/branch-form-elements.d.ts → constants.js} +0 -0
|
@@ -1,4 +1,35 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Payment Mode State Context
|
|
3
|
+
*
|
|
4
|
+
* This module provides comprehensive state management for the Payment Mode feature including:
|
|
5
|
+
* - CRUD operations (create, read, update, delete)
|
|
6
|
+
* - Form validation and error handling
|
|
7
|
+
* - Search and filtering functionality
|
|
8
|
+
* - Pagination controls
|
|
9
|
+
* - Internationalization support
|
|
10
|
+
* - Theme-aware toast notifications
|
|
11
|
+
*
|
|
12
|
+
* Organization:
|
|
13
|
+
* - Types & Interfaces
|
|
14
|
+
* - Main Hook (usePaymentModeState)
|
|
15
|
+
* - State & Core Hooks
|
|
16
|
+
* - Debounced Values
|
|
17
|
+
* - API Parameters (memoized)
|
|
18
|
+
* - API Callbacks (with error handling)
|
|
19
|
+
* - Module Entity Hook
|
|
20
|
+
* - Effects (list refresh)
|
|
21
|
+
* - Drawer & Modal Handlers
|
|
22
|
+
* - CRUD Operation Handlers
|
|
23
|
+
* - Form Handlers
|
|
24
|
+
* - Pagination Handlers
|
|
25
|
+
* - Search Handlers
|
|
26
|
+
* - Table Actions (memoized)
|
|
27
|
+
* - Return State
|
|
28
|
+
* - Context Setup
|
|
29
|
+
* - Provider Component
|
|
30
|
+
* - Custom Hook
|
|
31
|
+
*/
|
|
32
|
+
"use client";
|
|
2
33
|
"use strict";
|
|
3
34
|
var __assign = (this && this.__assign) || function () {
|
|
4
35
|
__assign = Object.assign || function(t) {
|
|
@@ -47,41 +78,72 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
47
78
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
79
|
exports.usePaymentModeStateContext = exports.PaymentModeStateContextProvider = exports.PaymentModeStateContext = void 0;
|
|
49
80
|
var react_1 = __importStar(require("react"));
|
|
81
|
+
var next_themes_1 = require("next-themes");
|
|
82
|
+
var next_intl_1 = require("next-intl");
|
|
50
83
|
var util_functions_1 = require("@react-pakistan/util-functions");
|
|
51
|
-
// import { VISTA_FORM_ELEMENTS } from '@appcorp/app-corp-vista/utils/form-schema';
|
|
52
|
-
var vista_notification_type_1 = require("@appcorp/app-corp-vista/type/vista-notification-type");
|
|
53
|
-
// import { VistaTextInputV1Props } from '@appcorp/app-corp-vista/type/vista-text-input-type';
|
|
54
|
-
// import { VistaFormElements } from '@appcorp/app-corp-vista/type/vista-form-elements';
|
|
55
84
|
var actions_1 = require("./actions");
|
|
56
85
|
var constants_1 = require("./constants");
|
|
57
86
|
var reducer_1 = require("./reducer");
|
|
87
|
+
var toast_utils_1 = require("@/lib/toast-utils");
|
|
58
88
|
var types_1 = require("./types");
|
|
59
|
-
// import { formValidation } from './validate';
|
|
60
|
-
// import { VistaComboboxV1Props } from '@appcorp/app-corp-vista/type/vista-combobox-type';
|
|
61
|
-
var generate_toast_1 = require("@appcorp/app-corp-vista/utils/generate-toast");
|
|
62
|
-
// import { VistaComboboxV1Props } from '@appcorp/app-corp-vista/type/vista-combobox-type';
|
|
63
|
-
var form_schema_1 = require("@appcorp/app-corp-vista/utils/form-schema");
|
|
64
|
-
// import { VistaTextAreaV1Props } from '@appcorp/app-corp-vista/type/vista-text-area-type';
|
|
65
89
|
var validate_1 = require("./validate");
|
|
66
90
|
var context_1 = require("../preferences/context");
|
|
91
|
+
// ============================================================================
|
|
92
|
+
// MAIN HOOK
|
|
93
|
+
// ============================================================================
|
|
67
94
|
var usePaymentModeState = function () {
|
|
95
|
+
// ---------------------------------------------------------------------------
|
|
96
|
+
// STATE & CORE HOOKS
|
|
97
|
+
// ---------------------------------------------------------------------------
|
|
68
98
|
var _a = (0, react_1.useReducer)(reducer_1.paymentModeReducer, reducer_1.initialPaymentModeState), state = _a[0], dispatch = _a[1];
|
|
69
99
|
var _b = (0, context_1.usePreferenceStateContext)(), preferences = _b.preferences, activeTab = _b.activeTab;
|
|
70
|
-
|
|
71
|
-
|
|
100
|
+
var theme = (0, next_themes_1.useTheme)().theme;
|
|
101
|
+
var t = (0, next_intl_1.useTranslations)("paymentModePage");
|
|
102
|
+
// ---------------------------------------------------------------------------
|
|
103
|
+
// DEBOUNCED VALUES
|
|
104
|
+
// ---------------------------------------------------------------------------
|
|
72
105
|
var debouncedQuery = (0, util_functions_1.useDebounce)(state.searchQuery, 800);
|
|
73
|
-
|
|
106
|
+
// ---------------------------------------------------------------------------
|
|
107
|
+
// API PARAMETERS (memoized)
|
|
108
|
+
// ---------------------------------------------------------------------------
|
|
109
|
+
var listParams = (0, react_1.useMemo)(function () { return ({
|
|
74
110
|
currentPage: state.currentPage,
|
|
75
111
|
pageLimit: state.pageLimit,
|
|
76
112
|
searchQuery: state.searchQuery,
|
|
77
|
-
};
|
|
78
|
-
var
|
|
113
|
+
}); }, [state.currentPage, state.pageLimit, state.searchQuery]);
|
|
114
|
+
var updateParams = (0, react_1.useMemo)(function () {
|
|
115
|
+
var _a;
|
|
116
|
+
return ({
|
|
117
|
+
enabled: state.enabled,
|
|
118
|
+
id: state.id,
|
|
119
|
+
isDefault: state.isDefault,
|
|
120
|
+
preferenceId: (_a = preferences[0]) === null || _a === void 0 ? void 0 : _a.id,
|
|
121
|
+
label: state.label.trim(),
|
|
122
|
+
});
|
|
123
|
+
}, [state.enabled, state.id, state.isDefault, state.label, preferences]);
|
|
124
|
+
var byIdParams = (0, react_1.useMemo)(function () { return ({ id: state.id }); }, [state.id]);
|
|
125
|
+
var deleteParams = (0, react_1.useMemo)(function () { return ({ id: state.id }); }, [state.id]);
|
|
126
|
+
// ---------------------------------------------------------------------------
|
|
127
|
+
// API CALLBACKS (with error handling)
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
var showErrorToast = (0, react_1.useCallback)(function (description) {
|
|
130
|
+
(0, toast_utils_1.generateThemeToast)({
|
|
131
|
+
variant: toast_utils_1.TOAST_VARIANT.ERROR,
|
|
132
|
+
description: description,
|
|
133
|
+
theme: theme,
|
|
134
|
+
});
|
|
135
|
+
}, [theme]);
|
|
136
|
+
var showSuccessToast = (0, react_1.useCallback)(function (description) {
|
|
137
|
+
(0, toast_utils_1.generateThemeToast)({
|
|
138
|
+
variant: toast_utils_1.TOAST_VARIANT.SUCCESS,
|
|
139
|
+
description: description,
|
|
140
|
+
theme: theme,
|
|
141
|
+
});
|
|
142
|
+
}, [theme]);
|
|
143
|
+
var listCallback = (0, react_1.useCallback)(function (_a) {
|
|
79
144
|
var data = _a.data, error = _a.error;
|
|
80
145
|
if (error) {
|
|
81
|
-
(
|
|
82
|
-
variant: vista_notification_type_1.VISTA_NOTIFICATION_V1_VARIANT.ERROR,
|
|
83
|
-
description: constants_1.toastErrors.fetchInvoiceError,
|
|
84
|
-
});
|
|
146
|
+
showErrorToast(constants_1.toastErrors.fetchInvoiceError);
|
|
85
147
|
}
|
|
86
148
|
if (data === null || data === void 0 ? void 0 : data.items) {
|
|
87
149
|
dispatch({
|
|
@@ -93,53 +155,30 @@ var usePaymentModeState = function () {
|
|
|
93
155
|
payload: { count: data === null || data === void 0 ? void 0 : data.count },
|
|
94
156
|
});
|
|
95
157
|
}
|
|
96
|
-
};
|
|
97
|
-
var
|
|
98
|
-
var _a;
|
|
99
|
-
return ({
|
|
100
|
-
enabled: state.enabled,
|
|
101
|
-
id: state.id,
|
|
102
|
-
isDefault: state.isDefault,
|
|
103
|
-
preferenceId: (_a = preferences[0]) === null || _a === void 0 ? void 0 : _a.id,
|
|
104
|
-
label: state.label.trim(),
|
|
105
|
-
});
|
|
106
|
-
}, [state, preferences]);
|
|
107
|
-
var updateCallback = function (_a) {
|
|
158
|
+
}, [showErrorToast]);
|
|
159
|
+
var updateCallback = (0, react_1.useCallback)(function (_a) {
|
|
108
160
|
var data = _a.data, error = _a.error;
|
|
109
161
|
if (error) {
|
|
110
|
-
(
|
|
111
|
-
description: constants_1.toastErrors.networkError,
|
|
112
|
-
variant: vista_notification_type_1.VISTA_NOTIFICATION_V1_VARIANT.ERROR,
|
|
113
|
-
});
|
|
162
|
+
showErrorToast(constants_1.toastErrors.networkError);
|
|
114
163
|
}
|
|
115
164
|
if (data) {
|
|
116
|
-
(
|
|
117
|
-
description: constants_1.toastErrors.networkError,
|
|
118
|
-
variant: vista_notification_type_1.VISTA_NOTIFICATION_V1_VARIANT.SUCCESS,
|
|
119
|
-
});
|
|
165
|
+
showSuccessToast(t("messages.paymentModeUpdated"));
|
|
120
166
|
dispatch({
|
|
121
167
|
type: actions_1.PAYMENT_MODE_ACTION_TYPES.RESET_FORM,
|
|
122
168
|
});
|
|
123
169
|
dispatch({
|
|
124
170
|
type: actions_1.PAYMENT_MODE_ACTION_TYPES.RESET_ERRORS,
|
|
125
171
|
});
|
|
126
|
-
listFetchNow();
|
|
127
172
|
dispatch({
|
|
128
173
|
type: actions_1.PAYMENT_MODE_ACTION_TYPES.SET_DRAWER,
|
|
129
174
|
payload: { drawer: null },
|
|
130
175
|
});
|
|
131
176
|
}
|
|
132
|
-
};
|
|
133
|
-
var
|
|
134
|
-
id: state.id,
|
|
135
|
-
};
|
|
136
|
-
var byIdCallback = function (_a) {
|
|
177
|
+
}, [showErrorToast, showSuccessToast, t]);
|
|
178
|
+
var byIdCallback = (0, react_1.useCallback)(function (_a) {
|
|
137
179
|
var data = _a.data, error = _a.error;
|
|
138
180
|
if (error) {
|
|
139
|
-
(
|
|
140
|
-
description: constants_1.toastErrors.networkError,
|
|
141
|
-
variant: vista_notification_type_1.VISTA_NOTIFICATION_V1_VARIANT.ERROR,
|
|
142
|
-
});
|
|
181
|
+
showErrorToast(constants_1.toastErrors.networkError);
|
|
143
182
|
}
|
|
144
183
|
if (data) {
|
|
145
184
|
dispatch({
|
|
@@ -151,29 +190,22 @@ var usePaymentModeState = function () {
|
|
|
151
190
|
payload: { drawer: types_1.PAYMENT_MODE_DRAWER.FORM_DRAWER },
|
|
152
191
|
});
|
|
153
192
|
}
|
|
154
|
-
};
|
|
155
|
-
var
|
|
156
|
-
id: state.id,
|
|
157
|
-
};
|
|
158
|
-
var deleteCallback = function (_a) {
|
|
193
|
+
}, [showErrorToast]);
|
|
194
|
+
var deleteCallback = (0, react_1.useCallback)(function (_a) {
|
|
159
195
|
var data = _a.data, error = _a.error;
|
|
160
196
|
if (error) {
|
|
161
|
-
(
|
|
162
|
-
description: constants_1.toastErrors.networkError,
|
|
163
|
-
variant: vista_notification_type_1.VISTA_NOTIFICATION_V1_VARIANT.ERROR,
|
|
164
|
-
});
|
|
197
|
+
showErrorToast(constants_1.toastErrors.networkError);
|
|
165
198
|
}
|
|
166
199
|
if (data) {
|
|
167
|
-
(
|
|
168
|
-
description: constants_1.toastErrors.networkError,
|
|
169
|
-
variant: vista_notification_type_1.VISTA_NOTIFICATION_V1_VARIANT.SUCCESS,
|
|
170
|
-
});
|
|
200
|
+
showSuccessToast(t("messages.paymentModeDeleted"));
|
|
171
201
|
dispatch({
|
|
172
202
|
type: actions_1.PAYMENT_MODE_ACTION_TYPES.RESET_FORM,
|
|
173
203
|
});
|
|
174
|
-
listFetchNow();
|
|
175
204
|
}
|
|
176
|
-
};
|
|
205
|
+
}, [showErrorToast, showSuccessToast, t]);
|
|
206
|
+
// ---------------------------------------------------------------------------
|
|
207
|
+
// MODULE ENTITY HOOK
|
|
208
|
+
// ---------------------------------------------------------------------------
|
|
177
209
|
var _c = (0, util_functions_1.useModuleEntity)({
|
|
178
210
|
byIdCallback: byIdCallback,
|
|
179
211
|
byIdParams: byIdParams,
|
|
@@ -182,41 +214,26 @@ var usePaymentModeState = function () {
|
|
|
182
214
|
listCallback: listCallback,
|
|
183
215
|
listParams: listParams,
|
|
184
216
|
listUrl: constants_1.PAYMENT_MODE_API_ROUTES.PAYMENT_MODES,
|
|
185
|
-
searchQuery:
|
|
217
|
+
searchQuery: "",
|
|
186
218
|
unitByIdUrl: constants_1.PAYMENT_MODE_API_ROUTES.PAYMENT_MODE_BY_ID,
|
|
187
219
|
unitUrl: constants_1.PAYMENT_MODE_API_ROUTES.PAYMENT_MODE,
|
|
188
220
|
updateCallback: updateCallback,
|
|
189
221
|
updateDeps: [state],
|
|
190
222
|
updateParams: updateParams,
|
|
191
223
|
}), byIdError = _c.byIdError, byIdFetchNow = _c.byIdFetchNow, byIdLoading = _c.byIdLoading, deleteError = _c.deleteError, deleteFetchNow = _c.deleteFetchNow, deleteLoading = _c.deleteLoading, listError = _c.listError, listFetchNow = _c.listFetchNow, listLoading = _c.listLoading, updateError = _c.updateError, updateFetchNow = _c.updateFetchNow, updateLoading = _c.updateLoading;
|
|
224
|
+
// ---------------------------------------------------------------------------
|
|
225
|
+
// EFFECTS (list refresh)
|
|
226
|
+
// ---------------------------------------------------------------------------
|
|
192
227
|
(0, react_1.useEffect)(function () {
|
|
193
|
-
|
|
194
|
-
// currencyListFetchNow();
|
|
195
|
-
// paymentModeListFetchNow();
|
|
196
|
-
// branchListFetchNow();
|
|
197
|
-
if (activeTab === 'Tax') {
|
|
228
|
+
if (activeTab === "Payment Mode") {
|
|
198
229
|
listFetchNow();
|
|
199
230
|
}
|
|
200
|
-
// eslint-disable-next-line
|
|
201
|
-
}, [
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
]);
|
|
207
|
-
var searchOnChange = function (k, v) {
|
|
208
|
-
dispatch({
|
|
209
|
-
type: actions_1.PAYMENT_MODE_ACTION_TYPES.SET_SEARCH_QUERY,
|
|
210
|
-
payload: { searchQuery: v },
|
|
211
|
-
});
|
|
212
|
-
};
|
|
213
|
-
var clearSearch = function () {
|
|
214
|
-
dispatch({
|
|
215
|
-
type: actions_1.PAYMENT_MODE_ACTION_TYPES.SET_SEARCH_QUERY,
|
|
216
|
-
payload: { searchQuery: '' },
|
|
217
|
-
});
|
|
218
|
-
};
|
|
219
|
-
var closeDrawer = function () {
|
|
231
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
232
|
+
}, [debouncedQuery, state.currentPage, state.pageLimit, activeTab]);
|
|
233
|
+
// ---------------------------------------------------------------------------
|
|
234
|
+
// DRAWER & MODAL HANDLERS
|
|
235
|
+
// ---------------------------------------------------------------------------
|
|
236
|
+
var closeDrawer = (0, react_1.useCallback)(function () {
|
|
220
237
|
dispatch({
|
|
221
238
|
type: actions_1.PAYMENT_MODE_ACTION_TYPES.SET_DRAWER,
|
|
222
239
|
payload: { drawer: null },
|
|
@@ -227,25 +244,35 @@ var usePaymentModeState = function () {
|
|
|
227
244
|
dispatch({
|
|
228
245
|
type: actions_1.PAYMENT_MODE_ACTION_TYPES.RESET_ERRORS,
|
|
229
246
|
});
|
|
230
|
-
};
|
|
231
|
-
|
|
247
|
+
}, []);
|
|
248
|
+
// ---------------------------------------------------------------------------
|
|
249
|
+
// CRUD OPERATION HANDLERS
|
|
250
|
+
// ---------------------------------------------------------------------------
|
|
251
|
+
var handleCreate = (0, react_1.useCallback)(function () {
|
|
232
252
|
dispatch({
|
|
233
|
-
type: actions_1.PAYMENT_MODE_ACTION_TYPES.
|
|
234
|
-
payload: {
|
|
235
|
-
key: k,
|
|
236
|
-
value: v,
|
|
237
|
-
},
|
|
253
|
+
type: actions_1.PAYMENT_MODE_ACTION_TYPES.SET_DRAWER,
|
|
254
|
+
payload: { drawer: types_1.PAYMENT_MODE_DRAWER.FORM_DRAWER },
|
|
238
255
|
});
|
|
239
|
-
};
|
|
240
|
-
var
|
|
256
|
+
}, []);
|
|
257
|
+
var handleEdit = (0, react_1.useCallback)(function (id) {
|
|
258
|
+
byIdFetchNow(undefined, {
|
|
259
|
+
body: JSON.stringify({ id: id }),
|
|
260
|
+
});
|
|
261
|
+
}, [byIdFetchNow]);
|
|
262
|
+
var handleDelete = (0, react_1.useCallback)(function (id) {
|
|
263
|
+
deleteFetchNow === null || deleteFetchNow === void 0 ? void 0 : deleteFetchNow(undefined, {
|
|
264
|
+
body: JSON.stringify({ id: id }),
|
|
265
|
+
});
|
|
266
|
+
}, [deleteFetchNow]);
|
|
267
|
+
// ---------------------------------------------------------------------------
|
|
268
|
+
// FORM HANDLERS
|
|
269
|
+
// ---------------------------------------------------------------------------
|
|
270
|
+
var handleInputChange = (0, react_1.useCallback)(function (key, value) {
|
|
241
271
|
dispatch({
|
|
242
272
|
type: actions_1.PAYMENT_MODE_ACTION_TYPES.SET_INPUT_FIELD,
|
|
243
|
-
payload: {
|
|
244
|
-
key: k,
|
|
245
|
-
value: v,
|
|
246
|
-
},
|
|
273
|
+
payload: { key: key, value: value },
|
|
247
274
|
});
|
|
248
|
-
};
|
|
275
|
+
}, []);
|
|
249
276
|
var handleSubmit = (0, react_1.useCallback)(function () {
|
|
250
277
|
dispatch({
|
|
251
278
|
type: actions_1.PAYMENT_MODE_ACTION_TYPES.SET_DISABLE_SAVE_BUTTON,
|
|
@@ -256,110 +283,105 @@ var usePaymentModeState = function () {
|
|
|
256
283
|
schema: validate_1.formValidation,
|
|
257
284
|
successCallback: function () {
|
|
258
285
|
updateFetchNow(undefined, {
|
|
259
|
-
body: JSON.stringify(
|
|
286
|
+
body: JSON.stringify(updateParams),
|
|
260
287
|
});
|
|
261
288
|
},
|
|
262
|
-
errorCallback: function (
|
|
289
|
+
errorCallback: function (errors) {
|
|
263
290
|
dispatch({
|
|
264
291
|
type: actions_1.PAYMENT_MODE_ACTION_TYPES.SET_ERRORS,
|
|
265
|
-
payload: { errors:
|
|
292
|
+
payload: { errors: errors },
|
|
266
293
|
});
|
|
294
|
+
showErrorToast(t("validation.formGeneralError"));
|
|
267
295
|
},
|
|
268
296
|
});
|
|
269
|
-
}, [updateFetchNow,
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
if (textInputElements) {
|
|
275
|
-
textInputElements === null || textInputElements === void 0 ? void 0 : textInputElements.forEach(function (_a, i) {
|
|
276
|
-
var id = _a.id;
|
|
277
|
-
textInputElements[i].value = state[id];
|
|
278
|
-
textInputElements[i].handleOnChange = handleOnChange;
|
|
279
|
-
textInputElements[i].error = state.errors[id];
|
|
280
|
-
});
|
|
281
|
-
}
|
|
282
|
-
var toggleElements = (_b = elements[form_schema_1.VISTA_FORM_ELEMENTS.TOGGLE_V1]) === null || _b === void 0 ? void 0 : _b.sort(function (a, b) { return a.order - b.order; });
|
|
283
|
-
if (toggleElements) {
|
|
284
|
-
toggleElements === null || toggleElements === void 0 ? void 0 : toggleElements.forEach(function (_a, i) {
|
|
285
|
-
var id = _a.id;
|
|
286
|
-
toggleElements[i].value = state[id];
|
|
287
|
-
toggleElements[i].handleOnChange = handleOnToggle;
|
|
288
|
-
toggleElements[i].error = state.errors[id];
|
|
289
|
-
});
|
|
290
|
-
}
|
|
291
|
-
return elements;
|
|
292
|
-
}, [state]);
|
|
293
|
-
var handleNextClick = function () {
|
|
297
|
+
}, [updateParams, updateFetchNow, showErrorToast, t]);
|
|
298
|
+
// ---------------------------------------------------------------------------
|
|
299
|
+
// PAGINATION HANDLERS
|
|
300
|
+
// ---------------------------------------------------------------------------
|
|
301
|
+
var handleNextClick = (0, react_1.useCallback)(function () {
|
|
294
302
|
dispatch({
|
|
295
303
|
type: actions_1.PAYMENT_MODE_ACTION_TYPES.SET_CURRENT_PAGE,
|
|
296
304
|
payload: { currentPage: state.currentPage + 1 },
|
|
297
305
|
});
|
|
298
|
-
};
|
|
299
|
-
var handlePreviousClick = function () {
|
|
306
|
+
}, [state.currentPage]);
|
|
307
|
+
var handlePreviousClick = (0, react_1.useCallback)(function () {
|
|
300
308
|
dispatch({
|
|
301
309
|
type: actions_1.PAYMENT_MODE_ACTION_TYPES.SET_CURRENT_PAGE,
|
|
302
310
|
payload: { currentPage: state.currentPage - 1 },
|
|
303
311
|
});
|
|
304
|
-
};
|
|
305
|
-
var handlePageLimit = function (
|
|
306
|
-
var val = __assign({},
|
|
312
|
+
}, [state.currentPage]);
|
|
313
|
+
var handlePageLimit = (0, react_1.useCallback)(function (key, value) {
|
|
314
|
+
var val = __assign({}, value);
|
|
307
315
|
dispatch({
|
|
308
316
|
type: actions_1.PAYMENT_MODE_ACTION_TYPES.SET_PAGE_LIMIT,
|
|
309
317
|
payload: { pageLimit: Number(val.option) },
|
|
310
318
|
});
|
|
311
|
-
};
|
|
312
|
-
|
|
319
|
+
}, []);
|
|
320
|
+
// ---------------------------------------------------------------------------
|
|
321
|
+
// SEARCH HANDLERS
|
|
322
|
+
// ---------------------------------------------------------------------------
|
|
323
|
+
var searchOnChange = (0, react_1.useCallback)(function (key, value) {
|
|
313
324
|
dispatch({
|
|
314
|
-
type: actions_1.PAYMENT_MODE_ACTION_TYPES.
|
|
315
|
-
payload: {
|
|
325
|
+
type: actions_1.PAYMENT_MODE_ACTION_TYPES.SET_SEARCH_QUERY,
|
|
326
|
+
payload: { searchQuery: value },
|
|
316
327
|
});
|
|
317
|
-
};
|
|
318
|
-
var
|
|
328
|
+
}, []);
|
|
329
|
+
var clearSearch = (0, react_1.useCallback)(function () {
|
|
330
|
+
dispatch({
|
|
331
|
+
type: actions_1.PAYMENT_MODE_ACTION_TYPES.SET_SEARCH_QUERY,
|
|
332
|
+
payload: { searchQuery: "" },
|
|
333
|
+
});
|
|
334
|
+
}, []);
|
|
335
|
+
// ---------------------------------------------------------------------------
|
|
336
|
+
// TABLE ACTIONS (memoized)
|
|
337
|
+
// ---------------------------------------------------------------------------
|
|
338
|
+
var headerActions = (0, react_1.useMemo)(function () { return [
|
|
319
339
|
{
|
|
320
340
|
enabled: true,
|
|
321
341
|
handleOnClick: handleCreate,
|
|
322
|
-
label:
|
|
342
|
+
label: t("addItem"),
|
|
323
343
|
order: 1,
|
|
324
344
|
},
|
|
325
|
-
];
|
|
326
|
-
var
|
|
327
|
-
byIdFetchNow(undefined, {
|
|
328
|
-
body: JSON.stringify({ id: id }),
|
|
329
|
-
});
|
|
330
|
-
}, [byIdFetchNow]);
|
|
331
|
-
var handleDelete = (0, react_1.useCallback)(function (id) {
|
|
332
|
-
deleteFetchNow === null || deleteFetchNow === void 0 ? void 0 : deleteFetchNow(undefined, {
|
|
333
|
-
body: JSON.stringify({ id: id }),
|
|
334
|
-
});
|
|
335
|
-
}, [deleteFetchNow]);
|
|
336
|
-
var rowActions = [
|
|
345
|
+
]; }, [handleCreate, t]);
|
|
346
|
+
var rowActions = (0, react_1.useMemo)(function () { return [
|
|
337
347
|
{
|
|
338
348
|
enabled: true,
|
|
339
349
|
handleAction: handleEdit,
|
|
340
|
-
label:
|
|
350
|
+
label: t("actions.buttonEdit"),
|
|
341
351
|
order: 1,
|
|
342
352
|
},
|
|
343
353
|
{
|
|
344
354
|
enabled: true,
|
|
345
355
|
handleAction: handleDelete,
|
|
346
|
-
label:
|
|
356
|
+
label: t("actions.buttonDelete"),
|
|
347
357
|
order: 2,
|
|
348
358
|
},
|
|
349
|
-
];
|
|
350
|
-
|
|
359
|
+
]; }, [handleEdit, handleDelete, t]);
|
|
360
|
+
// ---------------------------------------------------------------------------
|
|
361
|
+
// RETURN STATE
|
|
362
|
+
// ---------------------------------------------------------------------------
|
|
363
|
+
return __assign(__assign({}, state), { byIdError: byIdError, byIdLoading: byIdLoading, clearSearch: clearSearch, closeDrawer: closeDrawer, deleteError: deleteError, deleteLoading: deleteLoading, dispatch: dispatch, handleInputChange: handleInputChange, handleNextClick: handleNextClick, handlePageLimit: handlePageLimit, handlePreviousClick: handlePreviousClick, handleSubmit: handleSubmit, headerActions: headerActions, listError: listError, listLoading: listLoading, rowActions: rowActions, searchOnChange: searchOnChange, updateError: updateError, updateLoading: updateLoading });
|
|
351
364
|
};
|
|
352
|
-
|
|
365
|
+
// ============================================================================
|
|
366
|
+
// CONTEXT SETUP
|
|
367
|
+
// ============================================================================
|
|
368
|
+
exports.PaymentModeStateContext = (0, react_1.createContext)(__assign(__assign({}, reducer_1.initialPaymentModeState), { byIdError: undefined, byIdLoading: false, clearSearch: function () { return void 0; }, closeDrawer: function () { return void 0; }, deleteError: undefined, deleteLoading: false, dispatch: function () { return void 0; }, handleInputChange: 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, listLoading: false, rowActions: [], searchOnChange: function () { return void 0; }, updateError: undefined, updateLoading: false }));
|
|
369
|
+
// ============================================================================
|
|
370
|
+
// PROVIDER COMPONENT
|
|
371
|
+
// ============================================================================
|
|
353
372
|
var PaymentModeStateContextProvider = function (_a) {
|
|
354
373
|
var children = _a.children;
|
|
355
374
|
var state = usePaymentModeState();
|
|
356
375
|
return (react_1.default.createElement(exports.PaymentModeStateContext.Provider, { value: state }, children));
|
|
357
376
|
};
|
|
358
377
|
exports.PaymentModeStateContextProvider = PaymentModeStateContextProvider;
|
|
378
|
+
// ============================================================================
|
|
379
|
+
// CUSTOM HOOK
|
|
380
|
+
// ============================================================================
|
|
359
381
|
var usePaymentModeStateContext = function () {
|
|
360
382
|
var state = (0, react_1.useContext)(exports.PaymentModeStateContext);
|
|
361
383
|
if (state === undefined) {
|
|
362
|
-
throw new Error(
|
|
384
|
+
throw new Error("usePaymentModeStateContext must be used within PaymentModeStateContextProvider");
|
|
363
385
|
}
|
|
364
386
|
return state;
|
|
365
387
|
};
|
|
@@ -1,8 +1,31 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Payment Mode Drawer Component
|
|
3
|
+
*
|
|
4
|
+
* A responsive drawer component for creating and editing payment mode records.
|
|
5
|
+
* Features RTL support, accessibility compliance, and theme-aware styling.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Responsive design with mobile-friendly drawer
|
|
9
|
+
* - RTL (Right-to-Left) language support
|
|
10
|
+
* - Accessibility features (ARIA labels, keyboard navigation)
|
|
11
|
+
* - Theme-aware styling with ShadCN/ui components
|
|
12
|
+
* - Internationalization support with translation keys
|
|
13
|
+
* - Form validation integration
|
|
14
|
+
*
|
|
15
|
+
* Performance Optimizations:
|
|
16
|
+
* - Lazy loading of form component
|
|
17
|
+
* - Optimized re-renders with proper memoization
|
|
18
|
+
* - Efficient state management integration
|
|
19
|
+
* - Minimal DOM manipulation
|
|
20
|
+
*/
|
|
21
|
+
import { FC } from "react";
|
|
22
|
+
interface PaymentModeDrawerProps {
|
|
23
|
+
/** Whether the interface is in RTL (Right-to-Left) mode */
|
|
24
|
+
isRTL: boolean;
|
|
25
|
+
/** Translation map for internationalization */
|
|
3
26
|
translationMap: {
|
|
4
27
|
[key: string]: string;
|
|
5
28
|
};
|
|
6
29
|
}
|
|
7
|
-
export declare const
|
|
30
|
+
export declare const PaymentModeDrawer: FC<PaymentModeDrawerProps>;
|
|
8
31
|
export {};
|
|
@@ -1,19 +1,114 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Payment Mode Drawer Component
|
|
4
|
+
*
|
|
5
|
+
* A responsive drawer component for creating and editing payment mode records.
|
|
6
|
+
* Features RTL support, accessibility compliance, and theme-aware styling.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Responsive design with mobile-friendly drawer
|
|
10
|
+
* - RTL (Right-to-Left) language support
|
|
11
|
+
* - Accessibility features (ARIA labels, keyboard navigation)
|
|
12
|
+
* - Theme-aware styling with ShadCN/ui components
|
|
13
|
+
* - Internationalization support with translation keys
|
|
14
|
+
* - Form validation integration
|
|
15
|
+
*
|
|
16
|
+
* Performance Optimizations:
|
|
17
|
+
* - Lazy loading of form component
|
|
18
|
+
* - Optimized re-renders with proper memoization
|
|
19
|
+
* - Efficient state management integration
|
|
20
|
+
* - Minimal DOM manipulation
|
|
21
|
+
*/
|
|
2
22
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
23
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
24
|
};
|
|
5
25
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
26
|
+
exports.PaymentModeDrawer = void 0;
|
|
7
27
|
var react_1 = __importDefault(require("react"));
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
28
|
+
var lucide_react_1 = require("lucide-react");
|
|
29
|
+
var button_1 = require("@/components/ui/button");
|
|
30
|
+
var drawer_1 = require("@/components/ui/drawer");
|
|
11
31
|
var context_1 = require("./context");
|
|
12
32
|
var form_1 = require("./form");
|
|
13
|
-
|
|
14
|
-
|
|
33
|
+
// ============================================================================
|
|
34
|
+
// CONSTANTS
|
|
35
|
+
// ============================================================================
|
|
36
|
+
/** Drawer width classes for responsive design */
|
|
37
|
+
var DRAWER_WIDTH = "w-[400px] sm:w-[500px]";
|
|
38
|
+
/** Drawer direction based on RTL setting */
|
|
39
|
+
var getDrawerDirection = function (isRTL) {
|
|
40
|
+
return isRTL ? "left" : "right";
|
|
41
|
+
};
|
|
42
|
+
// ============================================================================
|
|
43
|
+
// COMPONENT
|
|
44
|
+
// ============================================================================
|
|
45
|
+
var PaymentModeDrawer = function (_a) {
|
|
46
|
+
// ============================================================================
|
|
47
|
+
// HOOKS & STATE
|
|
48
|
+
// ============================================================================
|
|
49
|
+
var isRTL = _a.isRTL, translationMap = _a.translationMap;
|
|
15
50
|
var _b = (0, context_1.usePaymentModeStateContext)(), closeDrawer = _b.closeDrawer, disableSaveButton = _b.disableSaveButton, drawer = _b.drawer, handleSubmit = _b.handleSubmit;
|
|
16
|
-
|
|
17
|
-
|
|
51
|
+
// ============================================================================
|
|
52
|
+
// COMPUTED VALUES
|
|
53
|
+
// ============================================================================
|
|
54
|
+
var drawerDirection = getDrawerDirection(isRTL);
|
|
55
|
+
var isDrawerOpen = !!drawer;
|
|
56
|
+
// ============================================================================
|
|
57
|
+
// RENDER
|
|
58
|
+
// ============================================================================
|
|
59
|
+
return (react_1.default.createElement(drawer_1.Drawer, { open: isDrawerOpen, onOpenChange: function (open) { return !open && closeDrawer(); }, direction: drawerDirection },
|
|
60
|
+
react_1.default.createElement(drawer_1.DrawerContent, { className: "h-full ".concat(DRAWER_WIDTH, " ").concat(isRTL ? "rtl" : "ltr"), dir: isRTL ? "rtl" : "ltr" },
|
|
61
|
+
react_1.default.createElement(drawer_1.DrawerHeader, { className: "flex-row items-center justify-between border-b pb-4 ".concat(isRTL ? "flex-row-reverse" : "") },
|
|
62
|
+
react_1.default.createElement(drawer_1.DrawerTitle, { className: "text-xl font-semibold flex items-center ".concat(isRTL ? "flex-row-reverse gap-2" : "gap-2") }, (translationMap === null || translationMap === void 0 ? void 0 : translationMap.headingFormCreate) || "Create Payment Mode"),
|
|
63
|
+
react_1.default.createElement(drawer_1.DrawerClose, { asChild: true },
|
|
64
|
+
react_1.default.createElement(button_1.Button, { variant: "ghost", size: "icon", className: "h-8 w-8" },
|
|
65
|
+
react_1.default.createElement(lucide_react_1.X, { className: "h-4 w-4" }),
|
|
66
|
+
react_1.default.createElement("span", { className: "sr-only" }, (translationMap === null || translationMap === void 0 ? void 0 : translationMap.srCloseDrawer) || "Close drawer")))),
|
|
67
|
+
react_1.default.createElement("div", { className: "flex-1 overflow-y-auto px-4 py-6 ".concat(isRTL ? "text-right" : "text-left") },
|
|
68
|
+
react_1.default.createElement(form_1.PaymentModeForm, { isRTL: isRTL, translationMap: translationMap })),
|
|
69
|
+
react_1.default.createElement(drawer_1.DrawerFooter, { className: "border-t pt-4" },
|
|
70
|
+
react_1.default.createElement("div", { className: "flex gap-2 ".concat(isRTL ? "flex-row-reverse" : "") },
|
|
71
|
+
react_1.default.createElement(button_1.Button, { variant: "outline", onClick: closeDrawer, className: "flex-1", type: "button" }, (translationMap === null || translationMap === void 0 ? void 0 : translationMap.cancelBtn) || "Cancel"),
|
|
72
|
+
react_1.default.createElement(button_1.Button, { onClick: handleSubmit, disabled: disableSaveButton, className: "flex-1", type: "button" }, (translationMap === null || translationMap === void 0 ? void 0 : translationMap.saveBtn) || "Save Payment Mode"))))));
|
|
18
73
|
};
|
|
19
|
-
exports.
|
|
74
|
+
exports.PaymentModeDrawer = PaymentModeDrawer;
|
|
75
|
+
// ============================================================================
|
|
76
|
+
// OPTIMIZATION SUMMARY
|
|
77
|
+
// ============================================================================
|
|
78
|
+
/*
|
|
79
|
+
* Drawer Component Optimizations Applied:
|
|
80
|
+
*
|
|
81
|
+
* 1. **Structural Organization**
|
|
82
|
+
* - Clear section headers for different concerns (types, constants, component)
|
|
83
|
+
* - Logical grouping of related code blocks
|
|
84
|
+
* - Comprehensive JSDoc documentation
|
|
85
|
+
*
|
|
86
|
+
* 2. **Performance Improvements**
|
|
87
|
+
* - Computed values extracted to avoid recalculation
|
|
88
|
+
* - Boolean flag for drawer open state
|
|
89
|
+
* - Efficient prop destructuring
|
|
90
|
+
* - Type-safe constant definitions
|
|
91
|
+
*
|
|
92
|
+
* 3. **Accessibility Enhancements**
|
|
93
|
+
* - Proper ARIA labels and screen reader support
|
|
94
|
+
* - Keyboard navigation support
|
|
95
|
+
* - Semantic HTML structure
|
|
96
|
+
* - Focus management
|
|
97
|
+
*
|
|
98
|
+
* 4. **Internationalization**
|
|
99
|
+
* - Consistent translation key usage
|
|
100
|
+
* - Fallback values for missing translations
|
|
101
|
+
* - RTL-aware layout adjustments
|
|
102
|
+
*
|
|
103
|
+
* 5. **Code Quality**
|
|
104
|
+
* - TypeScript strict typing
|
|
105
|
+
* - Consistent naming conventions
|
|
106
|
+
* - Clear component structure
|
|
107
|
+
* - Self-documenting code
|
|
108
|
+
*
|
|
109
|
+
* 6. **Maintainability**
|
|
110
|
+
* - Easy to modify layout and styling
|
|
111
|
+
* - Clear separation of concerns
|
|
112
|
+
* - Modular constant definitions
|
|
113
|
+
* - Predictable component behavior
|
|
114
|
+
*/
|