ding-react-admin 1.0.1 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +107 -2
  2. package/dist/index.js +712 -723
  3. package/dist/src/crud/InlineFormSet.d.ts +13 -11
  4. package/dist/src/crud/InlineFormSet.d.ts.map +1 -1
  5. package/dist/src/crud/ResourceForm.d.ts +10 -2
  6. package/dist/src/crud/ResourceForm.d.ts.map +1 -1
  7. package/dist/src/crud/ResourceFormModal.d.ts.map +1 -1
  8. package/dist/src/crud/ResourceList.d.ts.map +1 -1
  9. package/dist/src/crud/context/SubmitFieldsContext.d.ts +18 -0
  10. package/dist/src/crud/context/SubmitFieldsContext.d.ts.map +1 -0
  11. package/dist/src/crud/fields/BooleanField.d.ts +3 -1
  12. package/dist/src/crud/fields/BooleanField.d.ts.map +1 -1
  13. package/dist/src/crud/fields/DateField.d.ts +3 -1
  14. package/dist/src/crud/fields/DateField.d.ts.map +1 -1
  15. package/dist/src/crud/fields/FieldWrapper.d.ts +7 -14
  16. package/dist/src/crud/fields/FieldWrapper.d.ts.map +1 -1
  17. package/dist/src/crud/fields/NumberField.d.ts +5 -3
  18. package/dist/src/crud/fields/NumberField.d.ts.map +1 -1
  19. package/dist/src/crud/fields/PasswordField.d.ts +5 -3
  20. package/dist/src/crud/fields/PasswordField.d.ts.map +1 -1
  21. package/dist/src/crud/fields/ReferenceField.d.ts +6 -5
  22. package/dist/src/crud/fields/ReferenceField.d.ts.map +1 -1
  23. package/dist/src/crud/fields/ReferenceManyField.d.ts +3 -1
  24. package/dist/src/crud/fields/ReferenceManyField.d.ts.map +1 -1
  25. package/dist/src/crud/fields/SelectField.d.ts +3 -1
  26. package/dist/src/crud/fields/SelectField.d.ts.map +1 -1
  27. package/dist/src/crud/fields/TextField.d.ts +5 -3
  28. package/dist/src/crud/fields/TextField.d.ts.map +1 -1
  29. package/dist/src/crud/index.d.ts +8 -4
  30. package/dist/src/crud/index.d.ts.map +1 -1
  31. package/dist/src/crud/types.d.ts +21 -20
  32. package/dist/src/crud/types.d.ts.map +1 -1
  33. package/dist/src/crud/utils/inlineFieldName.d.ts +3 -0
  34. package/dist/src/crud/utils/inlineFieldName.d.ts.map +1 -0
  35. package/dist/src/crud/utils/useAbortableEffect.d.ts +7 -0
  36. package/dist/src/crud/utils/useAbortableEffect.d.ts.map +1 -0
  37. package/dist/src/crud/utils/useResourceFormData.d.ts +47 -0
  38. package/dist/src/crud/utils/useResourceFormData.d.ts.map +1 -0
  39. package/dist/src/data/abortError.d.ts +3 -0
  40. package/dist/src/data/abortError.d.ts.map +1 -0
  41. package/dist/src/data/abortError.test.d.ts +2 -0
  42. package/dist/src/data/abortError.test.d.ts.map +1 -0
  43. package/dist/src/data/createRestResourceHandlers.d.ts +2 -2
  44. package/dist/src/data/createRestResourceHandlers.d.ts.map +1 -1
  45. package/dist/src/data/dataProviderTypes.d.ts +7 -1
  46. package/dist/src/data/dataProviderTypes.d.ts.map +1 -1
  47. package/dist/src/data/resourceHandlers.d.ts +2 -2
  48. package/dist/src/data/resourceHandlers.d.ts.map +1 -1
  49. package/dist/src/index.d.ts +4 -3
  50. package/dist/src/index.d.ts.map +1 -1
  51. package/docs/assets/form-with-inline.png +0 -0
  52. package/package.json +59 -59
  53. package/src/crud/InlineFormSet.tsx +77 -89
  54. package/src/crud/ResourceForm.tsx +87 -202
  55. package/src/crud/ResourceFormModal.tsx +37 -25
  56. package/src/crud/ResourceList.tsx +35 -26
  57. package/src/crud/context/SubmitFieldsContext.tsx +62 -0
  58. package/src/crud/fields/BooleanField.tsx +22 -16
  59. package/src/crud/fields/DateField.tsx +32 -26
  60. package/src/crud/fields/FieldWrapper.tsx +32 -54
  61. package/src/crud/fields/NumberField.tsx +36 -34
  62. package/src/crud/fields/PasswordField.tsx +41 -40
  63. package/src/crud/fields/ReferenceField.tsx +35 -130
  64. package/src/crud/fields/ReferenceManyField.tsx +31 -25
  65. package/src/crud/fields/SelectField.tsx +6 -0
  66. package/src/crud/fields/TextField.tsx +32 -30
  67. package/src/crud/index.ts +19 -2
  68. package/src/crud/types.ts +132 -130
  69. package/src/crud/utils/inlineFieldName.ts +8 -0
  70. package/src/crud/utils/useAbortableEffect.ts +17 -0
  71. package/src/crud/utils/useResourceFormData.ts +231 -0
  72. package/src/data/abortError.test.ts +19 -0
  73. package/src/data/abortError.ts +10 -0
  74. package/src/data/createMemoryResourceHandlers.ts +1 -1
  75. package/src/data/createRestResourceHandlers.ts +4 -4
  76. package/src/data/dataProviderTypes.ts +8 -0
  77. package/src/data/resourceHandlers.ts +4 -3
  78. package/src/index.ts +14 -1
  79. package/dist/src/crud/context/FormFieldsContext.d.ts +0 -14
  80. package/dist/src/crud/context/FormFieldsContext.d.ts.map +0 -1
  81. package/dist/src/crud/context/InlineFormContext.d.ts +0 -16
  82. package/dist/src/crud/context/InlineFormContext.d.ts.map +0 -1
  83. package/dist/src/crud/fields/useInlineOrFormField.d.ts +0 -10
  84. package/dist/src/crud/fields/useInlineOrFormField.d.ts.map +0 -1
  85. package/src/crud/context/FormFieldsContext.tsx +0 -76
  86. package/src/crud/context/InlineFormContext.tsx +0 -71
  87. package/src/crud/fields/useInlineOrFormField.tsx +0 -91
