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 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
- /* ------------------------------- Render ------------------------------- */
39745
- /*------------------------------------------------------------------------*/
39746
- /*----------------------------------------*/
39747
- /* ---------------- Views --------------- */
39748
- /*----------------------------------------*/
39749
- // Body
39750
- let body;
39751
- /* ------------- Loading ------------ */
39752
- if (saving) {
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
- break;
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
- break;
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
- break;
39830
+ return validationError;
39839
39831
  }
39840
- else if (
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
- break;
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
- break;
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 == DBEntryFieldType$1.Object) {
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,