trithuc-mvc-react 2.2.1 → 2.3.2

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.
@@ -28,13 +28,27 @@ function EditorForm({ fields, submitRef }) {
28
28
  if (selectedEditItem) {
29
29
  setValue("Id", selectedEditItem.Id);
30
30
 
31
- fields.forEach(({ field, onChange, type, keyValue, keyValueLabel, defaultValue }) => {
31
+ fields.forEach(({ field, onChange, type, keyValue, keyValueLabel, defaultValue, ...rest }) => {
32
+ let value = selectedEditItem[field];
33
+
32
34
  if (type == "autocomplete") {
35
+ if (rest.multiple) {
36
+ console.log("setvalue multiple", field, value);
37
+ try {
38
+ value = JSON.parse(value);
39
+ if (!(value instanceof Array)) {
40
+ value = [];
41
+ }
42
+ } catch (error) {
43
+ value = [];
44
+ }
45
+ }
46
+
33
47
  onChange?.({
34
- [keyValue]: selectedEditItem[field]
48
+ [keyValue]: value
35
49
  });
36
50
 
37
- setValue(field, selectedEditItem ? selectedEditItem[field] : defaultValue);
51
+ setValue(field, selectedEditItem ? value : defaultValue);
38
52
  setValue(keyValueLabel, selectedEditItem[keyValueLabel]);
39
53
  } else if (type === "date") {
40
54
  setValue(field, selectedEditItem[field]);
@@ -93,6 +107,10 @@ function EditorForm({ fields, submitRef }) {
93
107
  if (data[field] && !data[keyValueLabel] && keyValueLabel) {
94
108
  data[keyValueLabel] = datas.find((item) => item[keyValue] == data[field])?.[keyLabel];
95
109
  }
110
+
111
+ if (data[field] instanceof Array) {
112
+ data[field] = JSON.stringify(data[field]);
113
+ }
96
114
  } else if (type === "file") {
97
115
  if (data[field]) {
98
116
  data[field] = JSON.stringify(data[field]);
@@ -41,15 +41,21 @@ function FormField({
41
41
  size,
42
42
  required = false,
43
43
  disabled = false,
44
+ multiple = false,
44
45
  ...rest
45
46
  }) {
46
47
  const { setValue, resetField, register, ...restForm } = useFormContext();
47
48
  const getValueObject = useCallback(
48
49
  (value) => {
49
- if (!value) return null;
50
- const result = [...datas].find((item) => item[keyValue] == value);
51
-
52
- return result;
50
+ if (multiple) {
51
+ if (!value) return [];
52
+ const result = [...datas].filter((item) => value.some((v) => v == item[keyValue]));
53
+ return result;
54
+ } else {
55
+ if (!value) return null;
56
+ const result = [...datas].find((item) => item[keyValue] == value);
57
+ return result;
58
+ }
53
59
  },
54
60
  [datas]
55
61
  );
@@ -110,6 +116,47 @@ function FormField({
110
116
  if (keyValueLabel) {
111
117
  register(keyValueLabel);
112
118
  }
119
+
120
+ if (multiple) {
121
+ return (
122
+ <Controller
123
+ name={name}
124
+ control={control}
125
+ render={({ field: { onChange: onFieldChange, value }, fieldState: { error } }) => {
126
+ return (
127
+ <Autocomplete
128
+ multiple
129
+ disabled={disabled}
130
+ disablePortal
131
+ noOptionsText="Không có dữ liệu"
132
+ loading={loading}
133
+ size={size}
134
+ options={datas ?? []}
135
+ onChange={(event, newValue) => {
136
+ console.log(newValue);
137
+ onFieldChange(newValue.map((item) => item[keyValue]));
138
+
139
+ onChange(newValue, {
140
+ formMethods: {
141
+ setValue,
142
+ resetField,
143
+ ...restForm
144
+ }
145
+ });
146
+ }}
147
+ value={getValueObject(value)}
148
+ fullWidth
149
+ getOptionLabel={(option) => option[keyLabel]}
150
+ renderInput={(params) => (
151
+ <TextField {...params} label={label} error={Boolean(error)} helperText={error?.message} />
152
+ )}
153
+ {...rest}
154
+ />
155
+ );
156
+ }}
157
+ />
158
+ );
159
+ }
113
160
  return (
114
161
  <Controller
115
162
  name={name}
@@ -125,6 +172,7 @@ function FormField({
125
172
  options={datas ?? []}
126
173
  onChange={(event, newValue) => {
127
174
  onFieldChange(newValue?.[keyValue]);
175
+
128
176
  onChange(newValue, {
129
177
  formMethods: {
130
178
  setValue,
@@ -18,6 +18,7 @@ import { usePermission } from "../../hooks";
18
18
  DataManagement.propTypes = {
19
19
  columns: PropTypes.array,
20
20
  title: PropTypes.string,
21
+ titleButtons: PropTypes.array,
21
22
  tableName: PropTypes.string,
22
23
  selectedField: PropTypes.string,
23
24
  filters: PropTypes.arrayOf(
@@ -52,6 +53,7 @@ const getDefaultValues = (filters = []) => {
52
53
  function DataManagement({
53
54
  columns = [],
54
55
  title,
56
+ titleButtons = [],
55
57
  tableName,
56
58
  selectedField = "Id",
57
59
  filters: tableFilters = [],
@@ -110,6 +112,7 @@ function DataManagement({
110
112
  return {
111
113
  tableName,
112
114
  selectedField,
115
+ titleButtons,
113
116
  columns,
114
117
  selectedEditItem,
115
118
  setSelectedEditItem,
@@ -130,6 +133,7 @@ function DataManagement({
130
133
  }, [
131
134
  tableName,
132
135
  selectedField,
136
+ titleButtons,
133
137
  columns,
134
138
  selectedEditItem,
135
139
  dataSearch,
@@ -170,6 +174,12 @@ function DataManagement({
170
174
  </IconButton>
171
175
  </Tooltip>
172
176
 
177
+ {titleButtons?.map((button, index) => (
178
+ <div key={index}>
179
+ {button}
180
+ {/* Các phần tử khác có thể được thêm ở đây nếu cần */}
181
+ </div>
182
+ ))}
173
183
  <ExportExcelButton tableName={tableName} data={dataSearch} size={elementSize} />
174
184
  {canCreate && !disableAdd && (
175
185
  <Button
@@ -199,6 +209,7 @@ function DataManagement({
199
209
  </Card>
200
210
  </FormProvider>
201
211
 
212
+ {/* nôi dung form */}
202
213
  {disableEditor || (
203
214
  <EditorDialog
204
215
  open={openEditorDialog}
@@ -207,6 +218,7 @@ function DataManagement({
207
218
  fields={editorFields}
208
219
  />
209
220
  )}
221
+ {/* nôi dung view */}
210
222
  <ViewDetailDialog open={openViewDialog} onClose={() => setOpenViewDialog(false)} fields={editorFields} />
211
223
  </DataTableContext.Provider>
212
224
  </>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trithuc-mvc-react",
3
- "version": "2.2.1",
3
+ "version": "2.3.2",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"