package/README.md CHANGED
@@ -2,9 +2,11 @@
2
2
 
3
3
  **npm:** [`ding-react-admin`](https://www.npmjs.com/package/ding-react-admin)
4
4
 
5
- **Live demo:** [playground on GitHub Pages](https://muhammadinaam.github.io/ding-react-admin/) (login: `admin` / `admin` or `user` / `user`)
5
+ ## Live demo:
6
+ [playground on GitHub Pages](https://muhammadinaam.github.io/ding-react-admin/) (login: `admin` / `admin` or `user` / `user`)
6
7
 
7
- **Tutorial:** [Build an admin app and add a Users page](docs/tutorial-one-entity.md) — step-by-step from `yarn create vite` through CRUD and routes.
8
+ ## Tutorial:
9
+ [Build an admin app and add a Users page](docs/tutorial-one-entity.md) — step-by-step from `yarn create vite` through CRUD and routes.
8
10
 
9
11
  ```bash
10
12
  yarn add ding-react-admin antd @ant-design/icons dayjs react-hook-form react-router-dom
@@ -26,6 +28,109 @@ From the [playground demo](https://muhammadinaam.github.io/ding-react-admin/):
26
28
  | --- | --- |
27
29
  | ![Modal form with steps](docs/assets/modal-form-stepped.png) | ![Login page](docs/assets/login.png) |
28
30
 
31
+ ## Declarative CRUD
32
+
33
+ Wire a [`DataProvider`](docs/data-permissions.md) (see [Providers](#providers-manual-composition) below), then describe list and form pages in JSX — field `source` names map to your API. Filters, modals, permissions, and validation plug in when you need them; start with the basics:
34
+
35
+ ### List page
36
+
37
+ ```tsx
38
+ import { ResourceList, TextColumn, DateColumn } from "ding-react-admin";
39
+
40
+ export function InvoiceListPage() {
41
+ return (
42
+ <ResourceList resource="invoices" title="Invoices" pathPrefix="/invoices">
43
+ <TextColumn source="number" label="Number" />
44
+ <TextColumn source="customer" label="Customer" />
45
+ <DateColumn source="issuedAt" label="Issued" />
46
+ </ResourceList>
47
+ );
48
+ }
49
+ ```
50
+
51
+ Add `<TextFilter />`, `<ReferenceFilter />`, bulk actions, and row permissions inside the same component — [list pages guide](docs/crud/list-pages.md).
52
+
53
+ ### Form page
54
+
55
+ ```tsx
56
+ import { ResourceForm, TextField, DateField } from "ding-react-admin";
57
+
58
+ export function InvoiceFormPage() {
59
+ return (
60
+ <ResourceForm resource="invoices" title="Invoice" listPath="/invoices">
61
+ <TextField source="number" label="Number" required />
62
+ <TextField source="customer" label="Customer" required />
63
+ <DateField source="issuedAt" label="Issued" required />
64
+ </ResourceForm>
65
+ );
66
+ }
67
+ ```
68
+
69
+ Tabbed forms, stepped modals, and API error mapping — [forms guide](docs/crud/forms.md).
70
+
71
+ ### Inline nested rows
72
+
73
+ Django-style tabular inlines: related rows edit in a table inside the parent form.
74
+
75
+ ![Form with inline rows](docs/assets/form-with-inline.png)
76
+
77
+ ```tsx
78
+ import {
79
+ InlineFormSet,
80
+ NumberField,
81
+ ResourceForm,
82
+ TextField,
83
+ } from "ding-react-admin";
84
+
85
+ <ResourceForm
86
+ resource="invoices"
87
+ title="Invoice"
88
+ listPath="/invoices"
89
+ inlines={[{ resource: "invoice-lines", foreignKey: "invoiceId" }]}
90
+ >
91
+ <TextField source="number" label="Number" required />
92
+ <TextField source="customer" label="Customer" required />
93
+ <InlineFormSet
94
+ resource="invoice-lines"
95
+ foreignKey="invoiceId"
96
+ label="Lines"
97
+ columns={[
98
+ {
99
+ source: "label",
100
+ label: "Label",
101
+ cell: ({ name }) => (
102
+ <TextField source="label" name={name} hideLabel required />
103
+ ),
104
+ },
105
+ {
106
+ source: "quantity",
107
+ label: "Qty",
108
+ width: 120,
109
+ cell: ({ name }) => (
110
+ <NumberField source="quantity" name={name} hideLabel required min={0} />
111
+ ),
112
+ },
113
+ {
114
+ source: "unitPrice",
115
+ label: "Unit price",
116
+ cell: ({ name }) => (
117
+ <NumberField
118
+ source="unitPrice"
119
+ name={name}
120
+ hideLabel
121
+ required
122
+ min={0}
123
+ step={0.01}
124
+ />
125
+ ),
126
+ },
127
+ ]}
128
+ />
129
+ </ResourceForm>
130
+ ```
131
+
132
+ Stacked layout, dependent fields, and validation — [inlines guide](docs/crud/inlines.md).
133
+
29
134
  ## Providers (manual composition)
30
135
 
31
136
  Nothing is wired automatically except theme inside `<AdminApp />`. Wrap providers yourself: