@kenyaemr/esm-billing-app 5.4.1-pre.1710 → 5.4.1-pre.1729

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.
Files changed (42) hide show
  1. package/.turbo/turbo-build.log +58 -79
  2. package/dist/{10.js → 11.js} +1 -1
  3. package/dist/11.js.map +1 -0
  4. package/dist/114.js +2 -0
  5. package/dist/114.js.map +1 -0
  6. package/dist/300.js +1 -1
  7. package/dist/495.js +1 -2
  8. package/dist/495.js.map +1 -1
  9. package/dist/876.js +8 -1
  10. package/dist/876.js.map +1 -1
  11. package/dist/kenyaemr-esm-billing-app.js +1 -1
  12. package/dist/kenyaemr-esm-billing-app.js.buildmanifest.json +268 -268
  13. package/dist/kenyaemr-esm-billing-app.js.map +1 -1
  14. package/dist/main.js +3 -3
  15. package/dist/main.js.map +1 -1
  16. package/dist/routes.json +1 -1
  17. package/package.json +1 -1
  18. package/src/benefits-package/benefits-package.mock.ts +3 -3
  19. package/src/benefits-package/forms/benefit-pre-auth-form.workspace.tsx +5 -4
  20. package/src/benefits-package/forms/{package-intervensions.component.tsx → package-interventions.component.tsx} +30 -10
  21. package/src/claims/dashboard/form/claims-form.component.tsx +4 -4
  22. package/src/claims/metrics/metrics.component.tsx +2 -2
  23. package/src/config-schema.ts +1 -1
  24. package/src/hooks/use-pre-auth-requests.ts +13 -1
  25. package/src/hooks/useInterventions.ts +27 -5
  26. package/src/root.component.tsx +0 -2
  27. package/src/types/index.ts +1 -1
  28. package/translations/en.json +3 -18
  29. package/dist/10.js.map +0 -1
  30. package/dist/13.js +0 -8
  31. package/dist/13.js.map +0 -1
  32. package/src/claims/pre-auth/form/pre-auth-form.component.tsx +0 -364
  33. package/src/claims/pre-auth/form/pre-auth-form.resource.ts +0 -20
  34. package/src/claims/pre-auth/form/pre-auth-form.scss +0 -141
  35. package/src/claims/pre-auth/form/pre-auth-mock-data.ts +0 -44
  36. package/src/claims/pre-auth/hook/pre-auth.mock.ts +0 -40
  37. package/src/claims/pre-auth/pre-auth-dashboard.component.tsx +0 -79
  38. package/src/claims/pre-auth/pre-auth-dashboard.scss +0 -42
  39. package/src/claims/pre-auth/table/pre-auth-table.component.tsx +0 -234
  40. package/src/claims/pre-auth/table/pre-auth-table.scss +0 -111
  41. /package/dist/{495.js.LICENSE.txt → 114.js.LICENSE.txt} +0 -0
  42. /package/dist/{13.js.LICENSE.txt → 876.js.LICENSE.txt} +0 -0
