openxiangda 1.0.59 → 1.0.61

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openxiangda",
3
- "version": "1.0.59",
3
+ "version": "1.0.61",
4
4
  "description": "OpenXiangda CLI, workspace build tools, runtime SDK, and form components.",
5
5
  "private": false,
6
6
  "bin": {
@@ -1,17 +1,35 @@
1
1
  import { useParams } from "react-router-dom";
2
2
  import { DataManagementList } from "openxiangda";
3
+ import {
4
+ defaultPageOverrides,
5
+ resolveDefaultPageOverride,
6
+ } from "@/runtime/default-page-overrides";
3
7
 
4
8
  export function DataRoutePage() {
5
9
  const { appType = "", formUuid = "" } = useParams();
10
+ const Override = resolveDefaultPageOverride(defaultPageOverrides, "data-manage-list", formUuid);
11
+ const defaultNode = (
12
+ <DataManagementList
13
+ appType={appType}
14
+ detailBasePath={`/view/${appType}/admin/forms/${formUuid}`}
15
+ formUuid={formUuid}
16
+ fullHeight={false}
17
+ title="数据列表"
18
+ />
19
+ );
20
+
6
21
  return (
7
22
  <div className="ox-panel overflow-hidden">
8
- <DataManagementList
9
- appType={appType}
10
- detailBasePath={`/view/${appType}/admin/forms/${formUuid}`}
11
- formUuid={formUuid}
12
- fullHeight={false}
13
- title="数据列表"
14
- />
23
+ {Override ? (
24
+ <Override
25
+ appType={appType}
26
+ defaultNode={defaultNode}
27
+ formUuid={formUuid}
28
+ kind="data-manage-list"
29
+ />
30
+ ) : (
31
+ defaultNode
32
+ )}
15
33
  </div>
16
34
  );
17
35
  }
@@ -1,14 +1,29 @@
1
+ import {
2
+ defaultPageOverrides,
3
+ resolveDefaultPageOverride,
4
+ } from "@/runtime/default-page-overrides";
5
+
1
6
  export function FilePreviewRoutePage() {
2
7
  const ticket = new URLSearchParams(window.location.search).get("ticket") || "";
8
+ const appType = process.env.OPENXIANGDA_APP_TYPE || process.env.APP_TYPE || "";
9
+ const Override = resolveDefaultPageOverride(defaultPageOverrides, "file-preview");
10
+ const defaultNode = (
11
+ <section className="ox-panel mx-auto max-w-4xl p-6">
12
+ <h1 className="text-lg font-semibold text-slate-950">文件预览</h1>
13
+ <p className="mt-2 text-sm text-slate-500">ticket: {ticket || "未提供"}</p>
14
+ <div className="mt-6 rounded-md border border-dashed border-slate-300 bg-slate-50 p-8 text-center text-sm text-slate-500">
15
+ 文件预览组件将在平台文件元数据接口稳定后接入。
16
+ </div>
17
+ </section>
18
+ );
19
+
3
20
  return (
4
21
  <main className="min-h-screen bg-[#f6f7f9] p-5">
5
- <section className="ox-panel mx-auto max-w-4xl p-6">
6
- <h1 className="text-lg font-semibold text-slate-950">文件预览</h1>
7
- <p className="mt-2 text-sm text-slate-500">ticket: {ticket || "未提供"}</p>
8
- <div className="mt-6 rounded-md border border-dashed border-slate-300 bg-slate-50 p-8 text-center text-sm text-slate-500">
9
- 文件预览组件将在平台文件元数据接口稳定后接入。
10
- </div>
11
- </section>
22
+ {Override ? (
23
+ <Override appType={appType} defaultNode={defaultNode} kind="file-preview" />
24
+ ) : (
25
+ defaultNode
26
+ )}
12
27
  </main>
13
28
  );
14
29
  }
@@ -3,6 +3,11 @@ import { useNavigate, useParams } from "react-router-dom";
3
3
  import { StandardFormPage } from "openxiangda";
4
4
  import { normalizeRuntimeFormSchema } from "openxiangda/runtime";
5
5
  import { useOpenXiangda } from "openxiangda/runtime/react";
6
+ import {
7
+ defaultPageOverrides,
8
+ resolveDefaultPageOverride,
9
+ type DefaultPageKind,
10
+ } from "@/runtime/default-page-overrides";
6
11
 
7
12
  type Mode = "submit" | "detail" | "process";
8
13
 
@@ -45,24 +50,49 @@ export function FormRoutePage({ mode }: { mode: Mode }) {
45
50
 
46
51
  const formType = String(schema?.template?.formType || schema?.formMeta?.formType || "").toLowerCase();
47
52
  const isProcessForm = mode === "process" || formType === "process" || formType === "flow";
48
- const pageMode = isProcessForm ? "process" : mode === "detail" ? "detail" : "submit";
53
+ const pageMode = mode === "process" ? "process" : mode === "detail" ? "detail" : "submit";
54
+ const overrideKind: DefaultPageKind =
55
+ pageMode === "process"
56
+ ? "process-detail"
57
+ : pageMode === "detail"
58
+ ? isProcessForm
59
+ ? "process-detail"
60
+ : "form-detail"
61
+ : isProcessForm
62
+ ? "process-submit"
63
+ : "form-submit";
64
+ const Override = resolveDefaultPageOverride(defaultPageOverrides, overrideKind, formUuid);
65
+ const defaultNode = (
66
+ <StandardFormPage
67
+ appType={appType}
68
+ formInstanceId={formInstId}
69
+ formUuid={formUuid}
70
+ mode={pageMode}
71
+ onSubmitSuccess={id =>
72
+ navigate(
73
+ isProcessForm
74
+ ? `/view/${appType}/admin/process/${formUuid}/${id}`
75
+ : `/view/${appType}/admin/forms/${formUuid}/${id}`,
76
+ )
77
+ }
78
+ schema={schema}
79
+ />
80
+ );
49
81
 
50
82
  return (
51
83
  <div className="ox-panel p-5">
52
- <StandardFormPage
53
- appType={appType}
54
- formInstanceId={formInstId}
55
- formUuid={formUuid}
56
- mode={pageMode}
57
- onSubmitSuccess={id =>
58
- navigate(
59
- isProcessForm
60
- ? `/view/${appType}/admin/process/${formUuid}/${id}`
61
- : `/view/${appType}/admin/forms/${formUuid}/${id}`,
62
- )
63
- }
64
- schema={schema}
65
- />
84
+ {Override ? (
85
+ <Override
86
+ appType={appType}
87
+ defaultNode={defaultNode}
88
+ formInstId={formInstId}
89
+ formUuid={formUuid}
90
+ kind={overrideKind}
91
+ schema={schema}
92
+ />
93
+ ) : (
94
+ defaultNode
95
+ )}
66
96
  </div>
67
97
  );
68
98
  }
@@ -0,0 +1,35 @@
1
+ import type { ComponentType, ReactNode } from "react";
2
+
3
+ export type DefaultPageKind =
4
+ | "form-submit"
5
+ | "process-submit"
6
+ | "form-detail"
7
+ | "process-detail"
8
+ | "data-manage-list"
9
+ | "file-preview";
10
+
11
+ export interface DefaultPageOverrideProps {
12
+ kind: DefaultPageKind;
13
+ appType: string;
14
+ formUuid?: string;
15
+ formInstId?: string;
16
+ schema?: any;
17
+ defaultNode: ReactNode;
18
+ }
19
+
20
+ export type DefaultPageOverrideComponent = ComponentType<DefaultPageOverrideProps>;
21
+
22
+ export type DefaultPageOverrides = Partial<
23
+ Record<DefaultPageKind, Record<string, DefaultPageOverrideComponent | undefined>>
24
+ >;
25
+
26
+ export const defaultPageOverrides: DefaultPageOverrides = {};
27
+
28
+ export function resolveDefaultPageOverride(
29
+ overrides: DefaultPageOverrides,
30
+ kind: DefaultPageKind,
31
+ formUuid?: string,
32
+ ) {
33
+ const byKind = overrides[kind] || {};
34
+ return (formUuid && byKind[formUuid]) || byKind["*"];
35
+ }