@joelbarron/react-web-dev-kit 0.1.5 → 0.1.7

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 (105) hide show
  1. package/dist/auth/fuse/fuseIntegration.d.ts +2 -0
  2. package/dist/auth/fuse/fuseIntegration.d.ts.map +1 -1
  3. package/dist/auth/fuse/fuseIntegration.js +18 -0
  4. package/dist/auth/social/providerAuth.d.ts.map +1 -1
  5. package/dist/auth/social/providerAuth.js +12 -4
  6. package/dist/config/createConfig.d.ts.map +1 -1
  7. package/dist/config/createConfig.js +38 -1
  8. package/dist/config/defaults.js +1 -1
  9. package/dist/core/buttons/JBButton.d.ts +8 -0
  10. package/dist/core/buttons/JBButton.d.ts.map +1 -0
  11. package/dist/core/buttons/JBButton.js +55 -0
  12. package/dist/core/buttons/index.d.ts +2 -0
  13. package/dist/core/buttons/index.d.ts.map +1 -0
  14. package/dist/core/buttons/index.js +1 -0
  15. package/dist/core/dialogs/JBConfirmDialog.d.ts +15 -0
  16. package/dist/core/dialogs/JBConfirmDialog.d.ts.map +1 -0
  17. package/dist/core/dialogs/JBConfirmDialog.js +6 -0
  18. package/dist/core/dialogs/index.d.ts +2 -0
  19. package/dist/core/dialogs/index.d.ts.map +1 -0
  20. package/dist/core/dialogs/index.js +1 -0
  21. package/dist/core/index.d.ts +5 -0
  22. package/dist/core/index.d.ts.map +1 -0
  23. package/dist/core/index.js +4 -0
  24. package/dist/core/layout/JBContentContainer.d.ts +31 -0
  25. package/dist/core/layout/JBContentContainer.d.ts.map +1 -0
  26. package/dist/core/layout/JBContentContainer.js +50 -0
  27. package/dist/core/layout/JBFormHeader.d.ts +3 -0
  28. package/dist/core/layout/JBFormHeader.d.ts.map +1 -0
  29. package/dist/core/layout/JBFormHeader.js +131 -0
  30. package/dist/core/layout/index.d.ts +3 -0
  31. package/dist/core/layout/index.d.ts.map +1 -0
  32. package/dist/core/layout/index.js +2 -0
  33. package/dist/core/skeletons/JBFormContentSkeleton.d.ts +5 -0
  34. package/dist/core/skeletons/JBFormContentSkeleton.d.ts.map +1 -0
  35. package/dist/core/skeletons/JBFormContentSkeleton.js +12 -0
  36. package/dist/core/skeletons/JBFormHeaderSkeleton.d.ts +6 -0
  37. package/dist/core/skeletons/JBFormHeaderSkeleton.d.ts.map +1 -0
  38. package/dist/core/skeletons/JBFormHeaderSkeleton.js +19 -0
  39. package/dist/core/skeletons/index.d.ts +3 -0
  40. package/dist/core/skeletons/index.d.ts.map +1 -0
  41. package/dist/core/skeletons/index.js +2 -0
  42. package/dist/forms/JBAutocompleteField.d.ts +12 -0
  43. package/dist/forms/JBAutocompleteField.d.ts.map +1 -0
  44. package/dist/forms/JBAutocompleteField.js +20 -0
  45. package/dist/forms/index.d.ts +2 -0
  46. package/dist/forms/index.d.ts.map +1 -1
  47. package/dist/forms/index.js +2 -0
  48. package/dist/forms/zod.d.ts +4 -0
  49. package/dist/forms/zod.d.ts.map +1 -0
  50. package/dist/forms/zod.js +9 -0
  51. package/dist/grid/JBGrid.d.ts.map +1 -1
  52. package/dist/grid/JBGrid.js +262 -18
  53. package/dist/grid/JBGridHeader.d.ts.map +1 -1
  54. package/dist/grid/JBGridHeader.js +86 -15
  55. package/dist/grid/JBGridLoading.d.ts +9 -0
  56. package/dist/grid/JBGridLoading.d.ts.map +1 -0
  57. package/dist/grid/JBGridLoading.js +14 -0
  58. package/dist/grid/JBGridProviders.d.ts +3 -0
  59. package/dist/grid/JBGridProviders.d.ts.map +1 -1
  60. package/dist/grid/JBGridProviders.js +16 -0
  61. package/dist/grid/JBGridSkeleton.d.ts +7 -0
  62. package/dist/grid/JBGridSkeleton.d.ts.map +1 -0
  63. package/dist/grid/JBGridSkeleton.js +6 -0
  64. package/dist/grid/defaults.d.ts +4 -0
  65. package/dist/grid/defaults.d.ts.map +1 -0
  66. package/dist/grid/defaults.js +28 -0
  67. package/dist/grid/index.d.ts +3 -0
  68. package/dist/grid/index.d.ts.map +1 -1
  69. package/dist/grid/index.js +3 -0
  70. package/dist/grid/types.d.ts +120 -5
  71. package/dist/grid/types.d.ts.map +1 -1
  72. package/dist/hooks/index.d.ts +1 -0
  73. package/dist/hooks/index.d.ts.map +1 -1
  74. package/dist/hooks/index.js +1 -0
  75. package/dist/hooks/useJBEntityFormController.d.ts +54 -0
  76. package/dist/hooks/useJBEntityFormController.d.ts.map +1 -0
  77. package/dist/hooks/useJBEntityFormController.js +156 -0
  78. package/dist/index.d.ts +1 -0
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +1 -0
  81. package/dist/query/index.d.ts +1 -0
  82. package/dist/query/index.d.ts.map +1 -1
  83. package/dist/query/index.js +1 -0
  84. package/dist/query/types.d.ts +7 -0
  85. package/dist/query/types.d.ts.map +1 -0
  86. package/dist/query/types.js +1 -0
  87. package/dist/utils/errors.d.ts +10 -0
  88. package/dist/utils/errors.d.ts.map +1 -0
  89. package/dist/utils/errors.js +55 -0
  90. package/dist/utils/geo.d.ts +9 -0
  91. package/dist/utils/geo.d.ts.map +1 -0
  92. package/dist/utils/geo.js +186 -0
  93. package/dist/utils/index.d.ts +2 -0
  94. package/dist/utils/index.d.ts.map +1 -1
  95. package/dist/utils/index.js +2 -0
  96. package/package.json +7 -1
  97. package/dist/auth/ui/SignInPageTitle.d.ts +0 -6
  98. package/dist/auth/ui/SignInPageTitle.d.ts.map +0 -1
  99. package/dist/auth/ui/SignInPageTitle.js +0 -7
  100. package/dist/auth/ui/SignOutPageTitle.d.ts +0 -6
  101. package/dist/auth/ui/SignOutPageTitle.d.ts.map +0 -1
  102. package/dist/auth/ui/SignOutPageTitle.js +0 -7
  103. package/dist/auth/ui/SignUpPageTitle.d.ts +0 -6
  104. package/dist/auth/ui/SignUpPageTitle.d.ts.map +0 -1
  105. package/dist/auth/ui/SignUpPageTitle.js +0 -7
