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/cjs/index.js
CHANGED
|
@@ -39689,7 +39689,7 @@ const AddOrEditDBEntry = (props) => {
|
|
|
39689
39689
|
/*------------------------------------------------------------------------*/
|
|
39690
39690
|
/* -------------- Props ------------- */
|
|
39691
39691
|
// Destructure all props
|
|
39692
|
-
const { onFinished, entryFields, dbEntryToEdit, validateEntry, modifyEntry, idPropName, saveEndpointPath, entries, } = props;
|
|
39692
|
+
const { onFinished, entryFields, dbEntryToEdit, validateEntry, modifyEntry, idPropName, saveEndpointPath, entries, itemName, } = props;
|
|
39693
39693
|
/* -------------- State ------------- */
|
|
39694
39694
|
// Initial state
|
|
39695
39695
|
const initialState = {
|
|
@@ -39717,6 +39717,8 @@ const AddOrEditDBEntry = (props) => {
|
|
|
39717
39717
|
}
|
|
39718
39718
|
});
|
|
39719
39719
|
const modifiedEntry = modifyEntry ? modifyEntry(entry) : entry;
|
|
39720
|
+
// add id key to entry so that when we delete the item, the key will always be "id"
|
|
39721
|
+
modifiedEntry.id = modifiedEntry[idPropName];
|
|
39720
39722
|
// Send to server
|
|
39721
39723
|
try {
|
|
39722
39724
|
yield visitServerEndpoint({
|
|
@@ -39740,41 +39742,31 @@ const AddOrEditDBEntry = (props) => {
|
|
|
39740
39742
|
const cancel = () => {
|
|
39741
39743
|
onFinished(undefined);
|
|
39742
39744
|
};
|
|
39743
|
-
|
|
39744
|
-
|
|
39745
|
-
|
|
39746
|
-
|
|
39747
|
-
|
|
39748
|
-
|
|
39749
|
-
|
|
39750
|
-
|
|
39751
|
-
|
|
39752
|
-
|
|
39753
|
-
body = (React__default["default"].createElement(LoadingSpinner, null));
|
|
39754
|
-
}
|
|
39755
|
-
/* -------------- Form -------------- */
|
|
39756
|
-
// If not saving, validate what the user has entered
|
|
39757
|
-
if (!saving) {
|
|
39758
|
-
// Validation error if there is one
|
|
39759
|
-
let validationError = undefined;
|
|
39760
|
-
// Validate each field
|
|
39761
|
-
for (let i = 0; i < entryFields.length; i += 1) {
|
|
39762
|
-
const field = entryFields[i];
|
|
39745
|
+
/**
|
|
39746
|
+
* Create validation error message for the DBEntry
|
|
39747
|
+
* @author Yuen Ler Chow
|
|
39748
|
+
* @param fields the fields to validate
|
|
39749
|
+
* @returns the validation error message, or an empty string if no error
|
|
39750
|
+
*/
|
|
39751
|
+
const validate = (fields) => {
|
|
39752
|
+
let validationError = '';
|
|
39753
|
+
for (let i = 0; i < fields.length; i += 1) {
|
|
39754
|
+
const field = fields[i];
|
|
39763
39755
|
const value = entry[field.objectKey];
|
|
39764
|
-
// Check if required field is empty
|
|
39765
|
-
if (field.required && !value) {
|
|
39756
|
+
// Check if required field is empty. Field is automatically required if it is the idPropName
|
|
39757
|
+
if ((field.required || (field.objectKey === idPropName)) && !value) {
|
|
39766
39758
|
validationError = `Please fill in the ${field.label} field`;
|
|
39767
|
-
|
|
39759
|
+
return validationError;
|
|
39768
39760
|
}
|
|
39769
39761
|
// Check if unique field is unique
|
|
39770
39762
|
if (field.objectKey === idPropName) {
|
|
39771
39763
|
if (entries.find((e) => { return e[idPropName] === value; })) {
|
|
39772
39764
|
validationError = `An item with the ${field.label} ${value} already exists. ${field.label} must be unique.`;
|
|
39773
|
-
|
|
39765
|
+
return validationError;
|
|
39774
39766
|
}
|
|
39775
39767
|
}
|
|
39776
39768
|
// If they have entered a value for the field, check if it is valid
|
|
39777
|
-
if (value) {
|
|
39769
|
+
if (value || field.type === DBEntryFieldType$1.Object) {
|
|
39778
39770
|
// String validation
|
|
39779
39771
|
if (field.type === DBEntryFieldType$1.String) {
|
|
39780
39772
|
if (
|
|
@@ -39835,24 +39827,46 @@ const AddOrEditDBEntry = (props) => {
|
|
|
39835
39827
|
// Value is too small
|
|
39836
39828
|
&& value[j] < field.minNumber) {
|
|
39837
39829
|
validationError = `${field.label} values must be at least ${field.minNumber}`;
|
|
39838
|
-
|
|
39830
|
+
return validationError;
|
|
39839
39831
|
}
|
|
39840
|
-
|
|
39832
|
+
if (
|
|
39841
39833
|
// Maximum value requirement is defined
|
|
39842
39834
|
field.maxNumber
|
|
39843
39835
|
// Value is too large
|
|
39844
39836
|
&& value[j] > field.maxNumber) {
|
|
39845
39837
|
validationError = `${field.label} values must be at most ${field.maxNumber}`;
|
|
39846
|
-
|
|
39838
|
+
return validationError;
|
|
39847
39839
|
}
|
|
39848
39840
|
}
|
|
39849
39841
|
}
|
|
39850
39842
|
}
|
|
39843
|
+
else if (field.type === DBEntryFieldType$1.Object) {
|
|
39844
|
+
validationError = validate(field.subfields);
|
|
39845
|
+
}
|
|
39851
39846
|
}
|
|
39852
39847
|
if (validationError) {
|
|
39853
|
-
|
|
39848
|
+
return validationError;
|
|
39854
39849
|
}
|
|
39855
39850
|
}
|
|
39851
|
+
return validationError;
|
|
39852
|
+
};
|
|
39853
|
+
/*------------------------------------------------------------------------*/
|
|
39854
|
+
/* ------------------------------- Render ------------------------------- */
|
|
39855
|
+
/*------------------------------------------------------------------------*/
|
|
39856
|
+
/*----------------------------------------*/
|
|
39857
|
+
/* ---------------- Views --------------- */
|
|
39858
|
+
/*----------------------------------------*/
|
|
39859
|
+
// Body
|
|
39860
|
+
let body;
|
|
39861
|
+
/* ------------- Loading ------------ */
|
|
39862
|
+
if (saving) {
|
|
39863
|
+
body = (React__default["default"].createElement(LoadingSpinner, null));
|
|
39864
|
+
}
|
|
39865
|
+
/* -------------- Form -------------- */
|
|
39866
|
+
// If not saving, validate what the user has entered
|
|
39867
|
+
if (!saving) {
|
|
39868
|
+
// Validation error if there is one
|
|
39869
|
+
const validationError = validate(entryFields);
|
|
39856
39870
|
/**
|
|
39857
39871
|
* Render a single entry field
|
|
39858
39872
|
* @author Yuen Ler Chow
|
|
@@ -39958,19 +39972,20 @@ const AddOrEditDBEntry = (props) => {
|
|
|
39958
39972
|
});
|
|
39959
39973
|
} })))));
|
|
39960
39974
|
}
|
|
39961
|
-
if (field.type
|
|
39975
|
+
if (field.type === DBEntryFieldType$1.Object) {
|
|
39962
39976
|
return (React__default["default"].createElement("div", { key: field.objectKey, className: "mb-2" },
|
|
39963
39977
|
React__default["default"].createElement("div", { className: "input-group" },
|
|
39964
39978
|
React__default["default"].createElement("span", { className: "AddOrEditDBEntry-input-label input-group-text" }, field.label),
|
|
39965
|
-
field.subfields.map((subfield) => {
|
|
39966
|
-
return renderEntryField(subfield, disabled);
|
|
39967
|
-
}))));
|
|
39979
|
+
React__default["default"].createElement("div", { className: "flex-grow-1 p-2 form-control" }, field.subfields.map((subfield) => {
|
|
39980
|
+
return React__default["default"].createElement("div", null, renderEntryField(subfield, disabled));
|
|
39981
|
+
})))));
|
|
39968
39982
|
}
|
|
39969
39983
|
// This should never happen
|
|
39970
39984
|
return null;
|
|
39971
39985
|
};
|
|
39972
39986
|
// UI
|
|
39973
39987
|
body = (React__default["default"].createElement("div", null,
|
|
39988
|
+
React__default["default"].createElement("h1", null, dbEntryToEdit ? `Edit ${itemName}` : `Create ${itemName}`),
|
|
39974
39989
|
entryFields.map((field) => {
|
|
39975
39990
|
const disabled = (idPropName === field.objectKey && dbEntryToEdit !== undefined)
|
|
39976
39991
|
|| (field.lockAfterCreation !== undefined && dbEntryToEdit !== undefined);
|
|
@@ -39978,12 +39993,12 @@ const AddOrEditDBEntry = (props) => {
|
|
|
39978
39993
|
}),
|
|
39979
39994
|
React__default["default"].createElement("div", { className: "text-center mt-2" },
|
|
39980
39995
|
React__default["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* () {
|
|
39981
|
-
if (validationError) {
|
|
39996
|
+
if (validationError && validationError.length > 0) {
|
|
39982
39997
|
return alert$1('Please fix the following error', validationError);
|
|
39983
39998
|
}
|
|
39984
39999
|
if (validateEntry) {
|
|
39985
40000
|
try {
|
|
39986
|
-
validateEntry(entry);
|
|
40001
|
+
yield validateEntry(entry);
|
|
39987
40002
|
}
|
|
39988
40003
|
catch (error) {
|
|
39989
40004
|
return alert$1('Please fix the following error', String(error));
|
|
@@ -40099,7 +40114,7 @@ const reducer = (state, action) => {
|
|
|
40099
40114
|
/*------------------------------------------------------------------------*/
|
|
40100
40115
|
const DBEntryManagerPanel = (props) => {
|
|
40101
40116
|
// Destructure all props
|
|
40102
|
-
const { entryFields, titlePropName, descriptionPropName, idPropName, itemListTitle, itemName, validateEntry, modifyEntry, disableEdit, collectionName, adminsOnly, filterQuery } = props;
|
|
40117
|
+
const { entryFields, titlePropName, descriptionPropName, idPropName, itemListTitle, itemName, validateEntry, modifyEntry, disableEdit, collectionName, adminsOnly, filterQuery, } = props;
|
|
40103
40118
|
/* -------------- State ------------- */
|
|
40104
40119
|
// Initial state
|
|
40105
40120
|
const initialState = {
|
|
@@ -40235,7 +40250,7 @@ const DBEntryManagerPanel = (props) => {
|
|
|
40235
40250
|
}
|
|
40236
40251
|
/* --------- Create or edit entry -------- */
|
|
40237
40252
|
if (!loading && (adding || dbEntryToEdit)) {
|
|
40238
|
-
body = (React__default["default"].createElement(AddOrEditDBEntry, { saveEndpointPath: endpoint, validateEntry: validateEntry, modifyEntry: modifyEntry, entryFields: entryFields, dbEntryToEdit: dbEntryToEdit, idPropName: idPropName, entries: dbEntries, onFinished: (entry) => {
|
|
40253
|
+
body = (React__default["default"].createElement(AddOrEditDBEntry, { saveEndpointPath: endpoint, validateEntry: validateEntry, modifyEntry: modifyEntry, entryFields: entryFields, dbEntryToEdit: dbEntryToEdit, idPropName: idPropName, entries: dbEntries, itemName: itemName, onFinished: (entry) => {
|
|
40239
40254
|
dispatch({
|
|
40240
40255
|
type: ActionType.FinishAdd,
|
|
40241
40256
|
dbEntry: entry,
|