trithuc-mvc-react 2.1.1 → 2.3.1

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
- const { setValue, register } = useFormContext();
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,7 +172,14 @@ function FormField({
125
172
  options={datas ?? []}
126
173
  onChange={(event, newValue) => {
127
174
  onFieldChange(newValue?.[keyValue]);
128
- onChange(newValue);
175
+
176
+ onChange(newValue, {
177
+ formMethods: {
178
+ setValue,
179
+ resetField,
180
+ ...restForm
181
+ }
182
+ });
129
183
  if (keyValueLabel) {
130
184
  setValue(keyValueLabel, newValue?.[keyLabel]);
131
185
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "trithuc-mvc-react",
3
- "version": "2.1.1",
3
+ "version": "2.3.1",
4
4
  "main": "index.js",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1"