@@ -10,6 +10,18 @@ const formatCurrency = (value, currency = 'USD') => {
10
10
  currency
11
11
  }).format(amount);
12
12
  };
13
+ const formatDate = (value) => {
14
+ if (!value)
15
+ return '';
16
+ const date = value instanceof Date ? value : new Date(String(value));
17
+ if (Number.isNaN(date.getTime()))
18
+ return String(value);
19
+ return new Intl.DateTimeFormat('es-MX', {
20
+ year: 'numeric',
21
+ month: '2-digit',
22
+ day: '2-digit'
23
+ }).format(date);
24
+ };
13
25
  const BooleanFormatter = ({ value }) => {
14
26
  return _jsx("span", { children: value ? 'Yes' : 'No' });
15
27
  };
@@ -17,6 +29,9 @@ const CurrencyFormatter = ({ value, column }) => {
17
29
  const currency = column?.currency ?? 'USD';
18
30
  return _jsx("span", { children: formatCurrency(value, currency) });
19
31
  };
32
+ const DateFormatter = ({ value }) => {
33
+ return _jsx("span", { children: formatDate(value) });
34
+ };
20
35
  const ImageFormatter = ({ value, column }) => {
21
36
  const src = typeof value === 'string' ? value : '';
22
37
  const type = column?.type ?? 'square';
@@ -28,4 +43,5 @@ const ImageFormatter = ({ value, column }) => {
28
43
  };
29
44
  export const JBBooleanTypeProvider = (props) => (_jsx(DataTypeProvider, { formatterComponent: BooleanFormatter, ...props }));
30
45
  export const JBCurrencyTypeProvider = (props) => (_jsx(DataTypeProvider, { formatterComponent: CurrencyFormatter, ...props }));
46
+ export const JBDateTypeProvider = (props) => (_jsx(DataTypeProvider, { formatterComponent: DateFormatter, ...props }));
31
47
  export const JBImageTypeProvider = (props) => (_jsx(DataTypeProvider, { formatterComponent: ImageFormatter, ...props }));
@@ -0,0 +1,7 @@
1
+ type JBGridSkeletonProps = {
2
+ rows?: number;
3
+ showToolbar?: boolean;
4
+ };
5
+ export declare function JBGridSkeleton(props: JBGridSkeletonProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=JBGridSkeleton.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JBGridSkeleton.d.ts","sourceRoot":"","sources":["../../src/grid/JBGridSkeleton.tsx"],"names":[],"mappings":"AAEA,KAAK,mBAAmB,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,2CA0BxD"}
@@ -0,0 +1,6 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Box, Skeleton } from '@mui/material';
3
+ export function JBGridSkeleton(props) {
4
+ const { rows = 8, showToolbar = true } = props;
5
+ return (_jsxs(Box, { sx: { width: '100%', p: 1.5 }, children: [showToolbar ? (_jsxs(Box, { sx: { mb: 1.5, display: 'flex', justifyContent: 'space-between', gap: 1.5 }, children: [_jsx(Skeleton, { variant: "rounded", width: 240, height: 36 }), _jsx(Skeleton, { variant: "rounded", width: 160, height: 36 })] })) : null, _jsx(Skeleton, { variant: "rounded", width: "100%", height: 44 }), _jsx(Box, { sx: { mt: 1, display: 'grid', gap: 1 }, children: Array.from({ length: rows }).map((_, index) => (_jsx(Skeleton, { variant: "rounded", width: "100%", height: 40 }, index))) })] }));
6
+ }
@@ -0,0 +1,4 @@
1
+ import { JBGridDefaults } from './types';
2
+ export declare const DEFAULT_GRID_DEFAULTS: Required<JBGridDefaults>;
3
+ export declare function resolveGridDefaults(defaults?: JBGridDefaults): Required<JBGridDefaults>;
4
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/grid/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEzC,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,cAAc,CAqB1D,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,QAAQ,CAAC,cAAc,CAAC,CAKvF"}
@@ -0,0 +1,28 @@
1
+ export const DEFAULT_GRID_DEFAULTS = {
2
+ pageSize: 30,
3
+ virtualScrolling: false,
4
+ estimatedRowHeight: 48,
5
+ virtualTableHeight: 640,
6
+ virtualTableHeightMode: 'fixed',
7
+ virtualTableHeightRatio: 1,
8
+ allowSorting: true,
9
+ allowColumnResizing: true,
10
+ allowSelection: true,
11
+ allowSelectAll: false,
12
+ showSelectionColumn: false,
13
+ allowFiltering: false,
14
+ advancedFiltering: false,
15
+ allowGrouping: true,
16
+ filters: [],
17
+ sorting: [],
18
+ grouping: [],
19
+ expandedGroups: [],
20
+ expandGroupedRowsByDefault: false,
21
+ pageSizes: [10, 30, 50, 100, 200, 500, 1000]
22
+ };
23
+ export function resolveGridDefaults(defaults) {
24
+ return {
25
+ ...DEFAULT_GRID_DEFAULTS,
26
+ ...(defaults ?? {})
27
+ };
28
+ }
@@ -2,4 +2,7 @@ export * from './types';
2
2
  export * from './JBGridProviders';
3
3
  export * from './JBGridHeader';
4
4
  export * from './JBGrid';
5
+ export * from './JBGridSkeleton';
6
+ export * from './JBGridLoading';
7
+ export * from './defaults';
5
8
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/grid/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/grid/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,UAAU,CAAC;AACzB,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC"}
@@ -2,3 +2,6 @@ export * from './types';
2
2
  export * from './JBGridProviders';
3
3
  export * from './JBGridHeader';
4
4
  export * from './JBGrid';
5
+ export * from './JBGridSkeleton';
6
+ export * from './JBGridLoading';
7
+ export * from './defaults';
@@ -1,6 +1,11 @@
1
1
  import { ReactNode } from 'react';
2
2
  export type JBGridDefaults = {
3
- pageSize: number;
3
+ pageSize?: number;
4
+ virtualScrolling?: boolean;
5
+ estimatedRowHeight?: number;
6
+ virtualTableHeight?: number;
7
+ virtualTableHeightMode?: 'fixed' | 'fill';
8
+ virtualTableHeightRatio?: number;
4
9
  allowSorting?: boolean;
5
10
  allowColumnResizing?: boolean;
6
11
  allowSelection?: boolean;
@@ -11,10 +16,14 @@ export type JBGridDefaults = {
11
16
  allowGrouping?: boolean;
12
17
  filters?: unknown[];
13
18
  sorting?: unknown[];
14
- grouping?: unknown[];
15
- expandedGroups?: unknown[];
19
+ grouping?: JBGridGrouping[];
20
+ expandedGroups?: string[];
21
+ expandGroupedRowsByDefault?: boolean;
16
22
  pageSizes?: number[];
17
23
  };
24
+ export type JBGridGrouping = {
25
+ columnName: string;
26
+ };
18
27
  export type JBGridColumn = {
19
28
  name: string;
20
29
  title: string;
@@ -30,10 +39,11 @@ export type JBGridConfig = {
30
39
  imageColumns?: string[];
31
40
  booleanColumns?: string[];
32
41
  currencyColumns?: string[];
42
+ dateColumns?: string[];
33
43
  totalSummaryItems?: unknown[];
34
44
  groupSummaryItems?: unknown[];
35
45
  tableColumnExtensions?: unknown[];
36
- defaults: JBGridDefaults;
46
+ defaults?: JBGridDefaults;
37
47
  };
38
48
  export type JBGridListResponse<TData> = {
39
49
  data?: {
@@ -60,15 +70,68 @@ export type JBGridProps<TData extends Record<string, unknown>> = {
60
70
  gridConfig: JBGridConfig;
61
71
  service?: JBGridService<TData>;
62
72
  rows?: TData[];
73
+ totalCount?: number;
74
+ loading?: boolean;
75
+ isFetching?: boolean;
76
+ fetchingLabel?: string;
77
+ error?: ReactNode;
78
+ currentPage?: number;
79
+ onCurrentPageChange?: (page: number) => void;
80
+ pageSize?: number;
81
+ onPageSizeChange?: (pageSize: number) => void;
63
82
  searchText: string;
64
83
  onSearchTextChange: (text: string) => void;
65
84
  onRowSelected?: (row: TData) => void;
66
85
  loadData?: (args: JBGridLoadDataArgs<TData>) => void | Promise<void>;
67
86
  loadingComponent?: ReactNode;
87
+ emptyComponent?: ReactNode;
68
88
  getRowId?: (row: TData) => string | number;
89
+ paginationPosition?: 'top' | 'bottom' | 'both' | 'none';
90
+ stickyPagination?: boolean;
91
+ height?: number | string;
92
+ stickyHeader?: boolean;
93
+ infiniteScroll?: boolean;
94
+ hasMore?: boolean;
95
+ isLoadingMore?: boolean;
96
+ loadMoreThreshold?: number;
97
+ onLoadMore?: () => void;
98
+ };
99
+ export type JBModuleTextsConfig = {
100
+ moduleName?: string;
101
+ iconName?: string;
102
+ newText?: string;
103
+ editText?: string;
104
+ searchPlaceholder?: string;
105
+ goBackOnItemNotFoundText?: string;
106
+ goBackToGrid?: string;
107
+ formHeaderSubtitle?: string;
108
+ formHeaderRecordPrefix?: string;
109
+ };
110
+ export type JBModuleUrlsConfig = {
111
+ base?: string;
112
+ list?: string;
113
+ new?: string;
114
+ edit?: string;
115
+ };
116
+ export type JBModuleApiConfig = {
117
+ basePath: string;
118
+ [key: string]: unknown;
119
+ };
120
+ export type JBModuleConfig = {
121
+ urls?: JBModuleUrlsConfig;
122
+ texts?: JBModuleTextsConfig;
123
+ api?: JBModuleApiConfig;
69
124
  };
70
125
  export type JBGridHeaderProps = {
71
- title: string;
126
+ moduleConfig?: JBModuleConfig;
127
+ iconNameRenderer?: (iconName: string) => ReactNode;
128
+ animated?: boolean;
129
+ animationDurationMs?: number;
130
+ animationStaggerMs?: number;
131
+ animationPreset?: 'vertical' | 'sides';
132
+ breadcrumb?: ReactNode;
133
+ title?: string;
134
+ subtitle?: string;
72
135
  icon?: ReactNode;
73
136
  searchText: string;
74
137
  onSearchTextChange: (value: string) => void;
@@ -78,4 +141,56 @@ export type JBGridHeaderProps = {
78
141
  onCreateClick?: () => void;
79
142
  rightContent?: ReactNode;
80
143
  };
144
+ export type JBFormHeaderProps = {
145
+ moduleConfig?: JBModuleConfig;
146
+ iconNameRenderer?: (iconName: string) => ReactNode;
147
+ animated?: boolean;
148
+ animationDurationMs?: number;
149
+ animationStaggerMs?: number;
150
+ animationPreset?: 'vertical' | 'sides';
151
+ breadcrumb?: ReactNode;
152
+ showBackButton?: boolean;
153
+ backLabel?: string;
154
+ onBackClick?: () => void;
155
+ backContent?: ReactNode;
156
+ isNew?: boolean;
157
+ recordId?: string | number;
158
+ title?: string;
159
+ dynamicTitle?: string;
160
+ formValues?: Record<string, unknown>;
161
+ getDynamicTitle?: (args: {
162
+ isNew: boolean;
163
+ values?: Record<string, unknown>;
164
+ }) => string | undefined;
165
+ subtitle?: string;
166
+ dynamicSubtitle?: string;
167
+ getDynamicSubtitle?: (args: {
168
+ isNew: boolean;
169
+ values?: Record<string, unknown>;
170
+ }) => string | undefined;
171
+ icon?: ReactNode;
172
+ actions?: {
173
+ formDisabled?: boolean;
174
+ allowEdit?: boolean;
175
+ allowDelete?: boolean;
176
+ showDeleteWhenEditing?: boolean;
177
+ disableSave?: boolean;
178
+ disableCancel?: boolean;
179
+ disableEdit?: boolean;
180
+ disableDelete?: boolean;
181
+ saveLabel?: string;
182
+ cancelLabel?: string;
183
+ editLabel?: string;
184
+ deleteLabel?: string;
185
+ saveIcon?: ReactNode;
186
+ cancelIcon?: ReactNode;
187
+ editIcon?: ReactNode;
188
+ deleteIcon?: ReactNode;
189
+ onSave?: () => void;
190
+ onCancel?: () => void;
191
+ onStartEdit?: () => void;
192
+ onDelete?: () => void;
193
+ };
194
+ rightContent?: ReactNode;
195
+ };
81
196
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/grid/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/grid/types.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  export * from './useJBDebouncedValue';
2
+ export * from './useJBEntityFormController';
2
3
  export * from './useJBRedirect';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export * from './useJBDebouncedValue';
2
+ export * from './useJBEntityFormController';
2
3
  export * from './useJBRedirect';
@@ -0,0 +1,54 @@
1
+ import { FieldValues, UseFormReset } from 'react-hook-form';
2
+ type JBEntityFormRetrieveQuery<TRetrieveData> = {
3
+ data?: TRetrieveData | null;
4
+ isError: boolean;
5
+ error?: unknown;
6
+ };
7
+ type UseJBEntityFormControllerMessages = {
8
+ loadError?: string;
9
+ saveError?: string;
10
+ deleteError?: string;
11
+ createSuccess?: string;
12
+ updateSuccess?: string;
13
+ deleteSuccess?: string;
14
+ };
15
+ type UseJBEntityFormControllerOptions<TFormValues extends FieldValues, TRetrieveData, TCreateResponse> = {
16
+ isNew: boolean;
17
+ itemId?: string;
18
+ defaultValues: TFormValues;
19
+ retrieveQuery: JBEntityFormRetrieveQuery<TRetrieveData>;
20
+ reset: UseFormReset<TFormValues>;
21
+ mapRetrieveToValues: (data: TRetrieveData) => TFormValues;
22
+ createItem: (formData: TFormValues) => Promise<TCreateResponse>;
23
+ updateItem: (id: string, formData: TFormValues) => Promise<unknown>;
24
+ deleteItem: (id: string) => Promise<unknown>;
25
+ navigateToList: () => void;
26
+ navigateToEdit: (id: string | number) => void;
27
+ onShowError: (error: unknown, fallbackMessage: string) => void;
28
+ onShowSuccess?: (message: string) => void;
29
+ getCreatedId?: (response: TCreateResponse) => string | number | undefined;
30
+ messages?: UseJBEntityFormControllerMessages;
31
+ };
32
+ type UseJBEntityFormControllerResult<TFormValues extends FieldValues> = {
33
+ formDisabled: boolean;
34
+ loadedValues: TFormValues;
35
+ deleteDialogOpen: boolean;
36
+ setDeleteDialogOpen: (open: boolean) => void;
37
+ handleStartEdit: () => void;
38
+ handleCancelEdit: () => void;
39
+ handleSave: (formData: TFormValues) => Promise<void>;
40
+ handleDelete: () => Promise<void>;
41
+ handleSubmitOnEnter: (event: {
42
+ key: string;
43
+ defaultPrevented?: boolean;
44
+ altKey?: boolean;
45
+ ctrlKey?: boolean;
46
+ metaKey?: boolean;
47
+ shiftKey?: boolean;
48
+ target: EventTarget | null;
49
+ preventDefault: () => void;
50
+ }, submit: () => void) => void;
51
+ };
52
+ export declare function useJBEntityFormController<TFormValues extends FieldValues, TRetrieveData, TCreateResponse>(options: UseJBEntityFormControllerOptions<TFormValues, TRetrieveData, TCreateResponse>): UseJBEntityFormControllerResult<TFormValues>;
53
+ export {};
54
+ //# sourceMappingURL=useJBEntityFormController.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useJBEntityFormController.d.ts","sourceRoot":"","sources":["../../src/hooks/useJBEntityFormController.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE5D,KAAK,yBAAyB,CAAC,aAAa,IAAI;IAC9C,IAAI,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,KAAK,iCAAiC,GAAG;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,KAAK,gCAAgC,CAAC,WAAW,SAAS,WAAW,EAAE,aAAa,EAAE,eAAe,IAAI;IACvG,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,WAAW,CAAC;IAC3B,aAAa,EAAE,yBAAyB,CAAC,aAAa,CAAC,CAAC;IACxD,KAAK,EAAE,YAAY,CAAC,WAAW,CAAC,CAAC;IACjC,mBAAmB,EAAE,CAAC,IAAI,EAAE,aAAa,KAAK,WAAW,CAAC;IAC1D,UAAU,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IAChE,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACpE,UAAU,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7C,cAAc,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAAC;IAC9C,WAAW,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/D,aAAa,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1C,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC1E,QAAQ,CAAC,EAAE,iCAAiC,CAAC;CAC9C,CAAC;AAEF,KAAK,+BAA+B,CAAC,WAAW,SAAS,WAAW,IAAI;IACtE,YAAY,EAAE,OAAO,CAAC;IACtB,YAAY,EAAE,WAAW,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,mBAAmB,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IAC7C,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,UAAU,EAAE,CAAC,QAAQ,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACrD,YAAY,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,mBAAmB,EAAE,CACnB,KAAK,EAAE;QACL,GAAG,EAAE,MAAM,CAAC;QACZ,gBAAgB,CAAC,EAAE,OAAO,CAAC;QAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;QAC3B,cAAc,EAAE,MAAM,IAAI,CAAC;KAC5B,EACD,MAAM,EAAE,MAAM,IAAI,KACf,IAAI,CAAC;CACX,CAAC;AAWF,wBAAgB,yBAAyB,CAAC,WAAW,SAAS,WAAW,EAAE,aAAa,EAAE,eAAe,EACvG,OAAO,EAAE,gCAAgC,CAAC,WAAW,EAAE,aAAa,EAAE,eAAe,CAAC,GACrF,+BAA+B,CAAC,WAAW,CAAC,CAkM9C"}
@@ -0,0 +1,156 @@
1
+ import { useEffect, useRef, useState } from 'react';
2
+ const DEFAULT_MESSAGES = {
3
+ loadError: 'No se pudo cargar el registro.',
4
+ saveError: 'No se pudo guardar el registro.',
5
+ deleteError: 'No se pudo eliminar el registro.',
6
+ createSuccess: 'Registro creado correctamente.',
7
+ updateSuccess: 'Registro actualizado correctamente.',
8
+ deleteSuccess: 'Registro eliminado correctamente.'
9
+ };
10
+ export function useJBEntityFormController(options) {
11
+ const { isNew, itemId, defaultValues, retrieveQuery, reset, mapRetrieveToValues, createItem, updateItem, deleteItem, navigateToList, navigateToEdit, onShowError, onShowSuccess, getCreatedId, messages } = options;
12
+ const mapRetrieveToValuesRef = useRef(mapRetrieveToValues);
13
+ const onShowErrorRef = useRef(onShowError);
14
+ const navigateToListRef = useRef(navigateToList);
15
+ useEffect(() => {
16
+ mapRetrieveToValuesRef.current = mapRetrieveToValues;
17
+ }, [mapRetrieveToValues]);
18
+ useEffect(() => {
19
+ onShowErrorRef.current = onShowError;
20
+ }, [onShowError]);
21
+ useEffect(() => {
22
+ navigateToListRef.current = navigateToList;
23
+ }, [navigateToList]);
24
+ const resolvedMessages = {
25
+ ...DEFAULT_MESSAGES,
26
+ ...messages
27
+ };
28
+ const [formDisabled, setFormDisabled] = useState(!isNew);
29
+ const [loadedValues, setLoadedValues] = useState(defaultValues);
30
+ const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);
31
+ const skipRetrieveErrorAfterDeleteRef = useRef(false);
32
+ useEffect(() => {
33
+ if (isNew) {
34
+ reset(defaultValues);
35
+ setLoadedValues(defaultValues);
36
+ setFormDisabled(false);
37
+ return;
38
+ }
39
+ if (retrieveQuery.isError) {
40
+ if (skipRetrieveErrorAfterDeleteRef.current) {
41
+ return;
42
+ }
43
+ onShowErrorRef.current(retrieveQuery.error, resolvedMessages.loadError);
44
+ navigateToListRef.current();
45
+ return;
46
+ }
47
+ if (!retrieveQuery.data) {
48
+ return;
49
+ }
50
+ const values = mapRetrieveToValuesRef.current(retrieveQuery.data);
51
+ setLoadedValues(values);
52
+ reset(values);
53
+ setFormDisabled(true);
54
+ }, [
55
+ defaultValues,
56
+ isNew,
57
+ reset,
58
+ resolvedMessages.loadError,
59
+ retrieveQuery.data,
60
+ retrieveQuery.error,
61
+ retrieveQuery.isError
62
+ ]);
63
+ const handleSave = async (formData) => {
64
+ try {
65
+ if (isNew) {
66
+ const response = await createItem(formData);
67
+ onShowSuccess?.(resolvedMessages.createSuccess);
68
+ const createdId = getCreatedId?.(response) ?? response?.data?.id;
69
+ if (createdId !== undefined && createdId !== null) {
70
+ navigateToEdit(createdId);
71
+ }
72
+ return;
73
+ }
74
+ if (!itemId) {
75
+ return;
76
+ }
77
+ await updateItem(itemId, formData);
78
+ setLoadedValues(formData);
79
+ setFormDisabled(true);
80
+ onShowSuccess?.(resolvedMessages.updateSuccess);
81
+ }
82
+ catch (error) {
83
+ onShowError(error, resolvedMessages.saveError);
84
+ }
85
+ };
86
+ const handleDelete = async () => {
87
+ if (!itemId) {
88
+ return;
89
+ }
90
+ try {
91
+ skipRetrieveErrorAfterDeleteRef.current = true;
92
+ await deleteItem(itemId);
93
+ setDeleteDialogOpen(false);
94
+ onShowSuccess?.(resolvedMessages.deleteSuccess);
95
+ navigateToList();
96
+ }
97
+ catch (error) {
98
+ skipRetrieveErrorAfterDeleteRef.current = false;
99
+ onShowError(error, resolvedMessages.deleteError);
100
+ }
101
+ };
102
+ const handleStartEdit = () => {
103
+ setFormDisabled(false);
104
+ };
105
+ const handleCancelEdit = () => {
106
+ if (isNew) {
107
+ return;
108
+ }
109
+ reset(loadedValues);
110
+ setFormDisabled(true);
111
+ };
112
+ const handleSubmitOnEnter = (event, submit) => {
113
+ if (event.key !== 'Enter') {
114
+ return;
115
+ }
116
+ if (event.defaultPrevented) {
117
+ return;
118
+ }
119
+ if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {
120
+ return;
121
+ }
122
+ if (formDisabled || deleteDialogOpen) {
123
+ return;
124
+ }
125
+ const targetElement = event.target;
126
+ if (targetElement instanceof HTMLElement) {
127
+ const tagName = targetElement.tagName.toLowerCase();
128
+ const inputType = targetElement.getAttribute('type')?.toLowerCase();
129
+ const role = targetElement.getAttribute('role')?.toLowerCase();
130
+ const ariaAutocomplete = targetElement.getAttribute('aria-autocomplete')?.toLowerCase();
131
+ if (tagName === 'textarea' ||
132
+ tagName === 'button' ||
133
+ role === 'button' ||
134
+ role === 'combobox' ||
135
+ ariaAutocomplete === 'list' ||
136
+ targetElement.isContentEditable ||
137
+ inputType === 'submit' ||
138
+ inputType === 'button') {
139
+ return;
140
+ }
141
+ }
142
+ event.preventDefault();
143
+ submit();
144
+ };
145
+ return {
146
+ formDisabled,
147
+ loadedValues,
148
+ deleteDialogOpen,
149
+ setDeleteDialogOpen,
150
+ handleStartEdit,
151
+ handleCancelEdit,
152
+ handleSave,
153
+ handleDelete,
154
+ handleSubmitOnEnter
155
+ };
156
+ }
package/dist/index.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './auth';
2
2
  export * from './config';
3
+ export * from './core';
3
4
  export * from './forms';
4
5
  export * from './grid';
5
6
  export * from './hooks';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export * from './auth';
2
2
  export * from './config';
3
+ export * from './core';
3
4
  export * from './forms';
4
5
  export * from './grid';
5
6
  export * from './hooks';
@@ -1,3 +1,4 @@
1
1
  export * from './http';
2
2
  export * from './createQueryClient';
3
+ export * from './types';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,qBAAqB,CAAC;AACpC,cAAc,SAAS,CAAC"}
@@ -1,2 +1,3 @@
1
1
  export * from './http';
2
2
  export * from './createQueryClient';
3
+ export * from './types';
@@ -0,0 +1,7 @@
1
+ export type PaginatedResponse<T> = {
2
+ count: number;
3
+ next: string | null;
4
+ previous: string | null;
5
+ results: T[];
6
+ };
7
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/query/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,CAAC,EAAE,CAAC;CACd,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ export type ApiErrorData = {
2
+ detail?: string;
3
+ message?: string;
4
+ nonFieldErrors?: string[];
5
+ non_field_errors?: string[];
6
+ errors?: Record<string, unknown>;
7
+ [key: string]: unknown;
8
+ };
9
+ export declare const getApiErrorMessage: (error: unknown, fallback: string) => string;
10
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/utils/errors.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,CAAC;AAkBF,eAAO,MAAM,kBAAkB,GAAI,OAAO,OAAO,EAAE,UAAU,MAAM,KAAG,MAgDrE,CAAC"}