@digi-frontend/dgate-api-documentation 4.1.0 → 4.1.3

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/index.mjs CHANGED
@@ -2695,7 +2695,7 @@ const PARAM_TYPE_OPTIONS = [
2695
2695
  value: "object"
2696
2696
  }
2697
2697
  ];
2698
- const AddParameterDrawer = ({ open, onClose, onAdd, onEdit, mode = "add", initialValues, source }) => {
2698
+ const AddParameterDrawer = ({ open, onClose, onAdd, onEdit, mode = "add", initialValues, source, endpointName }) => {
2699
2699
  const [form] = Form.useForm();
2700
2700
  const [messageApi, contextHolder] = message.useMessage();
2701
2701
  const [confirmModalOpen, setConfirmModalOpen] = useState(false);
@@ -2715,7 +2715,8 @@ const AddParameterDrawer = ({ open, onClose, onAdd, onEdit, mode = "add", initia
2715
2715
  in: initialValues.in,
2716
2716
  type: initialValues.type,
2717
2717
  required: initialValues.required,
2718
- description: initialValues.description
2718
+ description: initialValues.description,
2719
+ itemsType: initialValues.items?.type
2719
2720
  });
2720
2721
  setEnumValues(initialValues.enum ?? []);
2721
2722
  } else {
@@ -2850,7 +2851,7 @@ const AddParameterDrawer = ({ open, onClose, onAdd, onEdit, mode = "add", initia
2850
2851
  alignItems: "center",
2851
2852
  position: "relative",
2852
2853
  paddingTop: 20,
2853
- paddingBottom: 8,
2854
+ paddingBottom: 5,
2854
2855
  paddingLeft: 24,
2855
2856
  paddingRight: 24,
2856
2857
  width: "100%"
@@ -2957,7 +2958,8 @@ const AddParameterDrawer = ({ open, onClose, onAdd, onEdit, mode = "add", initia
2957
2958
  type: values.type,
2958
2959
  required: values.required ?? true,
2959
2960
  description: values.description || void 0,
2960
- enum: enumValues.length > 0 ? enumValues : void 0
2961
+ enum: enumValues.length > 0 ? enumValues : void 0,
2962
+ ...values.type === "array" && values.itemsType && { items: { type: values.itemsType } }
2961
2963
  };
2962
2964
  if (mode === "edit") {
2963
2965
  onEdit?.(payload);
@@ -3089,6 +3091,25 @@ const AddParameterDrawer = ({ open, onClose, onAdd, onEdit, mode = "add", initia
3089
3091
  options: PARAM_TYPE_OPTIONS
3090
3092
  })
3091
3093
  }),
3094
+ typeValue === "array" && /* @__PURE__ */ jsx(Form.Item, {
3095
+ name: "itemsType",
3096
+ label: /* @__PURE__ */ jsxs("span", {
3097
+ className: cx("label"),
3098
+ children: ["Items Type", /* @__PURE__ */ jsx("span", {
3099
+ className: cx("asterisk"),
3100
+ children: "*"
3101
+ })]
3102
+ }),
3103
+ rules: [{
3104
+ required: true,
3105
+ message: "Items Type is required"
3106
+ }],
3107
+ children: /* @__PURE__ */ jsx(Select, {
3108
+ size: "large",
3109
+ placeholder: "Select",
3110
+ options: PARAM_TYPE_OPTIONS
3111
+ })
3112
+ }),
3092
3113
  /* @__PURE__ */ jsx(Form.Item, {
3093
3114
  name: "required",
3094
3115
  children: /* @__PURE__ */ jsxs("div", {
@@ -3202,9 +3223,9 @@ const AddParameterDrawer = ({ open, onClose, onAdd, onEdit, mode = "add", initia
3202
3223
  className: cx("modalTitle"),
3203
3224
  children: [
3204
3225
  mode === "edit" ? "Edit" : "Add",
3205
- " ",
3206
- paramName,
3207
- " parameter"
3226
+ " Parameter to ",
3227
+ endpointName,
3228
+ " endpoint"
3208
3229
  ]
3209
3230
  }), /* @__PURE__ */ jsx("button", {
3210
3231
  className: cx("modalCloseBtn"),
@@ -3222,7 +3243,10 @@ const AddParameterDrawer = ({ open, onClose, onAdd, onEdit, mode = "add", initia
3222
3243
  mode === "edit" ? "edit" : "add",
3223
3244
  " ",
3224
3245
  paramName,
3225
- " parameter?"
3246
+ " parameter to",
3247
+ " ",
3248
+ endpointName,
3249
+ " endpoint?"
3226
3250
  ]
3227
3251
  })
3228
3252
  }),
@@ -3313,6 +3337,15 @@ const EndpointsSection = ({ endpointsByTag, collapsed = false, onToggleCollapse,
3313
3337
  const [openResponsePanels, setOpenResponsePanels] = useState(/* @__PURE__ */ new Set());
3314
3338
  const [selectedStatusCodes, setSelectedStatusCodes] = useState({});
3315
3339
  const [drawerSource, setDrawerSource] = useState("request");
3340
+ const drawerEndpointName = useMemo(() => {
3341
+ if (!paramDrawerEndpointId) return "";
3342
+ const ep = Object.values(endpointsByTag).flat().find((e) => e.id === paramDrawerEndpointId);
3343
+ return endpointNames[paramDrawerEndpointId] ?? ep?.summary ?? "";
3344
+ }, [
3345
+ paramDrawerEndpointId,
3346
+ endpointsByTag,
3347
+ endpointNames
3348
+ ]);
3316
3349
  const [requestPages, setRequestPages] = useState(/* @__PURE__ */ new Map());
3317
3350
  const [responsePages, setResponsePages] = useState(/* @__PURE__ */ new Map());
3318
3351
  const [requestSearches, setRequestSearches] = useState({});
@@ -5180,6 +5213,7 @@ const EndpointsSection = ({ endpointsByTag, collapsed = false, onToggleCollapse,
5180
5213
  /* @__PURE__ */ jsx(AddParameterDrawer, {
5181
5214
  open: paramDrawerOpen,
5182
5215
  mode: paramDrawerMode,
5216
+ endpointName: drawerEndpointName,
5183
5217
  initialValues: paramDrawerMode === "edit" && paramDrawerEndpointId && editParamIdx !== null ? drawerSource === "response" ? endpointResponseParams[paramDrawerEndpointId]?.[editParamIdx] : endpointParams[paramDrawerEndpointId]?.[editParamIdx] : void 0,
5184
5218
  onClose: () => {
5185
5219
  setParamDrawerOpen(false);
@@ -6445,6 +6479,7 @@ const EndpointsSection = ({ endpointsByTag, collapsed = false, onToggleCollapse,
6445
6479
  /* @__PURE__ */ jsx(AddParameterDrawer, {
6446
6480
  open: paramDrawerOpen,
6447
6481
  mode: paramDrawerMode,
6482
+ endpointName: drawerEndpointName,
6448
6483
  initialValues: paramDrawerMode === "edit" && paramDrawerEndpointId && editParamIdx !== null ? drawerSource === "response" ? endpointResponseParams[paramDrawerEndpointId]?.[editParamIdx] : endpointParams[paramDrawerEndpointId]?.[editParamIdx] : void 0,
6449
6484
  onClose: () => {
6450
6485
  setParamDrawerOpen(false);
@@ -6754,7 +6789,7 @@ const TagsSection = ({ tags, collapsed, onToggleCollapse, onAddTag, onEditTag, o
6754
6789
  height: 32
6755
6790
  }),
6756
6791
  disabled: tag.isDefault,
6757
- onClick: () => !tag.isDefault && onDeleteTag?.(tag.name),
6792
+ onClick: () => !tag.isDefault && onDeleteTag?.(tag.name, tags.findIndex((t) => t.name === tag.name)),
6758
6793
  style: {
6759
6794
  width: 40,
6760
6795
  height: 40,
@@ -6930,7 +6965,7 @@ const TagsSection = ({ tags, collapsed, onToggleCollapse, onAddTag, onEditTag, o
6930
6965
  height: 32
6931
6966
  }),
6932
6967
  disabled: tag.isDefault,
6933
- onClick: () => !tag.isDefault && onDeleteTag?.(tag.name),
6968
+ onClick: () => !tag.isDefault && onDeleteTag?.(tag.name, tags.findIndex((t) => t.name === tag.name)),
6934
6969
  style: {
6935
6970
  width: 40,
6936
6971
  height: 40,
@@ -6973,7 +7008,7 @@ const TagsSection = ({ tags, collapsed, onToggleCollapse, onAddTag, onEditTag, o
6973
7008
  const TAG_NAME_REGEX = /^[A-Za-z0-9_\s-]+$/;
6974
7009
  const TAG_DESC_REGEX = /^[A-Za-z0-9_\s-]+$/;
6975
7010
  const EXTERNAL_DOCS_DESC_REGEX = /^[A-Za-z0-9_\s-]+$/;
6976
- const AddTagDrawer = ({ open, onClose, mode, initialValues, onAddTag, onEditTag }) => {
7011
+ const AddTagDrawer = ({ open, onClose, mode, initialValues, onAddTag, onEditTag, existingTags }) => {
6977
7012
  const [form] = Form.useForm();
6978
7013
  const [messageApi, contextHolder] = message.useMessage();
6979
7014
  const [confirmModalOpen, setConfirmModalOpen] = useState(false);
@@ -7104,7 +7139,7 @@ const AddTagDrawer = ({ open, onClose, mode, initialValues, onAddTag, onEditTag
7104
7139
  }
7105
7140
  }));
7106
7141
  const isLinkEnabled = Boolean(extDocsDesc?.trim());
7107
- const isAddEnabled = !!(tagNameValue && TAG_NAME_REGEX.test(tagNameValue));
7142
+ const isAddEnabled = !!(tagNameValue && TAG_NAME_REGEX.test(tagNameValue)) && !form.getFieldsError().some((field) => field.errors.length > 0);
7108
7143
  useEffect(() => {
7109
7144
  if (open && mode === "edit" && initialValues) form.setFieldsValue(initialValues);
7110
7145
  if (!open) form.resetFields();
@@ -7214,7 +7249,13 @@ const AddTagDrawer = ({ open, onClose, mode, initialValues, onAddTag, onEditTag
7214
7249
  {
7215
7250
  pattern: TAG_NAME_REGEX,
7216
7251
  message: "Only letters, numbers, spaces, underscores, and hyphens"
7217
- }
7252
+ },
7253
+ { validator: (_, value) => {
7254
+ if (!value || !existingTags?.length) return Promise.resolve();
7255
+ const originalName = initialValues?.name;
7256
+ if (existingTags.some((t) => t.name.toLowerCase() === value.toLowerCase() && t.name.toLowerCase() !== originalName?.toLowerCase())) return Promise.reject(/* @__PURE__ */ new Error("Tag name already exists"));
7257
+ return Promise.resolve();
7258
+ } }
7218
7259
  ],
7219
7260
  children: /* @__PURE__ */ jsx(Input, {
7220
7261
  showCount: true,
@@ -8967,7 +9008,7 @@ const ConsoleDocumentationLayout = ({ data, preSelectedApi, handleVisitLandingPa
8967
9008
  });
8968
9009
  const [deleteTagModal, setDeleteTagModal] = useState({
8969
9010
  open: false,
8970
- tagName: ""
9011
+ tagIndex: -1
8971
9012
  });
8972
9013
  const [localTags, setLocalTags] = useState([]);
8973
9014
  const [messageApi, contextHolder] = message.useMessage();
@@ -9144,7 +9185,9 @@ const ConsoleDocumentationLayout = ({ data, preSelectedApi, handleVisitLandingPa
9144
9185
  externalDocsDescription: t.externalDocs?.description,
9145
9186
  isDefault: t.name.toLowerCase() === "default"
9146
9187
  })) ?? [];
9147
- if (!mapped.some((t) => t.isDefault) && selectedApi.tags["default"]) mapped.push({
9188
+ const hasDefault = mapped.some((t) => t.isDefault);
9189
+ const hasDefaultInMapped = mapped.some((t) => t.name.toLowerCase() === "default");
9190
+ if (!hasDefault && !hasDefaultInMapped && selectedApi.tags["default"]) mapped.push({
9148
9191
  name: "default",
9149
9192
  isDefault: true
9150
9193
  });
@@ -9173,7 +9216,8 @@ const ConsoleDocumentationLayout = ({ data, preSelectedApi, handleVisitLandingPa
9173
9216
  type: schema?.type ?? "string",
9174
9217
  required: Boolean(p.required ?? false),
9175
9218
  description: p.description != null ? String(p.description) : void 0,
9176
- enum: Array.isArray(schema?.enum) ? schema.enum : void 0
9219
+ enum: Array.isArray(schema?.enum) ? schema.enum : void 0,
9220
+ ...schema?.items && { items: { type: schema.items.type ?? "string" } }
9177
9221
  };
9178
9222
  });
9179
9223
  });
@@ -9203,7 +9247,8 @@ const ConsoleDocumentationLayout = ({ data, preSelectedApi, handleVisitLandingPa
9203
9247
  type: schema?.type ?? "string",
9204
9248
  required: Boolean(p.required ?? false),
9205
9249
  description: p.description != null ? String(p.description) : void 0,
9206
- enum: Array.isArray(schema?.enum) ? schema.enum : void 0
9250
+ enum: Array.isArray(schema?.enum) ? schema.enum : void 0,
9251
+ ...schema?.items && { items: { type: schema.items.type ?? "string" } }
9207
9252
  };
9208
9253
  });
9209
9254
  });
@@ -9369,11 +9414,13 @@ const ConsoleDocumentationLayout = ({ data, preSelectedApi, handleVisitLandingPa
9369
9414
  setBannerVisible(true);
9370
9415
  };
9371
9416
  const handleDeleteTagConfirm = () => {
9372
- setLocalTags((prev) => prev.filter((t) => t.name !== deleteTagModal.tagName));
9373
- messageApi.success(`${deleteTagModal.tagName} tag has been deleted successfully.`);
9417
+ if (deleteTagModal.tagIndex < 0) return;
9418
+ const tagName = localTags[deleteTagModal.tagIndex]?.name ?? "Tag";
9419
+ setLocalTags((prev) => prev.filter((_, index) => index !== deleteTagModal.tagIndex));
9420
+ messageApi.success(`${tagName} tag has been deleted successfully.`);
9374
9421
  setDeleteTagModal({
9375
9422
  open: false,
9376
- tagName: ""
9423
+ tagIndex: -1
9377
9424
  });
9378
9425
  setBannerVisible(true);
9379
9426
  };
@@ -9405,6 +9452,7 @@ const ConsoleDocumentationLayout = ({ data, preSelectedApi, handleVisitLandingPa
9405
9452
  setEndpointTags({});
9406
9453
  setEndpointParams(initialEndpointParams);
9407
9454
  setEndpointResponseParams(initialEndpointResponseParams);
9455
+ setLocalTags(tagMetadata);
9408
9456
  setResetKey((prev) => prev + 1);
9409
9457
  messageApi.success("Changes have been reset successfully.");
9410
9458
  };
@@ -9457,7 +9505,8 @@ const ConsoleDocumentationLayout = ({ data, preSelectedApi, handleVisitLandingPa
9457
9505
  ...param.description && { description: param.description },
9458
9506
  schema: {
9459
9507
  type: param.type,
9460
- ...param.enum && param.enum.length > 0 && { enum: param.enum }
9508
+ ...param.enum && param.enum.length > 0 && { enum: param.enum },
9509
+ ...param.type === "array" && param.items && { items: param.items }
9461
9510
  }
9462
9511
  }));
9463
9512
  else delete methodObj.parameters;
@@ -9474,7 +9523,8 @@ const ConsoleDocumentationLayout = ({ data, preSelectedApi, handleVisitLandingPa
9474
9523
  ...param.description && { description: param.description },
9475
9524
  schema: {
9476
9525
  type: param.type,
9477
- ...param.enum && param.enum.length > 0 && { enum: param.enum }
9526
+ ...param.enum && param.enum.length > 0 && { enum: param.enum },
9527
+ ...param.type === "array" && param.items && { items: param.items }
9478
9528
  }
9479
9529
  }));
9480
9530
  else delete methodObj["x-response-params"];
@@ -9521,10 +9571,9 @@ const ConsoleDocumentationLayout = ({ data, preSelectedApi, handleVisitLandingPa
9521
9571
  setSelectedApi(newTransformed);
9522
9572
  } catch (err) {
9523
9573
  let messages = [];
9524
- if (err && typeof err === "object" && "errors" in err) {
9525
- const e = err;
9526
- messages = Array.isArray(e.errors) ? e.errors : [e.errors];
9527
- } else if (err instanceof Error) messages = err.message.split("\n").filter(Boolean);
9574
+ if (err && typeof err === "object" && "data" in err) messages = [err.data?.message ?? "Unknown error"];
9575
+ else if (err && typeof err === "object" && "message" in err) messages = [String(err.message)];
9576
+ else if (err instanceof Error) messages = err.message.split("\n").filter(Boolean);
9528
9577
  else messages = [String(err)];
9529
9578
  setSaveErrors(messages);
9530
9579
  setSelectedEditItem({ type: "errors" });
@@ -9772,9 +9821,9 @@ const ConsoleDocumentationLayout = ({ data, preSelectedApi, handleVisitLandingPa
9772
9821
  externalDocsLink: tag.externalDocsUrl
9773
9822
  }
9774
9823
  }),
9775
- onDeleteTag: (tagName) => setDeleteTagModal({
9824
+ onDeleteTag: (_tagName, tagIndex) => setDeleteTagModal({
9776
9825
  open: true,
9777
- tagName
9826
+ tagIndex
9778
9827
  })
9779
9828
  })
9780
9829
  }),
@@ -9934,9 +9983,9 @@ const ConsoleDocumentationLayout = ({ data, preSelectedApi, handleVisitLandingPa
9934
9983
  externalDocsLink: tag.externalDocsUrl
9935
9984
  }
9936
9985
  }),
9937
- onDeleteTag: (tagName) => setDeleteTagModal({
9986
+ onDeleteTag: (_tagName, tagIndex) => setDeleteTagModal({
9938
9987
  open: true,
9939
- tagName
9988
+ tagIndex
9940
9989
  })
9941
9990
  })
9942
9991
  }),
@@ -10064,7 +10113,8 @@ const ConsoleDocumentationLayout = ({ data, preSelectedApi, handleVisitLandingPa
10064
10113
  mode: "add"
10065
10114
  }),
10066
10115
  onAddTag: handleAddTag,
10067
- onEditTag: handleUpdateTag
10116
+ onEditTag: handleUpdateTag,
10117
+ existingTags: localTags
10068
10118
  }),
10069
10119
  /* @__PURE__ */ jsxs(Modal, {
10070
10120
  open: saveConfirmModal,
@@ -10208,7 +10258,7 @@ const ConsoleDocumentationLayout = ({ data, preSelectedApi, handleVisitLandingPa
10208
10258
  open: deleteTagModal.open,
10209
10259
  onCancel: () => setDeleteTagModal({
10210
10260
  open: false,
10211
- tagName: ""
10261
+ tagIndex: -1
10212
10262
  }),
10213
10263
  centered: true,
10214
10264
  title: null,
@@ -10234,14 +10284,14 @@ const ConsoleDocumentationLayout = ({ data, preSelectedApi, handleVisitLandingPa
10234
10284
  className: cx("deleteModalTitle"),
10235
10285
  children: [
10236
10286
  "Delete ",
10237
- deleteTagModal.tagName,
10287
+ localTags[deleteTagModal.tagIndex]?.name ?? "Tag",
10238
10288
  " tag"
10239
10289
  ]
10240
10290
  }), /* @__PURE__ */ jsx("button", {
10241
10291
  className: cx("deleteModalCloseBtn"),
10242
10292
  onClick: () => setDeleteTagModal({
10243
10293
  open: false,
10244
- tagName: ""
10294
+ tagIndex: -1
10245
10295
  }),
10246
10296
  "aria-label": "Close",
10247
10297
  children: "×"
@@ -10253,7 +10303,7 @@ const ConsoleDocumentationLayout = ({ data, preSelectedApi, handleVisitLandingPa
10253
10303
  className: cx("deleteModalContentText"),
10254
10304
  children: [
10255
10305
  "Are you sure you want to delete ",
10256
- deleteTagModal.tagName,
10306
+ localTags[deleteTagModal.tagIndex]?.name ?? "Tag",
10257
10307
  " tag?"
10258
10308
  ]
10259
10309
  })
@@ -10264,7 +10314,7 @@ const ConsoleDocumentationLayout = ({ data, preSelectedApi, handleVisitLandingPa
10264
10314
  size: "middle",
10265
10315
  onClick: () => setDeleteTagModal({
10266
10316
  open: false,
10267
- tagName: ""
10317
+ tagIndex: -1
10268
10318
  }),
10269
10319
  style: {
10270
10320
  borderRadius: 8,