@@ -1,42 +0,0 @@
1
- @use '@carbon/colors';
2
- @use '@carbon/layout';
3
- @use '@carbon/type';
4
- @import '~@openmrs/esm-styleguide/src/vars';
5
-
6
- .backButton {
7
- margin: layout.$spacing-04;
8
- }
9
- .loader {
10
- display: flex;
11
- min-height: layout.$spacing-09;
12
- justify-content: center;
13
- }
14
- .errorContainer {
15
- margin: layout.$spacing-05;
16
- }
17
-
18
- .preAuthMainContainer {
19
- display: flex;
20
- margin: 0 auto;
21
- padding: 0 layout.$spacing-05;
22
- }
23
-
24
- .content {
25
- display: flex;
26
- width: 100%;
27
- }
28
-
29
- :global(.omrs-breakpoint-lt-desktop) {
30
- .preAuthMainContainer {
31
- flex-direction: column;
32
- }
33
-
34
- .content {
35
- flex-direction: column;
36
- }
37
- }
38
-
39
- .preAuthMainContainer,
40
- .form {
41
- flex: 1;
42
- }
@@ -1,234 +0,0 @@
1
- import React, { useMemo, useState } from 'react';
2
- import { useTranslation } from 'react-i18next';
3
- import fuzzy from 'fuzzy';
4
- import {
5
- DataTable,
6
- DataTableSkeleton,
7
- Layer,
8
- Table,
9
- TableBody,
10
- TableCell,
11
- TableContainer,
12
- TableHead,
13
- TableHeader,
14
- TableRow,
15
- TableToolbar,
16
- TableToolbarContent,
17
- TableToolbarSearch,
18
- TableSelectRow,
19
- Tile,
20
- Pagination,
21
- type DataTableHeader,
22
- type DataTableRow,
23
- } from '@carbon/react';
24
- import { formatDate, isDesktop, useDebounce, useLayoutType } from '@openmrs/esm-framework';
25
- import styles from './pre-auth-table.scss';
26
- import { LineItem, MappedBill } from '../../../types';
27
- import { EmptyDataIllustration, PatientChartPagination } from '@openmrs/esm-patient-common-lib';
28
-
29
- type PreAuthTableProps = {
30
- bill: MappedBill;
31
- isSelectable?: boolean;
32
- isLoadingBill?: boolean;
33
- onSelectItem?: (selectedLineItems: LineItem[]) => void;
34
- };
35
-
36
- const PreAuthTable: React.FC<PreAuthTableProps> = ({ bill, isSelectable = true, isLoadingBill, onSelectItem }) => {
37
- const { t } = useTranslation();
38
- const { lineItems } = bill;
39
- const layout = useLayoutType();
40
- const responsiveSize = isDesktop(layout) ? 'sm' : 'lg';
41
- const [selectedLineItems, setSelectedLineItems] = useState<LineItem[]>([]);
42
- const [searchTerm, setSearchTerm] = useState('');
43
- const debouncedSearchTerm = useDebounce(searchTerm);
44
- const [currentPage, setCurrentPage] = useState(1);
45
- const [pageSize, setPageSize] = useState(10);
46
-
47
- const pendingLineItems = useMemo(
48
- () => (lineItems ? lineItems.filter((item) => item.paymentStatus === 'PENDING') : []),
49
- [lineItems],
50
- );
51
-
52
- const filteredLineItems = useMemo(() => {
53
- if (!debouncedSearchTerm) {
54
- return pendingLineItems || [];
55
- }
56
-
57
- return fuzzy
58
- .filter(debouncedSearchTerm, pendingLineItems || [], {
59
- extract: (lineItem: LineItem) => `${lineItem.item}`,
60
- })
61
- .sort((r1, r2) => r1.score - r2.score)
62
- .map((result) => result.original);
63
- }, [debouncedSearchTerm, pendingLineItems]);
64
-
65
- const paginatedLineItems = useMemo(() => {
66
- const startIndex = (currentPage - 1) * pageSize;
67
- const endIndex = startIndex + pageSize;
68
- return filteredLineItems.slice(startIndex, endIndex);
69
- }, [filteredLineItems, currentPage, pageSize]);
70
-
71
- const tableHeaders: Array<typeof DataTableHeader> = [
72
- {
73
- header: t('serialNo', 'Serial No.'),
74
- key: 'serialno',
75
- },
76
- {
77
- header: t('billItem', 'Bill Item'),
78
- key: 'inventoryname',
79
- },
80
- {
81
- header: t('status', 'Status'),
82
- key: 'status',
83
- },
84
- {
85
- header: t('totalAmount', 'Total amount'),
86
- key: 'total',
87
- },
88
- {
89
- header: t('billCreationDate', 'Bill creation date'),
90
- key: 'dateofbillcreation',
91
- },
92
- ];
93
-
94
- const processBillItem = (item) => (item.item || item?.billableService)?.split(':')[1];
95
-
96
- const tableRows: Array<typeof DataTableRow> = useMemo(
97
- () =>
98
- paginatedLineItems?.map((item) => {
99
- return {
100
- id: `${item.uuid}`,
101
- inventoryname: processBillItem(item),
102
- serialno: bill.receiptNumber,
103
- status: item.paymentStatus,
104
- total: item.price * item.quantity,
105
- dateofbillcreation: formatDate(new Date(bill.dateCreated), { mode: 'standard' }),
106
- };
107
- }) ?? [],
108
- [bill.dateCreated, bill.receiptNumber, paginatedLineItems],
109
- );
110
-
111
- if (isLoadingBill) {
112
- return (
113
- <div className={styles.loaderContainer}>
114
- <DataTableSkeleton
115
- columnCount={tableHeaders.length}
116
- showHeader={false}
117
- showToolbar={false}
118
- size={responsiveSize}
119
- zebra
120
- />
121
- </div>
122
- );
123
- }
124
-
125
- const handleRowSelection = (row: typeof DataTableRow, checked: boolean) => {
126
- const matchingRow = filteredLineItems.find((item) => item.uuid === row.id);
127
- let newSelectedLineItems;
128
-
129
- if (checked) {
130
- newSelectedLineItems = [...selectedLineItems, matchingRow];
131
- } else {
132
- newSelectedLineItems = selectedLineItems.filter((item) => item.uuid !== row.id);
133
- }
134
- setSelectedLineItems(newSelectedLineItems);
135
- onSelectItem(newSelectedLineItems);
136
- };
137
-
138
- const handlePageChange = (pageNumber: number) => {
139
- setCurrentPage(pageNumber);
140
- };
141
-
142
- return (
143
- <div className={styles.preAuthContainer}>
144
- <DataTable headers={tableHeaders} isSortable rows={tableRows} size={responsiveSize} useZebraStyles>
145
- {({ rows, headers, getRowProps, getSelectionProps, getTableProps, getToolbarProps }) => (
146
- <TableContainer
147
- className={styles.tableContainer}
148
- description={
149
- <span className={styles.tableDescription}>
150
- <span>
151
- {t(
152
- 'selectitemstorequestforpreauth',
153
- 'Select items that are to be included in the pre authorization request',
154
- )}
155
- </span>
156
- </span>
157
- }
158
- title={t('lineItems', 'Line items')}>
159
- <div className={styles.toolbarWrapper}>
160
- <TableToolbar {...getToolbarProps()} className={styles.tableToolbar} size={responsiveSize}>
161
- <TableToolbarContent className={styles.headerContainer}>
162
- <TableToolbarSearch
163
- className={styles.searchbox}
164
- expanded
165
- onChange={(e: React.ChangeEvent<HTMLInputElement>) => setSearchTerm(e.target.value)}
166
- placeholder={t('searchThisTable', 'Search this table')}
167
- size={responsiveSize}
168
- />
169
- </TableToolbarContent>
170
- </TableToolbar>
171
- </div>
172
- <Table {...getTableProps()} aria-label="line items" className={styles.table}>
173
- <TableHead>
174
- <TableRow>
175
- {rows.length > 1 && isSelectable ? <TableHeader /> : null}
176
- {headers.map((header) => (
177
- <TableHeader key={header.key}>{header.header}</TableHeader>
178
- ))}
179
- </TableRow>
180
- </TableHead>
181
- <TableBody>
182
- {rows.map((row, index) => {
183
- return (
184
- <TableRow
185
- key={row.id}
186
- {...getRowProps({
187
- row,
188
- })}>
189
- {rows.length > 1 && isSelectable && (
190
- <TableSelectRow
191
- aria-label="Select row"
192
- {...getSelectionProps({ row })}
193
- onChange={(checked: boolean) => handleRowSelection(row, checked)}
194
- checked={Boolean(selectedLineItems?.find((item) => item?.uuid === row?.id))}
195
- />
196
- )}
197
- {row.cells.map((cell) => (
198
- <TableCell key={cell.id}>{cell.value}</TableCell>
199
- ))}
200
- </TableRow>
201
- );
202
- })}
203
- </TableBody>
204
- </Table>
205
- </TableContainer>
206
- )}
207
- </DataTable>
208
- {filteredLineItems?.length === 0 && (
209
- <div className={styles.filterEmptyState}>
210
- <Layer>
211
- <Tile className={styles.filterEmptyStateTile}>
212
- <div className={styles.empty__state}>
213
- <EmptyDataIllustration />
214
- </div>
215
- <p className={styles.filterEmptyStateContent}>
216
- {t('noMatchingItemsToDisplay', 'No matching items to display')}
217
- </p>
218
- <p className={styles.filterEmptyStateHelper}>{t('checkFilters', 'Check the filters above')}</p>
219
- </Tile>
220
- </Layer>
221
- </div>
222
- )}
223
- <PatientChartPagination
224
- currentItems={filteredLineItems.length}
225
- onPageNumberChange={handlePageChange}
226
- pageNumber={currentPage}
227
- pageSize={pageSize}
228
- totalItems={filteredLineItems.length}
229
- />
230
- </div>
231
- );
232
- };
233
-
234
- export default PreAuthTable;
@@ -1,111 +0,0 @@
1
- @use '@carbon/colors';
2
- @use '@carbon/layout';
3
- @use '@carbon/type';
4
- @import '~@openmrs/esm-styleguide/src/vars';
5
-
6
- .filterEmptyState {
7
- align-items: center;
8
- background-color: white;
9
- display: flex;
10
- justify-content: center;
11
- padding: layout.$spacing-09 !important;
12
- text-align: center;
13
- }
14
-
15
- .filterEmptyStateTile {
16
- margin: auto;
17
- }
18
-
19
- .filterEmptyStateContent {
20
- @include type.type-style('heading-compact-02');
21
- color: $text-02;
22
- margin-bottom: 0.5rem;
23
- }
24
-
25
- .filterEmptyStateHelper {
26
- @include type.type-style('body-compact-01');
27
- color: $text-02;
28
- }
29
-
30
- .headerContainer {
31
- background-color: colors.$gray-10;
32
- }
33
-
34
- .preAuthContainer {
35
- width: 100%;
36
- margin: layout.$spacing-09 layout.$spacing-05 0;
37
- border: 1px solid $ui-03;
38
- display: flex;
39
- flex-direction: column;
40
- justify-content: flex-start;
41
- }
42
-
43
- :global(.omrs-breakpoint-lt-desktop) {
44
- .preAuthContainer {
45
- width: 100%;
46
- }
47
- }
48
-
49
- .searchbox {
50
- input:focus {
51
- outline: 2px solid colors.$orange-40 !important;
52
- }
53
- }
54
-
55
- .table {
56
- td {
57
- border-bottom: none !important;
58
- }
59
- }
60
-
61
- .tableDescription {
62
- display: flex;
63
- align-items: flex-start;
64
- margin-top: layout.$spacing-02;
65
- column-gap: layout.$spacing-01;
66
-
67
- ::after {
68
- content: '';
69
- display: block;
70
- width: 2rem;
71
- padding-top: 0.188rem;
72
- border-bottom: 0.375rem solid var(--brand-03);
73
- }
74
-
75
- & > span {
76
- @include type.type-style('body-01');
77
- }
78
- }
79
-
80
- .tableToolbar {
81
- width: 20%;
82
- min-width: 12.5rem;
83
- }
84
-
85
- .toolbarWrapper {
86
- position: relative;
87
- display: flex;
88
- justify-content: flex-end;
89
- }
90
-
91
- :global(.omrs-breakpoint-lt-desktop) {
92
- .toolbarWrapper {
93
- height: layout.$spacing-09;
94
- }
95
- }
96
-
97
- :global(.omrs-breakpoint-gt-tablet) {
98
- .toolbarWrapper {
99
- height: layout.$spacing-07;
100
- }
101
- }
102
-
103
- .tableContainer {
104
- width: 100%;
105
- }
106
- .pagination {
107
- background: white;
108
- }
109
- .empty__state {
110
- margin-top: layout.$spacing-05;
111
- }
File without changes
File without changes