@cundi/refine-xaf 1.0.4 → 1.0.6

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.js CHANGED
@@ -36,9 +36,11 @@ __export(index_exports, {
36
36
  ApplicationUserEdit: () => ApplicationUserEdit,
37
37
  ApplicationUserList: () => ApplicationUserList,
38
38
  AuthCallback: () => AuthCallback,
39
+ BackgroundJobList: () => BackgroundJobList,
39
40
  Base64Upload: () => Base64Upload,
40
41
  ColorModeContext: () => ColorModeContext,
41
42
  ColorModeContextProvider: () => ColorModeContextProvider,
43
+ DrawioEditor: () => DrawioEditor,
42
44
  Header: () => Header,
43
45
  HttpError: () => HttpError,
44
46
  KeycloakLoginPage: () => KeycloakLoginPage,
@@ -73,13 +75,13 @@ var TOKEN_KEY = "refine-auth";
73
75
  var MAX_RETRIES = 3;
74
76
  var BASE_RETRY_DELAY = 1e3;
75
77
  var HttpError = class _HttpError extends Error {
76
- constructor(statusCode, message2, body) {
77
- super(message2);
78
+ constructor(statusCode, message3, body) {
79
+ super(message3);
78
80
  __publicField(this, "statusCode");
79
81
  __publicField(this, "message");
80
82
  __publicField(this, "body");
81
83
  this.statusCode = statusCode;
82
- this.message = message2;
84
+ this.message = message3;
83
85
  this.body = body;
84
86
  Object.setPrototypeOf(this, _HttpError.prototype);
85
87
  }
@@ -619,7 +621,7 @@ var parseFilter = (filter) => {
619
621
  // src/dataProvider.ts
620
622
  var dataProvider = (apiUrl) => ({
621
623
  getList: async ({ resource, pagination, sorters, filters }) => {
622
- const url = new URL(`${apiUrl}/${resource}`);
624
+ const url = new URL(`${apiUrl}/${resource}`, window.location.origin);
623
625
  if (pagination) {
624
626
  const { current, pageSize } = pagination;
625
627
  if (current && pageSize) {
@@ -647,7 +649,7 @@ var dataProvider = (apiUrl) => ({
647
649
  };
648
650
  },
649
651
  getOne: async ({ resource, id, meta }) => {
650
- const url = new URL(`${apiUrl}/${resource}(${id})`);
652
+ const url = new URL(`${apiUrl}/${resource}(${id})`, window.location.origin);
651
653
  if (meta?.expand) {
652
654
  const expand = meta.expand.map((item) => item.field ?? item).join(",");
653
655
  if (expand) {
@@ -660,7 +662,8 @@ var dataProvider = (apiUrl) => ({
660
662
  return { data: { ...data, id: data.Oid } };
661
663
  },
662
664
  create: async ({ resource, variables }) => {
663
- const response = await httpClient(`${apiUrl}/${resource}`, {
665
+ const url = new URL(`${apiUrl}/${resource}`, window.location.origin);
666
+ const response = await httpClient(url.toString(), {
664
667
  method: "POST",
665
668
  body: JSON.stringify(variables)
666
669
  });
@@ -669,7 +672,8 @@ var dataProvider = (apiUrl) => ({
669
672
  return { data };
670
673
  },
671
674
  update: async ({ resource, id, variables }) => {
672
- const response = await httpClient(`${apiUrl}/${resource}(${id})`, {
675
+ const url = new URL(`${apiUrl}/${resource}(${id})`, window.location.origin);
676
+ const response = await httpClient(url.toString(), {
673
677
  method: "PATCH",
674
678
  body: JSON.stringify(variables)
675
679
  });
@@ -680,14 +684,15 @@ var dataProvider = (apiUrl) => ({
680
684
  return { data };
681
685
  },
682
686
  deleteOne: async ({ resource, id }) => {
683
- await httpClient(`${apiUrl}/${resource}(${id})`, {
687
+ const url = new URL(`${apiUrl}/${resource}(${id})`, window.location.origin);
688
+ await httpClient(url.toString(), {
684
689
  method: "DELETE"
685
690
  });
686
691
  return { data: { id } };
687
692
  },
688
693
  getApiUrl: () => apiUrl,
689
694
  getMany: async ({ resource, ids }) => {
690
- const url = new URL(`${apiUrl}/${resource}`);
695
+ const url = new URL(`${apiUrl}/${resource}`, window.location.origin);
691
696
  const filter = ids.map((id) => {
692
697
  const isGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i.test(id.toString());
693
698
  return `Oid eq ${isGuid ? id : `'${id}'`}`;
@@ -712,7 +717,10 @@ var dataProvider = (apiUrl) => ({
712
717
  throw new Error("Not implemented");
713
718
  },
714
719
  custom: async ({ url, method, filters, sorters, payload, query, headers }) => {
715
- let requestUrl = new URL(`${url.startsWith("http") ? url : `${apiUrl}${url}`}`);
720
+ let requestUrl = new URL(
721
+ url.startsWith("http") ? url : `${apiUrl}${url}`,
722
+ window.location.origin
723
+ );
716
724
  if (filters) {
717
725
  const filterString = generateFilterString(filters);
718
726
  if (filterString) {
@@ -862,6 +870,9 @@ var en = {
862
870
  math: "Math (LaTeX)",
863
871
  youtube: "YouTube",
864
872
  enterYoutubeUrl: "Enter YouTube URL"
873
+ },
874
+ drawioEditor: {
875
+ loading: "Loading diagram editor..."
865
876
  }
866
877
  },
867
878
  common: {
@@ -877,9 +888,61 @@ var en = {
877
888
  dashboard: "Dashboard",
878
889
  dataTypeExamples: "Data Type Examples",
879
890
  tiptapExamples: "Tiptap Examples",
891
+ drawioExamples: "Drawio Examples",
880
892
  users: "Users",
881
893
  roles: "Roles",
882
- settings: "Settings"
894
+ settings: "Settings",
895
+ backgroundJobs: "Background Jobs"
896
+ },
897
+ backgroundJobs: {
898
+ title: "Background Jobs",
899
+ tabs: {
900
+ recurring: "Recurring",
901
+ succeeded: "Succeeded",
902
+ failed: "Failed",
903
+ processing: "Processing"
904
+ },
905
+ columns: {
906
+ id: "ID",
907
+ jobId: "Job ID",
908
+ jobName: "Job Name",
909
+ cron: "Cron",
910
+ queue: "Queue",
911
+ nextExecution: "Next Execution",
912
+ lastState: "Last State",
913
+ succeededAt: "Succeeded At",
914
+ failedAt: "Failed At",
915
+ startedAt: "Started At",
916
+ duration: "Duration (ms)",
917
+ exception: "Exception",
918
+ serverId: "Server ID",
919
+ actions: "Actions"
920
+ },
921
+ status: {
922
+ succeeded: "Succeeded",
923
+ failed: "Failed",
924
+ processing: "Processing",
925
+ scheduled: "Scheduled",
926
+ unknown: "Unknown"
927
+ },
928
+ actions: {
929
+ trigger: "Trigger Now",
930
+ delete: "Delete",
931
+ triggerSuccess: "Job triggered successfully",
932
+ deleteSuccess: "Job deleted successfully",
933
+ triggerError: "Failed to trigger job",
934
+ deleteError: "Failed to delete job"
935
+ },
936
+ drawer: {
937
+ title: "Job Details",
938
+ jobName: "Job Name",
939
+ createdAt: "Created At",
940
+ history: "History",
941
+ state: "State",
942
+ reason: "Reason",
943
+ data: "Data",
944
+ noData: "No Data"
945
+ }
883
946
  }
884
947
  };
885
948
  var zhTW = {
@@ -957,6 +1020,9 @@ var zhTW = {
957
1020
  math: "\u6578\u5B78\u516C\u5F0F (LaTeX)",
958
1021
  youtube: "YouTube \u5F71\u7247",
959
1022
  enterYoutubeUrl: "\u8F38\u5165 YouTube \u7DB2\u5740"
1023
+ },
1024
+ drawioEditor: {
1025
+ loading: "\u8F09\u5165\u5716\u8868\u7DE8\u8F2F\u5668\u4E2D..."
960
1026
  }
961
1027
  },
962
1028
  common: {
@@ -972,9 +1038,61 @@ var zhTW = {
972
1038
  dashboard: "\u5100\u8868\u677F",
973
1039
  dataTypeExamples: "\u8CC7\u6599\u985E\u578B\u7BC4\u4F8B",
974
1040
  tiptapExamples: "Tiptap \u7BC4\u4F8B",
1041
+ drawioExamples: "Drawio \u7BC4\u4F8B",
975
1042
  users: "\u4F7F\u7528\u8005",
976
1043
  roles: "\u89D2\u8272",
977
- settings: "\u8A2D\u5B9A"
1044
+ settings: "\u8A2D\u5B9A",
1045
+ backgroundJobs: "\u80CC\u666F\u6392\u7A0B"
1046
+ },
1047
+ backgroundJobs: {
1048
+ title: "\u80CC\u666F\u6392\u7A0B",
1049
+ tabs: {
1050
+ recurring: "\u9031\u671F\u6027\u4EFB\u52D9",
1051
+ succeeded: "\u6210\u529F",
1052
+ failed: "\u5931\u6557",
1053
+ processing: "\u57F7\u884C\u4E2D"
1054
+ },
1055
+ columns: {
1056
+ id: "ID",
1057
+ jobId: "\u4EFB\u52D9 ID",
1058
+ jobName: "\u4EFB\u52D9\u540D\u7A31",
1059
+ cron: "\u6392\u7A0B\u8868\u9054\u5F0F",
1060
+ queue: "\u4F47\u5217",
1061
+ nextExecution: "\u4E0B\u6B21\u57F7\u884C",
1062
+ lastState: "\u6700\u5F8C\u72C0\u614B",
1063
+ succeededAt: "\u6210\u529F\u6642\u9593",
1064
+ failedAt: "\u5931\u6557\u6642\u9593",
1065
+ startedAt: "\u958B\u59CB\u6642\u9593",
1066
+ duration: "\u8017\u6642 (\u6BEB\u79D2)",
1067
+ exception: "\u4F8B\u5916",
1068
+ serverId: "\u4F3A\u670D\u5668 ID",
1069
+ actions: "\u64CD\u4F5C"
1070
+ },
1071
+ status: {
1072
+ succeeded: "\u6210\u529F",
1073
+ failed: "\u5931\u6557",
1074
+ processing: "\u57F7\u884C\u4E2D",
1075
+ scheduled: "\u5DF2\u6392\u7A0B",
1076
+ unknown: "\u672A\u77E5"
1077
+ },
1078
+ actions: {
1079
+ trigger: "\u7ACB\u5373\u57F7\u884C",
1080
+ delete: "\u522A\u9664",
1081
+ triggerSuccess: "\u4EFB\u52D9\u5DF2\u6210\u529F\u89F8\u767C",
1082
+ deleteSuccess: "\u4EFB\u52D9\u5DF2\u6210\u529F\u522A\u9664",
1083
+ triggerError: "\u89F8\u767C\u4EFB\u52D9\u5931\u6557",
1084
+ deleteError: "\u522A\u9664\u4EFB\u52D9\u5931\u6557"
1085
+ },
1086
+ drawer: {
1087
+ title: "\u4EFB\u52D9\u8A73\u60C5",
1088
+ jobName: "\u4EFB\u52D9\u540D\u7A31",
1089
+ createdAt: "\u5EFA\u7ACB\u6642\u9593",
1090
+ history: "\u6B77\u53F2\u7D00\u9304",
1091
+ state: "\u72C0\u614B",
1092
+ reason: "\u539F\u56E0",
1093
+ data: "\u8CC7\u6599",
1094
+ noData: "\u7121\u8CC7\u6599"
1095
+ }
978
1096
  }
979
1097
  };
980
1098
  var refineXafTranslations = {
@@ -5233,8 +5351,8 @@ var StepResult = class _StepResult {
5233
5351
  /**
5234
5352
  Create a failed step result.
5235
5353
  */
5236
- static fail(message2) {
5237
- return new _StepResult(null, message2);
5354
+ static fail(message3) {
5355
+ return new _StepResult(null, message3);
5238
5356
  }
5239
5357
  /**
5240
5358
  Call [`Node.replace`](https://prosemirror.net/docs/ref/#model.Node.replace) with the given
@@ -6446,8 +6564,8 @@ var DocAttrStep = class _DocAttrStep extends Step {
6446
6564
  Step.jsonID("docAttr", DocAttrStep);
6447
6565
  var TransformError = class extends Error {
6448
6566
  };
6449
- TransformError = function TransformError2(message2) {
6450
- let err = Error.call(this, message2);
6567
+ TransformError = function TransformError2(message3) {
6568
+ let err = Error.call(this, message3);
6451
6569
  err.__proto__ = TransformError2.prototype;
6452
6570
  return err;
6453
6571
  };
@@ -19140,25 +19258,124 @@ var TiptapEditor = ({ value, onChange, disabled }) => {
19140
19258
  );
19141
19259
  };
19142
19260
 
19143
- // src/pages/login/index.tsx
19261
+ // src/components/DrawioEditor.tsx
19144
19262
  var import_react8 = __toESM(require("react"));
19145
- var import_core18 = require("@refinedev/core");
19263
+ var import_react_i18next6 = require("react-i18next");
19264
+ var import_react_drawio = require("react-drawio");
19146
19265
  var import_lib7 = require("antd/lib");
19266
+ var mapLanguageToDrawio = (lang) => {
19267
+ const langMap = {
19268
+ "zh-TW": "zh-tw",
19269
+ "zh-CN": "zh",
19270
+ "zh": "zh",
19271
+ "en": "en",
19272
+ "ja": "ja",
19273
+ "ko": "ko",
19274
+ "de": "de",
19275
+ "fr": "fr",
19276
+ "es": "es",
19277
+ "pt": "pt",
19278
+ "ru": "ru"
19279
+ };
19280
+ return langMap[lang] || lang.toLowerCase();
19281
+ };
19282
+ var DrawioEditor = ({
19283
+ value,
19284
+ onChange,
19285
+ disabled = false,
19286
+ height = 500,
19287
+ autosave = true
19288
+ }) => {
19289
+ const { token } = import_lib7.theme.useToken();
19290
+ const { t, i18n } = (0, import_react_i18next6.useTranslation)();
19291
+ const drawioRef = (0, import_react8.useRef)(null);
19292
+ const [isLoading, setIsLoading] = (0, import_react8.useState)(true);
19293
+ const drawioLang = (0, import_react8.useMemo)(() => mapLanguageToDrawio(i18n.language), [i18n.language]);
19294
+ const handleSave = (data) => {
19295
+ if (onChange && data.xml) {
19296
+ onChange(data.xml);
19297
+ }
19298
+ };
19299
+ const handleAutoSave = (data) => {
19300
+ if (onChange && data.xml) {
19301
+ onChange(data.xml);
19302
+ }
19303
+ };
19304
+ const handleLoad = () => {
19305
+ setIsLoading(false);
19306
+ };
19307
+ return /* @__PURE__ */ import_react8.default.createElement(
19308
+ "div",
19309
+ {
19310
+ style: {
19311
+ border: `1px solid ${token.colorBorder}`,
19312
+ borderRadius: token.borderRadiusLG,
19313
+ overflow: "hidden",
19314
+ backgroundColor: token.colorBgContainer,
19315
+ position: "relative",
19316
+ height: typeof height === "number" ? `${height}px` : height
19317
+ }
19318
+ },
19319
+ isLoading && /* @__PURE__ */ import_react8.default.createElement(
19320
+ "div",
19321
+ {
19322
+ style: {
19323
+ position: "absolute",
19324
+ top: 0,
19325
+ left: 0,
19326
+ right: 0,
19327
+ bottom: 0,
19328
+ display: "flex",
19329
+ alignItems: "center",
19330
+ justifyContent: "center",
19331
+ backgroundColor: token.colorBgContainer,
19332
+ zIndex: 10
19333
+ }
19334
+ },
19335
+ /* @__PURE__ */ import_react8.default.createElement(import_lib7.Spin, { tip: t("components.drawioEditor.loading", "Loading diagram editor...") })
19336
+ ),
19337
+ /* @__PURE__ */ import_react8.default.createElement(
19338
+ import_react_drawio.DrawIoEmbed,
19339
+ {
19340
+ ref: drawioRef,
19341
+ xml: value,
19342
+ autosave: autosave && !disabled,
19343
+ urlParameters: {
19344
+ ui: "kennedy",
19345
+ spin: true,
19346
+ libraries: true,
19347
+ saveAndExit: false,
19348
+ noSaveBtn: disabled,
19349
+ noExitBtn: true,
19350
+ lang: drawioLang
19351
+ },
19352
+ onLoad: handleLoad,
19353
+ onSave: handleSave,
19354
+ onAutoSave: handleAutoSave
19355
+ }
19356
+ )
19357
+ );
19358
+ };
19359
+
19360
+ // src/pages/login/index.tsx
19361
+ var import_react9 = __toESM(require("react"));
19362
+ var import_core18 = require("@refinedev/core");
19363
+ var import_lib8 = require("antd/lib");
19147
19364
  var import_antd4 = require("@refinedev/antd");
19148
19365
  var import_react_router = require("react-router");
19149
- var { Title, Link } = import_lib7.Typography;
19366
+ var { Title, Link } = import_lib8.Typography;
19150
19367
  var LoginPage = () => {
19151
- const [form] = import_lib7.Form.useForm();
19368
+ const [form] = import_lib8.Form.useForm();
19152
19369
  const { mutate: login, isPending } = (0, import_core18.useLogin)();
19153
19370
  const isLoading = isPending;
19154
19371
  const translate = (0, import_core18.useTranslate)();
19155
- const { token } = import_lib7.theme.useToken();
19372
+ const { token } = import_lib8.theme.useToken();
19156
19373
  const navigate = (0, import_react_router.useNavigate)();
19157
19374
  const onFinish = async (values) => {
19158
19375
  login(values);
19159
19376
  };
19160
- return /* @__PURE__ */ import_react8.default.createElement(
19161
- import_lib7.Layout,
19377
+ return /* @__PURE__ */ import_react9.default.createElement(
19378
+ import_lib8.Layout,
19162
19379
  {
19163
19380
  style: {
19164
19381
  height: "100vh",
@@ -19167,15 +19384,15 @@ var LoginPage = () => {
19167
19384
  backgroundColor: token.colorBgContainer
19168
19385
  }
19169
19386
  },
19170
- /* @__PURE__ */ import_react8.default.createElement("div", { style: { marginBottom: "24px" } }, /* @__PURE__ */ import_react8.default.createElement(
19387
+ /* @__PURE__ */ import_react9.default.createElement("div", { style: { marginBottom: "24px" } }, /* @__PURE__ */ import_react9.default.createElement(
19171
19388
  import_antd4.ThemedTitle,
19172
19389
  {
19173
19390
  collapsed: false,
19174
19391
  wrapperStyles: { fontSize: "22px", justifyContent: "center" }
19175
19392
  }
19176
19393
  )),
19177
- /* @__PURE__ */ import_react8.default.createElement(
19178
- import_lib7.Card,
19394
+ /* @__PURE__ */ import_react9.default.createElement(
19395
+ import_lib8.Card,
19179
19396
  {
19180
19397
  style: {
19181
19398
  width: "100%",
@@ -19184,9 +19401,9 @@ var LoginPage = () => {
19184
19401
  boxShadow: "0 4px 24px -4px rgba(0, 0, 0, 0.1)"
19185
19402
  }
19186
19403
  },
19187
- /* @__PURE__ */ import_react8.default.createElement("div", { style: { textAlign: "center", marginBottom: "32px" } }, /* @__PURE__ */ import_react8.default.createElement(Title, { level: 3, style: { color: token.colorPrimary, margin: 0 } }, translate("pages.login.title", "Sign in to your account")), /* @__PURE__ */ import_react8.default.createElement(import_lib7.Typography.Text, { type: "secondary", style: { fontSize: "14px", marginTop: "8px", display: "block" } }, "Log in using a local account")),
19188
- /* @__PURE__ */ import_react8.default.createElement(
19189
- import_lib7.Form,
19404
+ /* @__PURE__ */ import_react9.default.createElement("div", { style: { textAlign: "center", marginBottom: "32px" } }, /* @__PURE__ */ import_react9.default.createElement(Title, { level: 3, style: { color: token.colorPrimary, margin: 0 } }, translate("pages.login.title", "Sign in to your account")), /* @__PURE__ */ import_react9.default.createElement(import_lib8.Typography.Text, { type: "secondary", style: { fontSize: "14px", marginTop: "8px", display: "block" } }, "Log in using a local account")),
19405
+ /* @__PURE__ */ import_react9.default.createElement(
19406
+ import_lib8.Form,
19190
19407
  {
19191
19408
  layout: "vertical",
19192
19409
  form,
@@ -19195,8 +19412,8 @@ var LoginPage = () => {
19195
19412
  remember: false
19196
19413
  }
19197
19414
  },
19198
- /* @__PURE__ */ import_react8.default.createElement(
19199
- import_lib7.Form.Item,
19415
+ /* @__PURE__ */ import_react9.default.createElement(
19416
+ import_lib8.Form.Item,
19200
19417
  {
19201
19418
  label: translate("pages.login.fields.username", "Username"),
19202
19419
  name: "username",
@@ -19210,10 +19427,10 @@ var LoginPage = () => {
19210
19427
  }
19211
19428
  ]
19212
19429
  },
19213
- /* @__PURE__ */ import_react8.default.createElement(import_lib7.Input, { size: "large", placeholder: "Username" })
19430
+ /* @__PURE__ */ import_react9.default.createElement(import_lib8.Input, { size: "large", placeholder: "Username" })
19214
19431
  ),
19215
- /* @__PURE__ */ import_react8.default.createElement(
19216
- import_lib7.Form.Item,
19432
+ /* @__PURE__ */ import_react9.default.createElement(
19433
+ import_lib8.Form.Item,
19217
19434
  {
19218
19435
  label: translate("pages.login.fields.password", "Password"),
19219
19436
  name: "password",
@@ -19227,9 +19444,9 @@ var LoginPage = () => {
19227
19444
  }
19228
19445
  ]
19229
19446
  },
19230
- /* @__PURE__ */ import_react8.default.createElement(import_lib7.Input.Password, { size: "large", placeholder: "Password" })
19447
+ /* @__PURE__ */ import_react9.default.createElement(import_lib8.Input.Password, { size: "large", placeholder: "Password" })
19231
19448
  ),
19232
- /* @__PURE__ */ import_react8.default.createElement(
19449
+ /* @__PURE__ */ import_react9.default.createElement(
19233
19450
  "div",
19234
19451
  {
19235
19452
  style: {
@@ -19238,8 +19455,8 @@ var LoginPage = () => {
19238
19455
  marginBottom: "24px"
19239
19456
  }
19240
19457
  },
19241
- /* @__PURE__ */ import_react8.default.createElement(import_lib7.Form.Item, { name: "remember", valuePropName: "checked", noStyle: true }, /* @__PURE__ */ import_react8.default.createElement(import_lib7.Checkbox, null, translate("pages.login.buttons.rememberMe", "Remember me"))),
19242
- /* @__PURE__ */ import_react8.default.createElement(
19458
+ /* @__PURE__ */ import_react9.default.createElement(import_lib8.Form.Item, { name: "remember", valuePropName: "checked", noStyle: true }, /* @__PURE__ */ import_react9.default.createElement(import_lib8.Checkbox, null, translate("pages.login.buttons.rememberMe", "Remember me"))),
19459
+ /* @__PURE__ */ import_react9.default.createElement(
19243
19460
  Link,
19244
19461
  {
19245
19462
  onClick: () => {
@@ -19249,8 +19466,8 @@ var LoginPage = () => {
19249
19466
  translate("pages.login.buttons.forgotPassword", "Forgot password?")
19250
19467
  )
19251
19468
  ),
19252
- /* @__PURE__ */ import_react8.default.createElement(import_lib7.Form.Item, null, /* @__PURE__ */ import_react8.default.createElement(
19253
- import_lib7.Button,
19469
+ /* @__PURE__ */ import_react9.default.createElement(import_lib8.Form.Item, null, /* @__PURE__ */ import_react9.default.createElement(
19470
+ import_lib8.Button,
19254
19471
  {
19255
19472
  type: "primary",
19256
19473
  htmlType: "submit",
@@ -19260,9 +19477,9 @@ var LoginPage = () => {
19260
19477
  },
19261
19478
  translate("pages.login.signin", "Sign in")
19262
19479
  )),
19263
- /* @__PURE__ */ import_react8.default.createElement(import_lib7.Divider, { plain: true }, "or"),
19264
- /* @__PURE__ */ import_react8.default.createElement(
19265
- import_lib7.Button,
19480
+ /* @__PURE__ */ import_react9.default.createElement(import_lib8.Divider, { plain: true }, "or"),
19481
+ /* @__PURE__ */ import_react9.default.createElement(
19482
+ import_lib8.Button,
19266
19483
  {
19267
19484
  block: true,
19268
19485
  size: "large",
@@ -19276,23 +19493,23 @@ var LoginPage = () => {
19276
19493
  };
19277
19494
 
19278
19495
  // src/pages/login/keycloak.tsx
19279
- var import_react9 = __toESM(require("react"));
19496
+ var import_react10 = __toESM(require("react"));
19280
19497
  var import_core19 = require("@refinedev/core");
19281
- var import_lib8 = require("antd/lib");
19498
+ var import_lib9 = require("antd/lib");
19282
19499
  var import_antd5 = require("@refinedev/antd");
19283
19500
  var import_react_router2 = require("react-router");
19284
- var { Title: Title2 } = import_lib8.Typography;
19501
+ var { Title: Title2 } = import_lib9.Typography;
19285
19502
  var KeycloakLoginPage = () => {
19286
19503
  const { mutate: login, isPending } = (0, import_core19.useLogin)();
19287
19504
  const isLoading = isPending;
19288
19505
  const translate = (0, import_core19.useTranslate)();
19289
- const { token } = import_lib8.theme.useToken();
19506
+ const { token } = import_lib9.theme.useToken();
19290
19507
  const navigate = (0, import_react_router2.useNavigate)();
19291
19508
  const handleKeycloakLogin = () => {
19292
19509
  login({ provider: "keycloak" });
19293
19510
  };
19294
- return /* @__PURE__ */ import_react9.default.createElement(
19295
- import_lib8.Layout,
19511
+ return /* @__PURE__ */ import_react10.default.createElement(
19512
+ import_lib9.Layout,
19296
19513
  {
19297
19514
  style: {
19298
19515
  height: "100vh",
@@ -19301,15 +19518,15 @@ var KeycloakLoginPage = () => {
19301
19518
  backgroundColor: token.colorBgContainer
19302
19519
  }
19303
19520
  },
19304
- /* @__PURE__ */ import_react9.default.createElement("div", { style: { marginBottom: "24px" } }, /* @__PURE__ */ import_react9.default.createElement(
19521
+ /* @__PURE__ */ import_react10.default.createElement("div", { style: { marginBottom: "24px" } }, /* @__PURE__ */ import_react10.default.createElement(
19305
19522
  import_antd5.ThemedTitle,
19306
19523
  {
19307
19524
  collapsed: false,
19308
19525
  wrapperStyles: { fontSize: "22px", justifyContent: "center" }
19309
19526
  }
19310
19527
  )),
19311
- /* @__PURE__ */ import_react9.default.createElement(
19312
- import_lib8.Card,
19528
+ /* @__PURE__ */ import_react10.default.createElement(
19529
+ import_lib9.Card,
19313
19530
  {
19314
19531
  style: {
19315
19532
  width: "100%",
@@ -19318,9 +19535,9 @@ var KeycloakLoginPage = () => {
19318
19535
  boxShadow: "0 4px 24px -4px rgba(0, 0, 0, 0.1)"
19319
19536
  }
19320
19537
  },
19321
- /* @__PURE__ */ import_react9.default.createElement("div", { style: { textAlign: "center", marginBottom: "32px" } }, /* @__PURE__ */ import_react9.default.createElement(Title2, { level: 3, style: { color: token.colorPrimary, margin: 0 } }, translate("pages.login.title", "Sign in to your account")), /* @__PURE__ */ import_react9.default.createElement(import_lib8.Typography.Text, { type: "secondary", style: { fontSize: "14px", marginTop: "8px", display: "block" } }, "Choose your authentication method")),
19322
- /* @__PURE__ */ import_react9.default.createElement(
19323
- import_lib8.Button,
19538
+ /* @__PURE__ */ import_react10.default.createElement("div", { style: { textAlign: "center", marginBottom: "32px" } }, /* @__PURE__ */ import_react10.default.createElement(Title2, { level: 3, style: { color: token.colorPrimary, margin: 0 } }, translate("pages.login.title", "Sign in to your account")), /* @__PURE__ */ import_react10.default.createElement(import_lib9.Typography.Text, { type: "secondary", style: { fontSize: "14px", marginTop: "8px", display: "block" } }, "Choose your authentication method")),
19539
+ /* @__PURE__ */ import_react10.default.createElement(
19540
+ import_lib9.Button,
19324
19541
  {
19325
19542
  type: "primary",
19326
19543
  block: true,
@@ -19331,9 +19548,9 @@ var KeycloakLoginPage = () => {
19331
19548
  },
19332
19549
  "Sign in with Keycloak"
19333
19550
  ),
19334
- /* @__PURE__ */ import_react9.default.createElement(import_lib8.Divider, { plain: true }, "or"),
19335
- /* @__PURE__ */ import_react9.default.createElement(
19336
- import_lib8.Button,
19551
+ /* @__PURE__ */ import_react10.default.createElement(import_lib9.Divider, { plain: true }, "or"),
19552
+ /* @__PURE__ */ import_react10.default.createElement(
19553
+ import_lib9.Button,
19337
19554
  {
19338
19555
  block: true,
19339
19556
  size: "large",
@@ -19346,15 +19563,15 @@ var KeycloakLoginPage = () => {
19346
19563
  };
19347
19564
 
19348
19565
  // src/pages/auth/AuthCallback.tsx
19349
- var import_react10 = __toESM(require("react"));
19566
+ var import_react11 = __toESM(require("react"));
19350
19567
  var import_core20 = require("@refinedev/core");
19351
19568
  var import_antd6 = require("antd");
19352
19569
  var AuthCallback = () => {
19353
19570
  const { mutate: login } = (0, import_core20.useLogin)();
19354
- const [error, setError] = (0, import_react10.useState)(null);
19355
- const [processing, setProcessing] = (0, import_react10.useState)(false);
19356
- const hasProcessed = (0, import_react10.useRef)(false);
19357
- (0, import_react10.useEffect)(() => {
19571
+ const [error, setError] = (0, import_react11.useState)(null);
19572
+ const [processing, setProcessing] = (0, import_react11.useState)(false);
19573
+ const hasProcessed = (0, import_react11.useRef)(false);
19574
+ (0, import_react11.useEffect)(() => {
19358
19575
  if (hasProcessed.current || processing) {
19359
19576
  return;
19360
19577
  }
@@ -19397,13 +19614,13 @@ var AuthCallback = () => {
19397
19614
  handleCallback();
19398
19615
  }, [login, processing]);
19399
19616
  if (error) {
19400
- return /* @__PURE__ */ import_react10.default.createElement(
19617
+ return /* @__PURE__ */ import_react11.default.createElement(
19401
19618
  import_antd6.Result,
19402
19619
  {
19403
19620
  status: "error",
19404
19621
  title: "Authentication Failed",
19405
19622
  subTitle: error,
19406
- extra: /* @__PURE__ */ import_react10.default.createElement(
19623
+ extra: /* @__PURE__ */ import_react11.default.createElement(
19407
19624
  "button",
19408
19625
  {
19409
19626
  onClick: () => window.location.href = "/login",
@@ -19421,7 +19638,7 @@ var AuthCallback = () => {
19421
19638
  }
19422
19639
  );
19423
19640
  }
19424
- return /* @__PURE__ */ import_react10.default.createElement(
19641
+ return /* @__PURE__ */ import_react11.default.createElement(
19425
19642
  "div",
19426
19643
  {
19427
19644
  style: {
@@ -19433,23 +19650,23 @@ var AuthCallback = () => {
19433
19650
  gap: "16px"
19434
19651
  }
19435
19652
  },
19436
- /* @__PURE__ */ import_react10.default.createElement(import_antd6.Spin, { size: "large" }),
19437
- /* @__PURE__ */ import_react10.default.createElement("p", null, "Completing authentication...")
19653
+ /* @__PURE__ */ import_react11.default.createElement(import_antd6.Spin, { size: "large" }),
19654
+ /* @__PURE__ */ import_react11.default.createElement("p", null, "Completing authentication...")
19438
19655
  );
19439
19656
  };
19440
19657
 
19441
19658
  // src/pages/application-users/list.tsx
19442
- var import_react11 = __toESM(require("react"));
19659
+ var import_react12 = __toESM(require("react"));
19443
19660
  var import_core21 = require("@refinedev/core");
19444
19661
  var import_antd7 = require("@refinedev/antd");
19445
- var import_lib9 = require("antd/lib");
19662
+ var import_lib10 = require("antd/lib");
19446
19663
  var import_icons5 = require("@ant-design/icons");
19447
19664
  var ApplicationUserList = () => {
19448
- const [isModalOpen, setIsModalOpen] = (0, import_react11.useState)(false);
19449
- const [selectedUser, setSelectedUser] = (0, import_react11.useState)(null);
19450
- const [form] = import_lib9.Form.useForm();
19665
+ const [isModalOpen, setIsModalOpen] = (0, import_react12.useState)(false);
19666
+ const [selectedUser, setSelectedUser] = (0, import_react12.useState)(null);
19667
+ const [form] = import_lib10.Form.useForm();
19451
19668
  const { open } = (0, import_core21.useNotification)();
19452
- const [isLoading, setIsLoading] = (0, import_react11.useState)(false);
19669
+ const [isLoading, setIsLoading] = (0, import_react12.useState)(false);
19453
19670
  const handleResetPasswordClick = (user) => {
19454
19671
  setSelectedUser(user);
19455
19672
  setIsModalOpen(true);
@@ -19479,21 +19696,21 @@ var ApplicationUserList = () => {
19479
19696
  setIsLoading(false);
19480
19697
  }
19481
19698
  };
19482
- return /* @__PURE__ */ import_react11.default.createElement(import_react11.default.Fragment, null, /* @__PURE__ */ import_react11.default.createElement(
19699
+ return /* @__PURE__ */ import_react12.default.createElement(import_react12.default.Fragment, null, /* @__PURE__ */ import_react12.default.createElement(
19483
19700
  SmartList,
19484
19701
  {
19485
19702
  searchFields: ["UserName", "DisplayName", "Email"]
19486
19703
  },
19487
- /* @__PURE__ */ import_react11.default.createElement(
19488
- import_lib9.Table.Column,
19704
+ /* @__PURE__ */ import_react12.default.createElement(
19705
+ import_lib10.Table.Column,
19489
19706
  {
19490
19707
  dataIndex: "Photo",
19491
19708
  title: "Photo",
19492
- render: (value) => value ? /* @__PURE__ */ import_react11.default.createElement("img", { src: `data:image/png;base64,${value}`, alt: "User", style: { height: 40, width: 40, objectFit: "cover", borderRadius: "50%" } }) : "-"
19709
+ render: (value) => value ? /* @__PURE__ */ import_react12.default.createElement("img", { src: `data:image/png;base64,${value}`, alt: "User", style: { height: 40, width: 40, objectFit: "cover", borderRadius: "50%" } }) : "-"
19493
19710
  }
19494
19711
  ),
19495
- /* @__PURE__ */ import_react11.default.createElement(
19496
- import_lib9.Table.Column,
19712
+ /* @__PURE__ */ import_react12.default.createElement(
19713
+ import_lib10.Table.Column,
19497
19714
  {
19498
19715
  dataIndex: "DisplayName",
19499
19716
  title: "Display Name",
@@ -19502,8 +19719,8 @@ var ApplicationUserList = () => {
19502
19719
  defaultVisible: true
19503
19720
  }
19504
19721
  ),
19505
- /* @__PURE__ */ import_react11.default.createElement(
19506
- import_lib9.Table.Column,
19722
+ /* @__PURE__ */ import_react12.default.createElement(
19723
+ import_lib10.Table.Column,
19507
19724
  {
19508
19725
  dataIndex: "UserName",
19509
19726
  title: "User Name",
@@ -19511,47 +19728,47 @@ var ApplicationUserList = () => {
19511
19728
  defaultVisible: true
19512
19729
  }
19513
19730
  ),
19514
- /* @__PURE__ */ import_react11.default.createElement(
19515
- import_lib9.Table.Column,
19731
+ /* @__PURE__ */ import_react12.default.createElement(
19732
+ import_lib10.Table.Column,
19516
19733
  {
19517
19734
  dataIndex: "Email",
19518
19735
  title: "Email",
19519
19736
  sorter: true
19520
19737
  }
19521
19738
  ),
19522
- /* @__PURE__ */ import_react11.default.createElement(
19523
- import_lib9.Table.Column,
19739
+ /* @__PURE__ */ import_react12.default.createElement(
19740
+ import_lib10.Table.Column,
19524
19741
  {
19525
19742
  dataIndex: "IsActive",
19526
19743
  title: "Active",
19527
- render: (value) => /* @__PURE__ */ import_react11.default.createElement(import_lib9.Checkbox, { checked: value, disabled: true }),
19744
+ render: (value) => /* @__PURE__ */ import_react12.default.createElement(import_lib10.Checkbox, { checked: value, disabled: true }),
19528
19745
  sorter: true
19529
19746
  }
19530
19747
  ),
19531
- /* @__PURE__ */ import_react11.default.createElement(
19532
- import_lib9.Table.Column,
19748
+ /* @__PURE__ */ import_react12.default.createElement(
19749
+ import_lib10.Table.Column,
19533
19750
  {
19534
19751
  dataIndex: "AccessFailedCount",
19535
19752
  title: "Access Failed Count"
19536
19753
  }
19537
19754
  ),
19538
- /* @__PURE__ */ import_react11.default.createElement(
19539
- import_lib9.Table.Column,
19755
+ /* @__PURE__ */ import_react12.default.createElement(
19756
+ import_lib10.Table.Column,
19540
19757
  {
19541
19758
  title: "Actions",
19542
19759
  dataIndex: "actions",
19543
- render: (_, record) => /* @__PURE__ */ import_react11.default.createElement(import_lib9.Space, null, /* @__PURE__ */ import_react11.default.createElement(import_lib9.Tooltip, { title: "Reset Password" }, /* @__PURE__ */ import_react11.default.createElement(
19544
- import_lib9.Button,
19760
+ render: (_, record) => /* @__PURE__ */ import_react12.default.createElement(import_lib10.Space, null, /* @__PURE__ */ import_react12.default.createElement(import_lib10.Tooltip, { title: "Reset Password" }, /* @__PURE__ */ import_react12.default.createElement(
19761
+ import_lib10.Button,
19545
19762
  {
19546
19763
  size: "small",
19547
- icon: /* @__PURE__ */ import_react11.default.createElement(import_icons5.KeyOutlined, null),
19764
+ icon: /* @__PURE__ */ import_react12.default.createElement(import_icons5.KeyOutlined, null),
19548
19765
  onClick: () => handleResetPasswordClick(record)
19549
19766
  }
19550
- )), /* @__PURE__ */ import_react11.default.createElement(import_antd7.EditButton, { hideText: true, size: "small", recordItemId: record.Oid }), /* @__PURE__ */ import_react11.default.createElement(import_antd7.DeleteButton, { hideText: true, size: "small", recordItemId: record.Oid }))
19767
+ )), /* @__PURE__ */ import_react12.default.createElement(import_antd7.EditButton, { hideText: true, size: "small", recordItemId: record.Oid }), /* @__PURE__ */ import_react12.default.createElement(import_antd7.DeleteButton, { hideText: true, size: "small", recordItemId: record.Oid }))
19551
19768
  }
19552
19769
  )
19553
- ), /* @__PURE__ */ import_react11.default.createElement(
19554
- import_lib9.Modal,
19770
+ ), /* @__PURE__ */ import_react12.default.createElement(
19771
+ import_lib10.Modal,
19555
19772
  {
19556
19773
  title: `Reset Password for ${selectedUser?.DisplayName || selectedUser?.UserName}`,
19557
19774
  open: isModalOpen,
@@ -19559,27 +19776,27 @@ var ApplicationUserList = () => {
19559
19776
  onOk: () => form.submit(),
19560
19777
  confirmLoading: isLoading
19561
19778
  },
19562
- /* @__PURE__ */ import_react11.default.createElement(import_lib9.Form, { form, onFinish: handleResetPasswordSubmit, layout: "vertical" }, /* @__PURE__ */ import_react11.default.createElement("div", { style: { display: "flex", gap: 8, alignItems: "flex-end" } }, /* @__PURE__ */ import_react11.default.createElement(
19563
- import_lib9.Form.Item,
19779
+ /* @__PURE__ */ import_react12.default.createElement(import_lib10.Form, { form, onFinish: handleResetPasswordSubmit, layout: "vertical" }, /* @__PURE__ */ import_react12.default.createElement("div", { style: { display: "flex", gap: 8, alignItems: "flex-end" } }, /* @__PURE__ */ import_react12.default.createElement(
19780
+ import_lib10.Form.Item,
19564
19781
  {
19565
19782
  name: "password",
19566
19783
  label: "New Password",
19567
19784
  style: { flex: 1, marginBottom: 0 },
19568
19785
  rules: [{ required: true, message: "Please input the new password!" }]
19569
19786
  },
19570
- /* @__PURE__ */ import_react11.default.createElement(import_lib9.Input.Password, { placeholder: "Enter new password" })
19571
- ), /* @__PURE__ */ import_react11.default.createElement(import_lib9.Tooltip, { title: "Generate Complex Password" }, /* @__PURE__ */ import_react11.default.createElement(import_lib9.Button, { icon: /* @__PURE__ */ import_react11.default.createElement(import_icons5.ThunderboltOutlined, null), onClick: handleGeneratePassword }))))
19787
+ /* @__PURE__ */ import_react12.default.createElement(import_lib10.Input.Password, { placeholder: "Enter new password" })
19788
+ ), /* @__PURE__ */ import_react12.default.createElement(import_lib10.Tooltip, { title: "Generate Complex Password" }, /* @__PURE__ */ import_react12.default.createElement(import_lib10.Button, { icon: /* @__PURE__ */ import_react12.default.createElement(import_icons5.ThunderboltOutlined, null), onClick: handleGeneratePassword }))))
19572
19789
  ));
19573
19790
  };
19574
19791
 
19575
19792
  // src/pages/application-users/create.tsx
19576
- var import_react12 = __toESM(require("react"));
19793
+ var import_react13 = __toESM(require("react"));
19577
19794
  var import_antd8 = require("@refinedev/antd");
19578
- var import_lib10 = require("antd/lib");
19795
+ var import_lib11 = require("antd/lib");
19579
19796
  var ApplicationUserCreate = () => {
19580
19797
  const { formProps, saveButtonProps } = (0, import_antd8.useForm)();
19581
- return /* @__PURE__ */ import_react12.default.createElement(import_antd8.Create, { saveButtonProps }, /* @__PURE__ */ import_react12.default.createElement(import_lib10.Form, { ...formProps, layout: "vertical" }, /* @__PURE__ */ import_react12.default.createElement(
19582
- import_lib10.Form.Item,
19798
+ return /* @__PURE__ */ import_react13.default.createElement(import_antd8.Create, { saveButtonProps }, /* @__PURE__ */ import_react13.default.createElement(import_lib11.Form, { ...formProps, layout: "vertical" }, /* @__PURE__ */ import_react13.default.createElement(
19799
+ import_lib11.Form.Item,
19583
19800
  {
19584
19801
  label: "User Name",
19585
19802
  name: "UserName",
@@ -19589,16 +19806,16 @@ var ApplicationUserCreate = () => {
19589
19806
  }
19590
19807
  ]
19591
19808
  },
19592
- /* @__PURE__ */ import_react12.default.createElement(import_lib10.Input, null)
19593
- ), /* @__PURE__ */ import_react12.default.createElement(
19594
- import_lib10.Form.Item,
19809
+ /* @__PURE__ */ import_react13.default.createElement(import_lib11.Input, null)
19810
+ ), /* @__PURE__ */ import_react13.default.createElement(
19811
+ import_lib11.Form.Item,
19595
19812
  {
19596
19813
  label: "Display Name",
19597
19814
  name: "DisplayName"
19598
19815
  },
19599
- /* @__PURE__ */ import_react12.default.createElement(import_lib10.Input, null)
19600
- ), /* @__PURE__ */ import_react12.default.createElement(
19601
- import_lib10.Form.Item,
19816
+ /* @__PURE__ */ import_react13.default.createElement(import_lib11.Input, null)
19817
+ ), /* @__PURE__ */ import_react13.default.createElement(
19818
+ import_lib11.Form.Item,
19602
19819
  {
19603
19820
  label: "Email",
19604
19821
  name: "Email",
@@ -19608,32 +19825,32 @@ var ApplicationUserCreate = () => {
19608
19825
  }
19609
19826
  ]
19610
19827
  },
19611
- /* @__PURE__ */ import_react12.default.createElement(import_lib10.Input, null)
19612
- ), /* @__PURE__ */ import_react12.default.createElement(
19613
- import_lib10.Form.Item,
19828
+ /* @__PURE__ */ import_react13.default.createElement(import_lib11.Input, null)
19829
+ ), /* @__PURE__ */ import_react13.default.createElement(
19830
+ import_lib11.Form.Item,
19614
19831
  {
19615
19832
  label: "Is Active",
19616
19833
  name: "IsActive",
19617
19834
  valuePropName: "checked",
19618
19835
  initialValue: true
19619
19836
  },
19620
- /* @__PURE__ */ import_react12.default.createElement(import_lib10.Checkbox, null, "Active")
19621
- ), /* @__PURE__ */ import_react12.default.createElement(
19622
- import_lib10.Form.Item,
19837
+ /* @__PURE__ */ import_react13.default.createElement(import_lib11.Checkbox, null, "Active")
19838
+ ), /* @__PURE__ */ import_react13.default.createElement(
19839
+ import_lib11.Form.Item,
19623
19840
  {
19624
19841
  label: "Photo",
19625
19842
  name: "Photo"
19626
19843
  },
19627
- /* @__PURE__ */ import_react12.default.createElement(Base64Upload, null)
19844
+ /* @__PURE__ */ import_react13.default.createElement(Base64Upload, null)
19628
19845
  )));
19629
19846
  };
19630
19847
 
19631
19848
  // src/pages/application-users/edit.tsx
19632
- var import_react13 = __toESM(require("react"));
19849
+ var import_react14 = __toESM(require("react"));
19633
19850
  var import_antd9 = require("@refinedev/antd");
19634
- var import_lib11 = require("antd/lib");
19851
+ var import_lib12 = require("antd/lib");
19635
19852
  var ApplicationUserEdit = () => {
19636
- const { message: message2 } = import_lib11.App.useApp();
19853
+ const { message: message3 } = import_lib12.App.useApp();
19637
19854
  const { formProps, saveButtonProps, id, form } = (0, import_antd9.useForm)({
19638
19855
  meta: {
19639
19856
  expand: ["Roles"]
@@ -19654,12 +19871,12 @@ var ApplicationUserEdit = () => {
19654
19871
  })
19655
19872
  });
19656
19873
  if (response.ok) {
19657
- message2.success("Roles updated successfully");
19874
+ message3.success("Roles updated successfully");
19658
19875
  } else {
19659
- message2.error("Failed to update roles");
19876
+ message3.error("Failed to update roles");
19660
19877
  }
19661
19878
  } catch (e) {
19662
- message2.error("Error updating roles");
19879
+ message3.error("Error updating roles");
19663
19880
  }
19664
19881
  }
19665
19882
  });
@@ -19672,8 +19889,8 @@ var ApplicationUserEdit = () => {
19672
19889
  const { Roles, ...userValues } = values;
19673
19890
  formProps.onFinish?.(userValues);
19674
19891
  };
19675
- return /* @__PURE__ */ import_react13.default.createElement(import_antd9.Edit, { saveButtonProps }, /* @__PURE__ */ import_react13.default.createElement(import_lib11.Form, { ...formProps, layout: "vertical", onFinish: handleOnFinish }, /* @__PURE__ */ import_react13.default.createElement(
19676
- import_lib11.Form.Item,
19892
+ return /* @__PURE__ */ import_react14.default.createElement(import_antd9.Edit, { saveButtonProps }, /* @__PURE__ */ import_react14.default.createElement(import_lib12.Form, { ...formProps, layout: "vertical", onFinish: handleOnFinish }, /* @__PURE__ */ import_react14.default.createElement(
19893
+ import_lib12.Form.Item,
19677
19894
  {
19678
19895
  label: "User Name",
19679
19896
  name: "UserName",
@@ -19683,16 +19900,16 @@ var ApplicationUserEdit = () => {
19683
19900
  }
19684
19901
  ]
19685
19902
  },
19686
- /* @__PURE__ */ import_react13.default.createElement(import_lib11.Input, null)
19687
- ), /* @__PURE__ */ import_react13.default.createElement(
19688
- import_lib11.Form.Item,
19903
+ /* @__PURE__ */ import_react14.default.createElement(import_lib12.Input, null)
19904
+ ), /* @__PURE__ */ import_react14.default.createElement(
19905
+ import_lib12.Form.Item,
19689
19906
  {
19690
19907
  label: "Display Name",
19691
19908
  name: "DisplayName"
19692
19909
  },
19693
- /* @__PURE__ */ import_react13.default.createElement(import_lib11.Input, null)
19694
- ), /* @__PURE__ */ import_react13.default.createElement(
19695
- import_lib11.Form.Item,
19910
+ /* @__PURE__ */ import_react14.default.createElement(import_lib12.Input, null)
19911
+ ), /* @__PURE__ */ import_react14.default.createElement(
19912
+ import_lib12.Form.Item,
19696
19913
  {
19697
19914
  label: "Email",
19698
19915
  name: "Email",
@@ -19702,17 +19919,17 @@ var ApplicationUserEdit = () => {
19702
19919
  }
19703
19920
  ]
19704
19921
  },
19705
- /* @__PURE__ */ import_react13.default.createElement(import_lib11.Input, null)
19706
- ), /* @__PURE__ */ import_react13.default.createElement(
19707
- import_lib11.Form.Item,
19922
+ /* @__PURE__ */ import_react14.default.createElement(import_lib12.Input, null)
19923
+ ), /* @__PURE__ */ import_react14.default.createElement(
19924
+ import_lib12.Form.Item,
19708
19925
  {
19709
19926
  label: "Is Active",
19710
19927
  name: "IsActive",
19711
19928
  valuePropName: "checked"
19712
19929
  },
19713
- /* @__PURE__ */ import_react13.default.createElement(import_lib11.Checkbox, null, "Active")
19714
- ), /* @__PURE__ */ import_react13.default.createElement(
19715
- import_lib11.Form.Item,
19930
+ /* @__PURE__ */ import_react14.default.createElement(import_lib12.Checkbox, null, "Active")
19931
+ ), /* @__PURE__ */ import_react14.default.createElement(
19932
+ import_lib12.Form.Item,
19716
19933
  {
19717
19934
  label: "Roles",
19718
19935
  name: "Roles",
@@ -19730,50 +19947,50 @@ var ApplicationUserEdit = () => {
19730
19947
  return { value: [] };
19731
19948
  }
19732
19949
  },
19733
- /* @__PURE__ */ import_react13.default.createElement(import_lib11.Select, { ...roleSelectProps, mode: "multiple" })
19734
- ), /* @__PURE__ */ import_react13.default.createElement(
19735
- import_lib11.Form.Item,
19950
+ /* @__PURE__ */ import_react14.default.createElement(import_lib12.Select, { ...roleSelectProps, mode: "multiple" })
19951
+ ), /* @__PURE__ */ import_react14.default.createElement(
19952
+ import_lib12.Form.Item,
19736
19953
  {
19737
19954
  label: "Photo",
19738
19955
  name: "Photo"
19739
19956
  },
19740
- /* @__PURE__ */ import_react13.default.createElement(Base64Upload, null)
19957
+ /* @__PURE__ */ import_react14.default.createElement(Base64Upload, null)
19741
19958
  )));
19742
19959
  };
19743
19960
 
19744
19961
  // src/pages/roles/list.tsx
19745
- var import_react14 = __toESM(require("react"));
19962
+ var import_react15 = __toESM(require("react"));
19746
19963
  var import_antd10 = require("@refinedev/antd");
19747
- var import_lib12 = require("antd/lib");
19964
+ var import_lib13 = require("antd/lib");
19748
19965
  var RoleList = () => {
19749
19966
  const { tableProps } = (0, import_antd10.useTable)({
19750
19967
  syncWithLocation: true
19751
19968
  });
19752
- return /* @__PURE__ */ import_react14.default.createElement(import_antd10.List, null, /* @__PURE__ */ import_react14.default.createElement(import_lib12.Table, { ...tableProps, rowKey: "Oid" }, /* @__PURE__ */ import_react14.default.createElement(import_lib12.Table.Column, { dataIndex: "Name", title: "Name" }), /* @__PURE__ */ import_react14.default.createElement(
19753
- import_lib12.Table.Column,
19969
+ return /* @__PURE__ */ import_react15.default.createElement(import_antd10.List, null, /* @__PURE__ */ import_react15.default.createElement(import_lib13.Table, { ...tableProps, rowKey: "Oid" }, /* @__PURE__ */ import_react15.default.createElement(import_lib13.Table.Column, { dataIndex: "Name", title: "Name" }), /* @__PURE__ */ import_react15.default.createElement(
19970
+ import_lib13.Table.Column,
19754
19971
  {
19755
19972
  dataIndex: "IsAdministrative",
19756
19973
  title: "Is Administrative",
19757
- render: (value) => /* @__PURE__ */ import_react14.default.createElement(import_lib12.Checkbox, { checked: value, disabled: true })
19974
+ render: (value) => /* @__PURE__ */ import_react15.default.createElement(import_lib13.Checkbox, { checked: value, disabled: true })
19758
19975
  }
19759
- ), /* @__PURE__ */ import_react14.default.createElement(import_lib12.Table.Column, { dataIndex: "PermissionPolicy", title: "Permission Policy" }), /* @__PURE__ */ import_react14.default.createElement(
19760
- import_lib12.Table.Column,
19976
+ ), /* @__PURE__ */ import_react15.default.createElement(import_lib13.Table.Column, { dataIndex: "PermissionPolicy", title: "Permission Policy" }), /* @__PURE__ */ import_react15.default.createElement(
19977
+ import_lib13.Table.Column,
19761
19978
  {
19762
19979
  title: "Actions",
19763
19980
  dataIndex: "actions",
19764
- render: (_, record) => /* @__PURE__ */ import_react14.default.createElement(import_lib12.Space, null, /* @__PURE__ */ import_react14.default.createElement(import_antd10.EditButton, { hideText: true, size: "small", recordItemId: record.Oid }), /* @__PURE__ */ import_react14.default.createElement(import_antd10.DeleteButton, { hideText: true, size: "small", recordItemId: record.Oid }))
19981
+ render: (_, record) => /* @__PURE__ */ import_react15.default.createElement(import_lib13.Space, null, /* @__PURE__ */ import_react15.default.createElement(import_antd10.EditButton, { hideText: true, size: "small", recordItemId: record.Oid }), /* @__PURE__ */ import_react15.default.createElement(import_antd10.DeleteButton, { hideText: true, size: "small", recordItemId: record.Oid }))
19765
19982
  }
19766
19983
  )));
19767
19984
  };
19768
19985
 
19769
19986
  // src/pages/roles/create.tsx
19770
- var import_react16 = __toESM(require("react"));
19987
+ var import_react17 = __toESM(require("react"));
19771
19988
  var import_antd12 = require("@refinedev/antd");
19772
- var import_lib14 = require("antd/lib");
19989
+ var import_lib15 = require("antd/lib");
19773
19990
 
19774
19991
  // src/pages/roles/TypePermissionList.tsx
19775
- var import_react15 = __toESM(require("react"));
19776
- var import_lib13 = require("antd/lib");
19992
+ var import_react16 = __toESM(require("react"));
19993
+ var import_lib14 = require("antd/lib");
19777
19994
  var import_antd11 = require("@refinedev/antd");
19778
19995
 
19779
19996
  // src/hooks/useModelTypes.ts
@@ -19801,8 +20018,8 @@ var useModelTypes = () => {
19801
20018
  };
19802
20019
 
19803
20020
  // src/pages/roles/TypePermissionList.tsx
19804
- var PermissionSelect = (props) => /* @__PURE__ */ import_react15.default.createElement(
19805
- import_lib13.Select,
20021
+ var PermissionSelect = (props) => /* @__PURE__ */ import_react16.default.createElement(
20022
+ import_lib14.Select,
19806
20023
  {
19807
20024
  ...props,
19808
20025
  allowClear: true,
@@ -19813,22 +20030,22 @@ var PermissionSelect = (props) => /* @__PURE__ */ import_react15.default.createE
19813
20030
  }
19814
20031
  );
19815
20032
  var TypePermissionFormFields = ({ typeOptions }) => {
19816
- return /* @__PURE__ */ import_react15.default.createElement(import_react15.default.Fragment, null, /* @__PURE__ */ import_react15.default.createElement(
19817
- import_lib13.Form.Item,
20033
+ return /* @__PURE__ */ import_react16.default.createElement(import_react16.default.Fragment, null, /* @__PURE__ */ import_react16.default.createElement(
20034
+ import_lib14.Form.Item,
19818
20035
  {
19819
20036
  label: "Target Type",
19820
20037
  name: "TargetTypeFullName",
19821
20038
  rules: [{ required: true }]
19822
20039
  },
19823
- /* @__PURE__ */ import_react15.default.createElement(
19824
- import_lib13.Select,
20040
+ /* @__PURE__ */ import_react16.default.createElement(
20041
+ import_lib14.Select,
19825
20042
  {
19826
20043
  showSearch: true,
19827
20044
  options: typeOptions,
19828
20045
  filterOption: (input, option) => (option?.label ?? "").toLowerCase().includes(input.toLowerCase())
19829
20046
  }
19830
20047
  )
19831
- ), /* @__PURE__ */ import_react15.default.createElement(import_lib13.Form.Item, { label: "Read State", name: "ReadState" }, /* @__PURE__ */ import_react15.default.createElement(PermissionSelect, null)), /* @__PURE__ */ import_react15.default.createElement(import_lib13.Form.Item, { label: "Write State", name: "WriteState" }, /* @__PURE__ */ import_react15.default.createElement(PermissionSelect, null)), /* @__PURE__ */ import_react15.default.createElement(import_lib13.Form.Item, { label: "Create State", name: "CreateState" }, /* @__PURE__ */ import_react15.default.createElement(PermissionSelect, null)), /* @__PURE__ */ import_react15.default.createElement(import_lib13.Form.Item, { label: "Delete State", name: "DeleteState" }, /* @__PURE__ */ import_react15.default.createElement(PermissionSelect, null)));
20048
+ ), /* @__PURE__ */ import_react16.default.createElement(import_lib14.Form.Item, { label: "Read State", name: "ReadState" }, /* @__PURE__ */ import_react16.default.createElement(PermissionSelect, null)), /* @__PURE__ */ import_react16.default.createElement(import_lib14.Form.Item, { label: "Write State", name: "WriteState" }, /* @__PURE__ */ import_react16.default.createElement(PermissionSelect, null)), /* @__PURE__ */ import_react16.default.createElement(import_lib14.Form.Item, { label: "Create State", name: "CreateState" }, /* @__PURE__ */ import_react16.default.createElement(PermissionSelect, null)), /* @__PURE__ */ import_react16.default.createElement(import_lib14.Form.Item, { label: "Delete State", name: "DeleteState" }, /* @__PURE__ */ import_react16.default.createElement(PermissionSelect, null)));
19832
20049
  };
19833
20050
  var TypePermissionList = ({ masterId }) => {
19834
20051
  const { data: modelTypes } = useModelTypes();
@@ -19848,17 +20065,17 @@ var TypePermissionList = ({ masterId }) => {
19848
20065
  mode: "off"
19849
20066
  }
19850
20067
  });
19851
- const typeOptions = import_react15.default.useMemo(() => modelTypes?.filter((t) => t.IsCreatable && !t.IsDeprecated).map((t) => ({ label: t.Caption, value: t.Name })) || [], [modelTypes]);
19852
- const FormFieldsWrapper = import_react15.default.useMemo(() => {
19853
- return ({ mode }) => /* @__PURE__ */ import_react15.default.createElement(TypePermissionFormFields, { typeOptions });
20068
+ const typeOptions = import_react16.default.useMemo(() => modelTypes?.filter((t) => t.IsCreatable && !t.IsDeprecated).map((t) => ({ label: t.Caption, value: t.Name })) || [], [modelTypes]);
20069
+ const FormFieldsWrapper = import_react16.default.useMemo(() => {
20070
+ return ({ mode }) => /* @__PURE__ */ import_react16.default.createElement(TypePermissionFormFields, { typeOptions });
19854
20071
  }, [typeOptions]);
19855
- const dataSource = import_react15.default.useMemo(() => {
20072
+ const dataSource = import_react16.default.useMemo(() => {
19856
20073
  return (tableProps.dataSource || []).map((p) => ({
19857
20074
  ...p,
19858
20075
  TargetType: p.TargetType || p.TargetTypeFullName || ""
19859
20076
  }));
19860
20077
  }, [tableProps.dataSource]);
19861
- return /* @__PURE__ */ import_react15.default.createElement(
20078
+ return /* @__PURE__ */ import_react16.default.createElement(
19862
20079
  RelatedList,
19863
20080
  {
19864
20081
  resource: "PermissionPolicyTypePermissionObject",
@@ -19869,30 +20086,30 @@ var TypePermissionList = ({ masterId }) => {
19869
20086
  modalTitle: "Type Permission",
19870
20087
  FormFields: FormFieldsWrapper
19871
20088
  },
19872
- /* @__PURE__ */ import_react15.default.createElement(
19873
- import_lib13.Table.Column,
20089
+ /* @__PURE__ */ import_react16.default.createElement(
20090
+ import_lib14.Table.Column,
19874
20091
  {
19875
20092
  dataIndex: "TargetType",
19876
20093
  title: "Target Type",
19877
20094
  render: (value) => typeOptions.find((t) => t.value === value)?.label || value
19878
20095
  }
19879
20096
  ),
19880
- /* @__PURE__ */ import_react15.default.createElement(import_lib13.Table.Column, { dataIndex: "ReadState", title: "Read" }),
19881
- /* @__PURE__ */ import_react15.default.createElement(import_lib13.Table.Column, { dataIndex: "WriteState", title: "Write" }),
19882
- /* @__PURE__ */ import_react15.default.createElement(import_lib13.Table.Column, { dataIndex: "CreateState", title: "Create" }),
19883
- /* @__PURE__ */ import_react15.default.createElement(import_lib13.Table.Column, { dataIndex: "DeleteState", title: "Delete" })
20097
+ /* @__PURE__ */ import_react16.default.createElement(import_lib14.Table.Column, { dataIndex: "ReadState", title: "Read" }),
20098
+ /* @__PURE__ */ import_react16.default.createElement(import_lib14.Table.Column, { dataIndex: "WriteState", title: "Write" }),
20099
+ /* @__PURE__ */ import_react16.default.createElement(import_lib14.Table.Column, { dataIndex: "CreateState", title: "Create" }),
20100
+ /* @__PURE__ */ import_react16.default.createElement(import_lib14.Table.Column, { dataIndex: "DeleteState", title: "Delete" })
19884
20101
  );
19885
20102
  };
19886
20103
 
19887
20104
  // src/pages/roles/create.tsx
19888
20105
  var RoleCreate = () => {
19889
- const [form] = import_lib14.Form.useForm();
20106
+ const [form] = import_lib15.Form.useForm();
19890
20107
  const { formProps, saveButtonProps } = (0, import_antd12.useForm)();
19891
20108
  const handleSave = () => {
19892
20109
  form.submit();
19893
20110
  };
19894
- return /* @__PURE__ */ import_react16.default.createElement(import_antd12.Create, { saveButtonProps: { ...saveButtonProps, onClick: handleSave } }, /* @__PURE__ */ import_react16.default.createElement(
19895
- import_lib14.Form,
20111
+ return /* @__PURE__ */ import_react17.default.createElement(import_antd12.Create, { saveButtonProps: { ...saveButtonProps, onClick: handleSave } }, /* @__PURE__ */ import_react17.default.createElement(
20112
+ import_lib15.Form,
19896
20113
  {
19897
20114
  ...formProps,
19898
20115
  form,
@@ -19901,34 +20118,34 @@ var RoleCreate = () => {
19901
20118
  return formProps.onFinish && formProps.onFinish(values);
19902
20119
  }
19903
20120
  },
19904
- /* @__PURE__ */ import_react16.default.createElement(
19905
- import_lib14.Form.Item,
20121
+ /* @__PURE__ */ import_react17.default.createElement(
20122
+ import_lib15.Form.Item,
19906
20123
  {
19907
20124
  label: "Name",
19908
20125
  name: "Name",
19909
20126
  rules: [{ required: true }]
19910
20127
  },
19911
- /* @__PURE__ */ import_react16.default.createElement(import_lib14.Input, null)
20128
+ /* @__PURE__ */ import_react17.default.createElement(import_lib15.Input, null)
19912
20129
  ),
19913
- /* @__PURE__ */ import_react16.default.createElement(
19914
- import_lib14.Form.Item,
20130
+ /* @__PURE__ */ import_react17.default.createElement(
20131
+ import_lib15.Form.Item,
19915
20132
  {
19916
20133
  label: "Is Administrative",
19917
20134
  name: "IsAdministrative",
19918
20135
  valuePropName: "checked"
19919
20136
  },
19920
- /* @__PURE__ */ import_react16.default.createElement(import_lib14.Checkbox, null, "Is Administrative")
20137
+ /* @__PURE__ */ import_react17.default.createElement(import_lib15.Checkbox, null, "Is Administrative")
19921
20138
  ),
19922
- /* @__PURE__ */ import_react16.default.createElement(
19923
- import_lib14.Form.Item,
20139
+ /* @__PURE__ */ import_react17.default.createElement(
20140
+ import_lib15.Form.Item,
19924
20141
  {
19925
20142
  label: "Permission Policy",
19926
20143
  name: "PermissionPolicy",
19927
20144
  initialValue: "DenyAllByDefault" /* DenyAllByDefault */,
19928
20145
  rules: [{ required: true }]
19929
20146
  },
19930
- /* @__PURE__ */ import_react16.default.createElement(
19931
- import_lib14.Select,
20147
+ /* @__PURE__ */ import_react17.default.createElement(
20148
+ import_lib15.Select,
19932
20149
  {
19933
20150
  options: [
19934
20151
  { label: "Deny All By Default", value: "DenyAllByDefault" /* DenyAllByDefault */ },
@@ -19938,21 +20155,21 @@ var RoleCreate = () => {
19938
20155
  }
19939
20156
  )
19940
20157
  ),
19941
- /* @__PURE__ */ import_react16.default.createElement(TypePermissionList, null)
20158
+ /* @__PURE__ */ import_react17.default.createElement(TypePermissionList, null)
19942
20159
  ));
19943
20160
  };
19944
20161
 
19945
20162
  // src/pages/roles/edit.tsx
19946
- var import_react17 = __toESM(require("react"));
20163
+ var import_react18 = __toESM(require("react"));
19947
20164
  var import_antd13 = require("@refinedev/antd");
19948
- var import_lib15 = require("antd/lib");
20165
+ var import_lib16 = require("antd/lib");
19949
20166
  var RoleEdit = () => {
19950
20167
  const { formProps, saveButtonProps, id } = (0, import_antd13.useForm)();
19951
20168
  const handleSave = () => {
19952
20169
  formProps.form?.submit();
19953
20170
  };
19954
- return /* @__PURE__ */ import_react17.default.createElement(import_antd13.Edit, { saveButtonProps: { ...saveButtonProps, onClick: handleSave } }, /* @__PURE__ */ import_react17.default.createElement(
19955
- import_lib15.Form,
20171
+ return /* @__PURE__ */ import_react18.default.createElement(import_antd13.Edit, { saveButtonProps: { ...saveButtonProps, onClick: handleSave } }, /* @__PURE__ */ import_react18.default.createElement(
20172
+ import_lib16.Form,
19956
20173
  {
19957
20174
  ...formProps,
19958
20175
  layout: "vertical",
@@ -19961,33 +20178,33 @@ var RoleEdit = () => {
19961
20178
  return formProps.onFinish && formProps.onFinish(rest);
19962
20179
  }
19963
20180
  },
19964
- /* @__PURE__ */ import_react17.default.createElement(
19965
- import_lib15.Form.Item,
20181
+ /* @__PURE__ */ import_react18.default.createElement(
20182
+ import_lib16.Form.Item,
19966
20183
  {
19967
20184
  label: "Name",
19968
20185
  name: "Name",
19969
20186
  rules: [{ required: true }]
19970
20187
  },
19971
- /* @__PURE__ */ import_react17.default.createElement(import_lib15.Input, null)
20188
+ /* @__PURE__ */ import_react18.default.createElement(import_lib16.Input, null)
19972
20189
  ),
19973
- /* @__PURE__ */ import_react17.default.createElement(
19974
- import_lib15.Form.Item,
20190
+ /* @__PURE__ */ import_react18.default.createElement(
20191
+ import_lib16.Form.Item,
19975
20192
  {
19976
20193
  label: "Is Administrative",
19977
20194
  name: "IsAdministrative",
19978
20195
  valuePropName: "checked"
19979
20196
  },
19980
- /* @__PURE__ */ import_react17.default.createElement(import_lib15.Checkbox, null, "Is Administrative")
20197
+ /* @__PURE__ */ import_react18.default.createElement(import_lib16.Checkbox, null, "Is Administrative")
19981
20198
  ),
19982
- /* @__PURE__ */ import_react17.default.createElement(
19983
- import_lib15.Form.Item,
20199
+ /* @__PURE__ */ import_react18.default.createElement(
20200
+ import_lib16.Form.Item,
19984
20201
  {
19985
20202
  label: "Permission Policy",
19986
20203
  name: "PermissionPolicy",
19987
20204
  rules: [{ required: true }]
19988
20205
  },
19989
- /* @__PURE__ */ import_react17.default.createElement(
19990
- import_lib15.Select,
20206
+ /* @__PURE__ */ import_react18.default.createElement(
20207
+ import_lib16.Select,
19991
20208
  {
19992
20209
  options: [
19993
20210
  { label: "Deny All By Default", value: "DenyAllByDefault" /* DenyAllByDefault */ },
@@ -19997,7 +20214,7 @@ var RoleEdit = () => {
19997
20214
  }
19998
20215
  )
19999
20216
  ),
20000
- /* @__PURE__ */ import_react17.default.createElement(
20217
+ /* @__PURE__ */ import_react18.default.createElement(
20001
20218
  TypePermissionList,
20002
20219
  {
20003
20220
  masterId: id?.toString()
@@ -20005,15 +20222,358 @@ var RoleEdit = () => {
20005
20222
  )
20006
20223
  ));
20007
20224
  };
20225
+
20226
+ // src/pages/background-jobs/list.tsx
20227
+ var import_react19 = __toESM(require("react"));
20228
+ var import_core22 = require("@refinedev/core");
20229
+ var import_antd14 = require("@refinedev/antd");
20230
+ var import_antd15 = require("antd");
20231
+ var import_icons6 = require("@ant-design/icons");
20232
+ var BackgroundJobList = ({
20233
+ title,
20234
+ apiUrl: customApiUrl
20235
+ }) => {
20236
+ const t = (0, import_core22.useTranslate)();
20237
+ const defaultApiUrl = (0, import_core22.useApiUrl)();
20238
+ const apiUrl = customApiUrl || defaultApiUrl?.replace("/odata", "");
20239
+ const [refreshKey, setRefreshKey] = (0, import_react19.useState)(0);
20240
+ const [activeTab, setActiveTab] = (0, import_react19.useState)("recurring");
20241
+ const [loading, setLoading] = (0, import_react19.useState)(false);
20242
+ const [recurringJobs, setRecurringJobs] = (0, import_react19.useState)([]);
20243
+ const [succeededResult, setSucceededResult] = (0, import_react19.useState)(null);
20244
+ const [failedResult, setFailedResult] = (0, import_react19.useState)(null);
20245
+ const [processingResult, setProcessingResult] = (0, import_react19.useState)(null);
20246
+ const [drawerVisible, setDrawerVisible] = (0, import_react19.useState)(false);
20247
+ const [jobDetails, setJobDetails] = (0, import_react19.useState)(null);
20248
+ const [detailLoading, setDetailLoading] = (0, import_react19.useState)(false);
20249
+ const fetchData = (0, import_react19.useCallback)(async () => {
20250
+ setLoading(true);
20251
+ const token = localStorage.getItem("refine-auth") || localStorage.getItem("access_token");
20252
+ const headers = token ? { "Authorization": `Bearer ${token}` } : {};
20253
+ try {
20254
+ const [recurringRes, succeededRes, failedRes, processingRes] = await Promise.all([
20255
+ fetch(`${apiUrl}/hangfire/recurring`, { headers }),
20256
+ fetch(`${apiUrl}/hangfire/jobs/succeeded`, { headers }),
20257
+ fetch(`${apiUrl}/hangfire/jobs/failed`, { headers }),
20258
+ fetch(`${apiUrl}/hangfire/jobs/processing`, { headers })
20259
+ ]);
20260
+ if (recurringRes.ok) {
20261
+ const data = await recurringRes.json();
20262
+ setRecurringJobs(data.value || data || []);
20263
+ }
20264
+ if (succeededRes.ok) {
20265
+ setSucceededResult(await succeededRes.json());
20266
+ }
20267
+ if (failedRes.ok) {
20268
+ setFailedResult(await failedRes.json());
20269
+ }
20270
+ if (processingRes.ok) {
20271
+ setProcessingResult(await processingRes.json());
20272
+ }
20273
+ } catch (error) {
20274
+ console.error("Failed to fetch Hangfire data:", error);
20275
+ } finally {
20276
+ setLoading(false);
20277
+ }
20278
+ }, [apiUrl]);
20279
+ (0, import_react19.useEffect)(() => {
20280
+ fetchData();
20281
+ }, [fetchData, refreshKey]);
20282
+ const handleRefresh = () => {
20283
+ setRefreshKey((prev) => prev + 1);
20284
+ };
20285
+ const handleTrigger = async (jobId) => {
20286
+ try {
20287
+ const token = localStorage.getItem("refine-auth") || localStorage.getItem("access_token");
20288
+ const headers = token ? { "Authorization": `Bearer ${token}` } : {};
20289
+ const response = await fetch(`${apiUrl}/hangfire/trigger/${jobId}`, {
20290
+ method: "POST",
20291
+ headers
20292
+ });
20293
+ if (response.ok) {
20294
+ import_antd15.message.success(t("backgroundJobs.actions.triggerSuccess"));
20295
+ handleRefresh();
20296
+ } else {
20297
+ import_antd15.message.error(t("backgroundJobs.actions.triggerError"));
20298
+ }
20299
+ } catch {
20300
+ import_antd15.message.error(t("backgroundJobs.actions.triggerError"));
20301
+ }
20302
+ };
20303
+ const handleDelete = async (jobId) => {
20304
+ try {
20305
+ const token = localStorage.getItem("refine-auth") || localStorage.getItem("access_token");
20306
+ const headers = token ? { "Authorization": `Bearer ${token}` } : {};
20307
+ const response = await fetch(`${apiUrl}/hangfire/recurring/${jobId}`, {
20308
+ method: "DELETE",
20309
+ headers
20310
+ });
20311
+ if (response.ok) {
20312
+ import_antd15.message.success(t("backgroundJobs.actions.deleteSuccess"));
20313
+ handleRefresh();
20314
+ } else {
20315
+ import_antd15.message.error(t("backgroundJobs.actions.deleteError"));
20316
+ }
20317
+ } catch {
20318
+ import_antd15.message.error(t("backgroundJobs.actions.deleteError"));
20319
+ }
20320
+ };
20321
+ const showDetails = async (jobId) => {
20322
+ setDrawerVisible(true);
20323
+ setDetailLoading(true);
20324
+ setJobDetails(null);
20325
+ try {
20326
+ const token = localStorage.getItem("refine-auth") || localStorage.getItem("access_token");
20327
+ const headers = token ? { "Authorization": `Bearer ${token}` } : {};
20328
+ const res = await fetch(`${apiUrl}/hangfire/jobs/${jobId}`, { headers });
20329
+ if (res.ok) {
20330
+ const data = await res.json();
20331
+ setJobDetails(data);
20332
+ } else {
20333
+ import_antd15.message.error("Failed to load details");
20334
+ }
20335
+ } catch {
20336
+ import_antd15.message.error("Failed to load details");
20337
+ } finally {
20338
+ setDetailLoading(false);
20339
+ }
20340
+ };
20341
+ const closeDrawer = () => {
20342
+ setDrawerVisible(false);
20343
+ setJobDetails(null);
20344
+ };
20345
+ const getStateTag = (state) => {
20346
+ if (!state) return /* @__PURE__ */ import_react19.default.createElement(import_antd15.Tag, null, t("backgroundJobs.status.unknown"));
20347
+ switch (state.toLowerCase()) {
20348
+ case "succeeded":
20349
+ return /* @__PURE__ */ import_react19.default.createElement(import_antd15.Tag, { icon: /* @__PURE__ */ import_react19.default.createElement(import_icons6.CheckCircleOutlined, null), color: "success" }, t("backgroundJobs.status.succeeded"));
20350
+ case "failed":
20351
+ return /* @__PURE__ */ import_react19.default.createElement(import_antd15.Tag, { icon: /* @__PURE__ */ import_react19.default.createElement(import_icons6.CloseCircleOutlined, null), color: "error" }, t("backgroundJobs.status.failed"));
20352
+ case "processing":
20353
+ return /* @__PURE__ */ import_react19.default.createElement(import_antd15.Tag, { icon: /* @__PURE__ */ import_react19.default.createElement(import_icons6.SyncOutlined, { spin: true }), color: "processing" }, t("backgroundJobs.status.processing"));
20354
+ case "scheduled":
20355
+ return /* @__PURE__ */ import_react19.default.createElement(import_antd15.Tag, { icon: /* @__PURE__ */ import_react19.default.createElement(import_icons6.ClockCircleOutlined, null), color: "warning" }, t("backgroundJobs.status.scheduled"));
20356
+ default:
20357
+ return /* @__PURE__ */ import_react19.default.createElement(import_antd15.Tag, null, state);
20358
+ }
20359
+ };
20360
+ const recurringColumns = [
20361
+ { title: t("backgroundJobs.columns.id"), dataIndex: "Id", key: "Id" },
20362
+ {
20363
+ title: t("backgroundJobs.columns.cron"),
20364
+ dataIndex: "Cron",
20365
+ key: "Cron",
20366
+ render: (cron) => /* @__PURE__ */ import_react19.default.createElement(import_antd15.Tag, { color: "blue" }, cron)
20367
+ },
20368
+ { title: t("backgroundJobs.columns.queue"), dataIndex: "Queue", key: "Queue" },
20369
+ {
20370
+ title: t("backgroundJobs.columns.nextExecution"),
20371
+ dataIndex: "NextExecution",
20372
+ key: "NextExecution",
20373
+ render: (date) => date ? new Date(date).toLocaleString() : "-"
20374
+ },
20375
+ {
20376
+ title: t("backgroundJobs.columns.lastState"),
20377
+ dataIndex: "LastJobState",
20378
+ key: "LastJobState",
20379
+ render: (state) => getStateTag(state)
20380
+ },
20381
+ {
20382
+ title: t("backgroundJobs.columns.actions"),
20383
+ key: "actions",
20384
+ render: (_, record) => /* @__PURE__ */ import_react19.default.createElement(import_antd15.Space, null, /* @__PURE__ */ import_react19.default.createElement(import_antd15.Tooltip, { title: t("backgroundJobs.actions.trigger") }, /* @__PURE__ */ import_react19.default.createElement(
20385
+ import_antd15.Button,
20386
+ {
20387
+ type: "primary",
20388
+ icon: /* @__PURE__ */ import_react19.default.createElement(import_icons6.PlayCircleOutlined, null),
20389
+ size: "small",
20390
+ onClick: () => handleTrigger(record.Id)
20391
+ }
20392
+ )), /* @__PURE__ */ import_react19.default.createElement(import_antd15.Tooltip, { title: t("backgroundJobs.actions.delete") }, /* @__PURE__ */ import_react19.default.createElement(
20393
+ import_antd15.Button,
20394
+ {
20395
+ danger: true,
20396
+ icon: /* @__PURE__ */ import_react19.default.createElement(import_icons6.DeleteOutlined, null),
20397
+ size: "small",
20398
+ onClick: () => handleDelete(record.Id)
20399
+ }
20400
+ )))
20401
+ }
20402
+ ];
20403
+ const succeededColumns = [
20404
+ {
20405
+ title: t("backgroundJobs.columns.jobId"),
20406
+ dataIndex: "JobId",
20407
+ key: "JobId",
20408
+ render: (text) => /* @__PURE__ */ import_react19.default.createElement("a", { onClick: () => showDetails(text) }, text)
20409
+ },
20410
+ { title: t("backgroundJobs.columns.jobName"), dataIndex: "JobName", key: "JobName" },
20411
+ {
20412
+ title: t("backgroundJobs.columns.succeededAt"),
20413
+ dataIndex: "SucceededAt",
20414
+ key: "SucceededAt",
20415
+ render: (date) => date ? new Date(date).toLocaleString() : "-"
20416
+ },
20417
+ { title: t("backgroundJobs.columns.duration"), dataIndex: "TotalDuration", key: "TotalDuration" }
20418
+ ];
20419
+ const failedColumns = [
20420
+ {
20421
+ title: t("backgroundJobs.columns.jobId"),
20422
+ dataIndex: "JobId",
20423
+ key: "JobId",
20424
+ render: (text) => /* @__PURE__ */ import_react19.default.createElement("a", { onClick: () => showDetails(text) }, text)
20425
+ },
20426
+ { title: t("backgroundJobs.columns.jobName"), dataIndex: "JobName", key: "JobName" },
20427
+ {
20428
+ title: t("backgroundJobs.columns.failedAt"),
20429
+ dataIndex: "FailedAt",
20430
+ key: "FailedAt",
20431
+ render: (date) => date ? new Date(date).toLocaleString() : "-"
20432
+ },
20433
+ {
20434
+ title: t("backgroundJobs.columns.exception"),
20435
+ dataIndex: "ExceptionMessage",
20436
+ key: "ExceptionMessage",
20437
+ render: (msg) => /* @__PURE__ */ import_react19.default.createElement(import_antd15.Tooltip, { title: msg }, /* @__PURE__ */ import_react19.default.createElement("span", null, msg?.substring(0, 50), msg && msg.length > 50 ? "..." : ""))
20438
+ }
20439
+ ];
20440
+ const processingColumns = [
20441
+ {
20442
+ title: t("backgroundJobs.columns.jobId"),
20443
+ dataIndex: "JobId",
20444
+ key: "JobId",
20445
+ render: (text) => /* @__PURE__ */ import_react19.default.createElement("a", { onClick: () => showDetails(text) }, text)
20446
+ },
20447
+ { title: t("backgroundJobs.columns.jobName"), dataIndex: "JobName", key: "JobName" },
20448
+ {
20449
+ title: t("backgroundJobs.columns.startedAt"),
20450
+ dataIndex: "StartedAt",
20451
+ key: "StartedAt",
20452
+ render: (date) => date ? new Date(date).toLocaleString() : "-"
20453
+ },
20454
+ { title: t("backgroundJobs.columns.serverId"), dataIndex: "ServerId", key: "ServerId" }
20455
+ ];
20456
+ const items = [
20457
+ {
20458
+ key: "recurring",
20459
+ label: `${t("backgroundJobs.tabs.recurring")} (${recurringJobs.length})`,
20460
+ children: /* @__PURE__ */ import_react19.default.createElement(
20461
+ import_antd15.Table,
20462
+ {
20463
+ dataSource: recurringJobs,
20464
+ columns: recurringColumns,
20465
+ rowKey: "Id",
20466
+ loading,
20467
+ pagination: false
20468
+ }
20469
+ )
20470
+ },
20471
+ {
20472
+ key: "succeeded",
20473
+ label: /* @__PURE__ */ import_react19.default.createElement("span", null, /* @__PURE__ */ import_react19.default.createElement(import_icons6.CheckCircleOutlined, { style: { color: "#52c41a" } }), " ", t("backgroundJobs.tabs.succeeded"), " (", succeededResult?.Total || 0, ")"),
20474
+ children: /* @__PURE__ */ import_react19.default.createElement(
20475
+ import_antd15.Table,
20476
+ {
20477
+ dataSource: succeededResult?.Jobs || [],
20478
+ columns: succeededColumns,
20479
+ rowKey: "JobId",
20480
+ loading,
20481
+ pagination: { pageSize: 10 }
20482
+ }
20483
+ )
20484
+ },
20485
+ {
20486
+ key: "failed",
20487
+ label: /* @__PURE__ */ import_react19.default.createElement("span", null, /* @__PURE__ */ import_react19.default.createElement(import_icons6.CloseCircleOutlined, { style: { color: "#ff4d4f" } }), " ", t("backgroundJobs.tabs.failed"), " (", failedResult?.Total || 0, ")"),
20488
+ children: /* @__PURE__ */ import_react19.default.createElement(
20489
+ import_antd15.Table,
20490
+ {
20491
+ dataSource: failedResult?.Jobs || [],
20492
+ columns: failedColumns,
20493
+ rowKey: "JobId",
20494
+ loading,
20495
+ pagination: { pageSize: 10 }
20496
+ }
20497
+ )
20498
+ },
20499
+ {
20500
+ key: "processing",
20501
+ label: /* @__PURE__ */ import_react19.default.createElement("span", null, /* @__PURE__ */ import_react19.default.createElement(import_icons6.SyncOutlined, { spin: true, style: { color: "#1890ff" } }), " ", t("backgroundJobs.tabs.processing"), " (", processingResult?.Total || 0, ")"),
20502
+ children: /* @__PURE__ */ import_react19.default.createElement(
20503
+ import_antd15.Table,
20504
+ {
20505
+ dataSource: processingResult?.Jobs || [],
20506
+ columns: processingColumns,
20507
+ rowKey: "JobId",
20508
+ loading,
20509
+ pagination: false
20510
+ }
20511
+ )
20512
+ }
20513
+ ];
20514
+ return /* @__PURE__ */ import_react19.default.createElement(
20515
+ import_antd14.List,
20516
+ {
20517
+ title: title || t("backgroundJobs.title"),
20518
+ headerButtons: /* @__PURE__ */ import_react19.default.createElement(import_antd15.Button, { icon: /* @__PURE__ */ import_react19.default.createElement(import_icons6.ReloadOutlined, null), onClick: handleRefresh, loading }, t("buttons.refresh"))
20519
+ },
20520
+ /* @__PURE__ */ import_react19.default.createElement(import_antd15.Row, { gutter: 16, style: { marginBottom: 16 } }, /* @__PURE__ */ import_react19.default.createElement(import_antd15.Col, { span: 6 }, /* @__PURE__ */ import_react19.default.createElement(import_antd15.Card, null, /* @__PURE__ */ import_react19.default.createElement(
20521
+ import_antd15.Statistic,
20522
+ {
20523
+ title: t("backgroundJobs.tabs.recurring"),
20524
+ value: recurringJobs.length,
20525
+ prefix: /* @__PURE__ */ import_react19.default.createElement(import_icons6.ClockCircleOutlined, null)
20526
+ }
20527
+ ))), /* @__PURE__ */ import_react19.default.createElement(import_antd15.Col, { span: 6 }, /* @__PURE__ */ import_react19.default.createElement(import_antd15.Card, null, /* @__PURE__ */ import_react19.default.createElement(
20528
+ import_antd15.Statistic,
20529
+ {
20530
+ title: t("backgroundJobs.tabs.succeeded"),
20531
+ value: succeededResult?.Total || 0,
20532
+ valueStyle: { color: "#3f8600" },
20533
+ prefix: /* @__PURE__ */ import_react19.default.createElement(import_icons6.CheckCircleOutlined, null)
20534
+ }
20535
+ ))), /* @__PURE__ */ import_react19.default.createElement(import_antd15.Col, { span: 6 }, /* @__PURE__ */ import_react19.default.createElement(import_antd15.Card, null, /* @__PURE__ */ import_react19.default.createElement(
20536
+ import_antd15.Statistic,
20537
+ {
20538
+ title: t("backgroundJobs.tabs.failed"),
20539
+ value: failedResult?.Total || 0,
20540
+ valueStyle: { color: "#cf1322" },
20541
+ prefix: /* @__PURE__ */ import_react19.default.createElement(import_icons6.CloseCircleOutlined, null)
20542
+ }
20543
+ ))), /* @__PURE__ */ import_react19.default.createElement(import_antd15.Col, { span: 6 }, /* @__PURE__ */ import_react19.default.createElement(import_antd15.Card, null, /* @__PURE__ */ import_react19.default.createElement(
20544
+ import_antd15.Statistic,
20545
+ {
20546
+ title: t("backgroundJobs.tabs.processing"),
20547
+ value: processingResult?.Total || 0,
20548
+ valueStyle: { color: "#1890ff" },
20549
+ prefix: /* @__PURE__ */ import_react19.default.createElement(import_icons6.SyncOutlined, null)
20550
+ }
20551
+ )))),
20552
+ /* @__PURE__ */ import_react19.default.createElement(import_antd15.Tabs, { activeKey: activeTab, onChange: setActiveTab, items }),
20553
+ /* @__PURE__ */ import_react19.default.createElement(
20554
+ import_antd15.Drawer,
20555
+ {
20556
+ title: t("backgroundJobs.drawer.title"),
20557
+ placement: "right",
20558
+ onClose: closeDrawer,
20559
+ open: drawerVisible,
20560
+ width: 600
20561
+ },
20562
+ detailLoading ? /* @__PURE__ */ import_react19.default.createElement(import_antd15.Skeleton, { active: true }) : jobDetails ? /* @__PURE__ */ import_react19.default.createElement(import_react19.default.Fragment, null, /* @__PURE__ */ import_react19.default.createElement(import_antd15.Descriptions, { column: 1, bordered: true, size: "small" }, /* @__PURE__ */ import_react19.default.createElement(import_antd15.Descriptions.Item, { label: t("backgroundJobs.drawer.jobName") }, jobDetails.JobName), /* @__PURE__ */ import_react19.default.createElement(import_antd15.Descriptions.Item, { label: t("backgroundJobs.drawer.createdAt") }, jobDetails.CreatedAt ? new Date(jobDetails.CreatedAt).toLocaleString() : "-")), /* @__PURE__ */ import_react19.default.createElement("div", { style: { marginTop: 24 } }, /* @__PURE__ */ import_react19.default.createElement("h3", null, t("backgroundJobs.drawer.history")), /* @__PURE__ */ import_react19.default.createElement(import_antd15.Timeline, { mode: "left" }, jobDetails.History.map((h, i) => /* @__PURE__ */ import_react19.default.createElement(import_antd15.Timeline.Item, { key: i, color: h.StateName === "Succeeded" ? "green" : h.StateName === "Failed" ? "red" : "blue" }, /* @__PURE__ */ import_react19.default.createElement("p", null, /* @__PURE__ */ import_react19.default.createElement("strong", null, h.StateName), " - ", new Date(h.CreatedAt).toLocaleString()), h.Reason && /* @__PURE__ */ import_react19.default.createElement("p", null, t("backgroundJobs.drawer.reason"), ": ", h.Reason), h.Data && Object.keys(h.Data).length > 0 && /* @__PURE__ */ import_react19.default.createElement("div", { style: { background: "#f5f5f5", padding: 8, borderRadius: 4, overflowX: "auto", marginTop: 8 } }, /* @__PURE__ */ import_react19.default.createElement("pre", { style: { margin: 0, fontSize: 12 } }, JSON.stringify(h.Data, null, 2)))))))) : /* @__PURE__ */ import_react19.default.createElement("div", null, t("backgroundJobs.drawer.noData"))
20563
+ )
20564
+ );
20565
+ };
20008
20566
  // Annotate the CommonJS export names for ESM import in node:
20009
20567
  0 && (module.exports = {
20010
20568
  ApplicationUserCreate,
20011
20569
  ApplicationUserEdit,
20012
20570
  ApplicationUserList,
20013
20571
  AuthCallback,
20572
+ BackgroundJobList,
20014
20573
  Base64Upload,
20015
20574
  ColorModeContext,
20016
20575
  ColorModeContextProvider,
20576
+ DrawioEditor,
20017
20577
  Header,
20018
20578
  HttpError,
20019
20579
  KeycloakLoginPage,