dce-reactkit 3.4.0-beta.6 → 3.4.0-beta.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.
- package/dist/cjs/index.js +53 -38
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/components/DBEntryManagerPanel/AddOrEditDBEntry/index.d.ts +1 -0
- package/dist/esm/index.js +53 -38
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/components/DBEntryManagerPanel/AddOrEditDBEntry/index.d.ts +1 -0
- package/package.json +1 -1
- package/src/components/DBEntryManagerPanel/AddOrEditDBEntry/CreatableMultiselect.tsx +1 -5
- package/src/components/DBEntryManagerPanel/AddOrEditDBEntry/index.tsx +75 -51
- package/src/components/DBEntryManagerPanel/index.tsx +2 -2
package/dist/esm/index.js
CHANGED
|
@@ -39663,7 +39663,7 @@ const AddOrEditDBEntry = (props) => {
|
|
|
39663
39663
|
/*------------------------------------------------------------------------*/
|
|
39664
39664
|
/* -------------- Props ------------- */
|
|
39665
39665
|
// Destructure all props
|
|
39666
|
-
const { onFinished, entryFields, dbEntryToEdit, validateEntry, modifyEntry, idPropName, saveEndpointPath, entries, } = props;
|
|
39666
|
+
const { onFinished, entryFields, dbEntryToEdit, validateEntry, modifyEntry, idPropName, saveEndpointPath, entries, itemName, } = props;
|
|
39667
39667
|
/* -------------- State ------------- */
|
|
39668
39668
|
// Initial state
|
|
39669
39669
|
const initialState = {
|
|
@@ -39691,6 +39691,8 @@ const AddOrEditDBEntry = (props) => {
|
|
|
39691
39691
|
}
|
|
39692
39692
|
});
|
|
39693
39693
|
const modifiedEntry = modifyEntry ? modifyEntry(entry) : entry;
|
|
39694
|
+
// add id key to entry so that when we delete the item, the key will always be "id"
|
|
39695
|
+
modifiedEntry.id = modifiedEntry[idPropName];
|
|
39694
39696
|
// Send to server
|
|
39695
39697
|
try {
|
|
39696
39698
|
yield visitServerEndpoint({
|
|
@@ -39714,41 +39716,31 @@ const AddOrEditDBEntry = (props) => {
|
|
|
39714
39716
|
const cancel = () => {
|
|
39715
39717
|
onFinished(undefined);
|
|
39716
39718
|
};
|
|
39717
|
-
|
|
39718
|
-
|
|
39719
|
-
|
|
39720
|
-
|
|
39721
|
-
|
|
39722
|
-
|
|
39723
|
-
|
|
39724
|
-
|
|
39725
|
-
|
|
39726
|
-
|
|
39727
|
-
body = (React__default.createElement(LoadingSpinner, null));
|
|
39728
|
-
}
|
|
39729
|
-
/* -------------- Form -------------- */
|
|
39730
|
-
// If not saving, validate what the user has entered
|
|
39731
|
-
if (!saving) {
|
|
39732
|
-
// Validation error if there is one
|
|
39733
|
-
let validationError = undefined;
|
|
39734
|
-
// Validate each field
|
|
39735
|
-
for (let i = 0; i < entryFields.length; i += 1) {
|
|
39736
|
-
const field = entryFields[i];
|
|
39719
|
+
/**
|
|
39720
|
+
* Create validation error message for the DBEntry
|
|
39721
|
+
* @author Yuen Ler Chow
|
|
39722
|
+
* @param fields the fields to validate
|
|
39723
|
+
* @returns the validation error message, or an empty string if no error
|
|
39724
|
+
*/
|
|
39725
|
+
const validate = (fields) => {
|
|
39726
|
+
let validationError = '';
|
|
39727
|
+
for (let i = 0; i < fields.length; i += 1) {
|
|
39728
|
+
const field = fields[i];
|
|
39737
39729
|
const value = entry[field.objectKey];
|
|
39738
|
-
// Check if required field is empty
|
|
39739
|
-
if (field.required && !value) {
|
|
39730
|
+
// Check if required field is empty. Field is automatically required if it is the idPropName
|
|
39731
|
+
if ((field.required || (field.objectKey === idPropName)) && !value) {
|
|
39740
39732
|
validationError = `Please fill in the ${field.label} field`;
|
|
39741
|
-
|
|
39733
|
+
return validationError;
|
|
39742
39734
|
}
|
|
39743
39735
|
// Check if unique field is unique
|
|
39744
39736
|
if (field.objectKey === idPropName) {
|
|
39745
39737
|
if (entries.find((e) => { return e[idPropName] === value; })) {
|
|
39746
39738
|
validationError = `An item with the ${field.label} ${value} already exists. ${field.label} must be unique.`;
|
|
39747
|
-
|
|
39739
|
+
return validationError;
|
|
39748
39740
|
}
|
|
39749
39741
|
}
|
|
39750
39742
|
// If they have entered a value for the field, check if it is valid
|
|
39751
|
-
if (value) {
|
|
39743
|
+
if (value || field.type === DBEntryFieldType$1.Object) {
|
|
39752
39744
|
// String validation
|
|
39753
39745
|
if (field.type === DBEntryFieldType$1.String) {
|
|
39754
39746
|
if (
|
|
@@ -39809,24 +39801,46 @@ const AddOrEditDBEntry = (props) => {
|
|
|
39809
39801
|
// Value is too small
|
|
39810
39802
|
&& value[j] < field.minNumber) {
|
|
39811
39803
|
validationError = `${field.label} values must be at least ${field.minNumber}`;
|
|
39812
|
-
|
|
39804
|
+
return validationError;
|
|
39813
39805
|
}
|
|
39814
|
-
|
|
39806
|
+
if (
|
|
39815
39807
|
// Maximum value requirement is defined
|
|
39816
39808
|
field.maxNumber
|
|
39817
39809
|
// Value is too large
|
|
39818
39810
|
&& value[j] > field.maxNumber) {
|
|
39819
39811
|
validationError = `${field.label} values must be at most ${field.maxNumber}`;
|
|
39820
|
-
|
|
39812
|
+
return validationError;
|
|
39821
39813
|
}
|
|
39822
39814
|
}
|
|
39823
39815
|
}
|
|
39824
39816
|
}
|
|
39817
|
+
else if (field.type === DBEntryFieldType$1.Object) {
|
|
39818
|
+
validationError = validate(field.subfields);
|
|
39819
|
+
}
|
|
39825
39820
|
}
|
|
39826
39821
|
if (validationError) {
|
|
39827
|
-
|
|
39822
|
+
return validationError;
|
|
39828
39823
|
}
|
|
39829
39824
|
}
|
|
39825
|
+
return validationError;
|
|
39826
|
+
};
|
|
39827
|
+
/*------------------------------------------------------------------------*/
|
|
39828
|
+
/* ------------------------------- Render ------------------------------- */
|
|
39829
|
+
/*------------------------------------------------------------------------*/
|
|
39830
|
+
/*----------------------------------------*/
|
|
39831
|
+
/* ---------------- Views --------------- */
|
|
39832
|
+
/*----------------------------------------*/
|
|
39833
|
+
// Body
|
|
39834
|
+
let body;
|
|
39835
|
+
/* ------------- Loading ------------ */
|
|
39836
|
+
if (saving) {
|
|
39837
|
+
body = (React__default.createElement(LoadingSpinner, null));
|
|
39838
|
+
}
|
|
39839
|
+
/* -------------- Form -------------- */
|
|
39840
|
+
// If not saving, validate what the user has entered
|
|
39841
|
+
if (!saving) {
|
|
39842
|
+
// Validation error if there is one
|
|
39843
|
+
const validationError = validate(entryFields);
|
|
39830
39844
|
/**
|
|
39831
39845
|
* Render a single entry field
|
|
39832
39846
|
* @author Yuen Ler Chow
|
|
@@ -39932,19 +39946,20 @@ const AddOrEditDBEntry = (props) => {
|
|
|
39932
39946
|
});
|
|
39933
39947
|
} })))));
|
|
39934
39948
|
}
|
|
39935
|
-
if (field.type
|
|
39949
|
+
if (field.type === DBEntryFieldType$1.Object) {
|
|
39936
39950
|
return (React__default.createElement("div", { key: field.objectKey, className: "mb-2" },
|
|
39937
39951
|
React__default.createElement("div", { className: "input-group" },
|
|
39938
39952
|
React__default.createElement("span", { className: "AddOrEditDBEntry-input-label input-group-text" }, field.label),
|
|
39939
|
-
field.subfields.map((subfield) => {
|
|
39940
|
-
return renderEntryField(subfield, disabled);
|
|
39941
|
-
}))));
|
|
39953
|
+
React__default.createElement("div", { className: "flex-grow-1 p-2 form-control" }, field.subfields.map((subfield) => {
|
|
39954
|
+
return React__default.createElement("div", null, renderEntryField(subfield, disabled));
|
|
39955
|
+
})))));
|
|
39942
39956
|
}
|
|
39943
39957
|
// This should never happen
|
|
39944
39958
|
return null;
|
|
39945
39959
|
};
|
|
39946
39960
|
// UI
|
|
39947
39961
|
body = (React__default.createElement("div", null,
|
|
39962
|
+
React__default.createElement("h1", null, dbEntryToEdit ? `Edit ${itemName}` : `Create ${itemName}`),
|
|
39948
39963
|
entryFields.map((field) => {
|
|
39949
39964
|
const disabled = (idPropName === field.objectKey && dbEntryToEdit !== undefined)
|
|
39950
39965
|
|| (field.lockAfterCreation !== undefined && dbEntryToEdit !== undefined);
|
|
@@ -39952,12 +39967,12 @@ const AddOrEditDBEntry = (props) => {
|
|
|
39952
39967
|
}),
|
|
39953
39968
|
React__default.createElement("div", { className: "text-center mt-2" },
|
|
39954
39969
|
React__default.createElement("button", { type: "button", id: "AddOrEditDBEntry-save-changes-button", className: "btn btn-primary btn-lg me-1", "aria-label": "Save changes", onClick: () => __awaiter(void 0, void 0, void 0, function* () {
|
|
39955
|
-
if (validationError) {
|
|
39970
|
+
if (validationError && validationError.length > 0) {
|
|
39956
39971
|
return alert$1('Please fix the following error', validationError);
|
|
39957
39972
|
}
|
|
39958
39973
|
if (validateEntry) {
|
|
39959
39974
|
try {
|
|
39960
|
-
validateEntry(entry);
|
|
39975
|
+
yield validateEntry(entry);
|
|
39961
39976
|
}
|
|
39962
39977
|
catch (error) {
|
|
39963
39978
|
return alert$1('Please fix the following error', String(error));
|
|
@@ -40073,7 +40088,7 @@ const reducer = (state, action) => {
|
|
|
40073
40088
|
/*------------------------------------------------------------------------*/
|
|
40074
40089
|
const DBEntryManagerPanel = (props) => {
|
|
40075
40090
|
// Destructure all props
|
|
40076
|
-
const { entryFields, titlePropName, descriptionPropName, idPropName, itemListTitle, itemName, validateEntry, modifyEntry, disableEdit, collectionName, adminsOnly, filterQuery } = props;
|
|
40091
|
+
const { entryFields, titlePropName, descriptionPropName, idPropName, itemListTitle, itemName, validateEntry, modifyEntry, disableEdit, collectionName, adminsOnly, filterQuery, } = props;
|
|
40077
40092
|
/* -------------- State ------------- */
|
|
40078
40093
|
// Initial state
|
|
40079
40094
|
const initialState = {
|
|
@@ -40209,7 +40224,7 @@ const DBEntryManagerPanel = (props) => {
|
|
|
40209
40224
|
}
|
|
40210
40225
|
/* --------- Create or edit entry -------- */
|
|
40211
40226
|
if (!loading && (adding || dbEntryToEdit)) {
|
|
40212
|
-
body = (React__default.createElement(AddOrEditDBEntry, { saveEndpointPath: endpoint, validateEntry: validateEntry, modifyEntry: modifyEntry, entryFields: entryFields, dbEntryToEdit: dbEntryToEdit, idPropName: idPropName, entries: dbEntries, onFinished: (entry) => {
|
|
40227
|
+
body = (React__default.createElement(AddOrEditDBEntry, { saveEndpointPath: endpoint, validateEntry: validateEntry, modifyEntry: modifyEntry, entryFields: entryFields, dbEntryToEdit: dbEntryToEdit, idPropName: idPropName, entries: dbEntries, itemName: itemName, onFinished: (entry) => {
|
|
40213
40228
|
dispatch({
|
|
40214
40229
|
type: ActionType.FinishAdd,
|
|
40215
40230
|
dbEntry: entry,
|