完成50%
This commit is contained in:
@@ -0,0 +1,398 @@
|
||||
// 本文件是 52 个活动页面导航语义的唯一运行时所有者。页面只能使用路由键,
|
||||
// 不得自行复制路径、父页、允许来源、参数或流程结果规则。
|
||||
const defineRoute = (route) =>
|
||||
Object.freeze({
|
||||
...route,
|
||||
parentParamMap: Object.freeze(route.parentParamMap || {}),
|
||||
requiredParams: Object.freeze(route.requiredParams || []),
|
||||
optionalParams: Object.freeze(route.optionalParams || []),
|
||||
allowedSources: Object.freeze(route.allowedSources || []),
|
||||
resultOperations: Object.freeze(route.resultOperations || []),
|
||||
});
|
||||
|
||||
const defineNoticeTarget = (routeKey, params) =>
|
||||
Object.freeze({ routeKey, params: Object.freeze(params) });
|
||||
|
||||
export const NOTICE_TARGETS = Object.freeze({
|
||||
GENEALOGY_REVIEW: defineNoticeTarget("G10", ["genealogyId"]),
|
||||
GENEALOGY_HOME: defineNoticeTarget("G01", ["genealogyId"]),
|
||||
});
|
||||
|
||||
export const ROUTES = Object.freeze({
|
||||
A01: defineRoute({
|
||||
path: "/pages/auth/a01-entry",
|
||||
kind: "auth-root",
|
||||
parent: null,
|
||||
resultOperations: ["password-reset"],
|
||||
}),
|
||||
A04: defineRoute({
|
||||
path: "/pages/auth/a04-register",
|
||||
kind: "page",
|
||||
parent: "A01",
|
||||
allowedSources: ["A01"],
|
||||
}),
|
||||
A05: defineRoute({
|
||||
path: "/pages/auth/a05-reset-password",
|
||||
kind: "page",
|
||||
parent: "A01",
|
||||
allowedSources: ["A01"],
|
||||
}),
|
||||
G01: defineRoute({
|
||||
path: "/pages/genealogy/g01-my-genealogies",
|
||||
kind: "root",
|
||||
parent: null,
|
||||
optionalParams: ["genealogyId"],
|
||||
}),
|
||||
G03: defineRoute({
|
||||
path: "/pages/genealogy/g03-create-genealogy",
|
||||
kind: "flow",
|
||||
parent: "G01",
|
||||
allowedSources: ["G01"],
|
||||
}),
|
||||
G05: defineRoute({
|
||||
path: "/pages/genealogy/g05-genealogy-overview",
|
||||
kind: "page",
|
||||
parent: "G01",
|
||||
requiredParams: ["genealogyId"],
|
||||
allowedSources: ["G01", "G03", "G06", "G09"],
|
||||
}),
|
||||
G06: defineRoute({
|
||||
path: "/pages/genealogy/g06-search-genealogies",
|
||||
kind: "page",
|
||||
parent: "G01",
|
||||
optionalParams: ["mode"],
|
||||
allowedSources: ["G01", "G03", "G09"],
|
||||
}),
|
||||
G08: defineRoute({
|
||||
path: "/pages/genealogy/g08-join-application",
|
||||
kind: "flow",
|
||||
parent: "G06",
|
||||
requiredParams: ["genealogyId"],
|
||||
optionalParams: ["source"],
|
||||
allowedSources: ["G01", "G05", "G06", "G09"],
|
||||
}),
|
||||
G09: defineRoute({
|
||||
path: "/pages/genealogy/g09-my-applications",
|
||||
kind: "page",
|
||||
parent: "G01",
|
||||
optionalParams: ["status"],
|
||||
allowedSources: ["G01", "G05", "G06", "G08"],
|
||||
}),
|
||||
G10: defineRoute({
|
||||
path: "/pages/genealogy/g10-application-review",
|
||||
kind: "page",
|
||||
parent: "G01",
|
||||
requiredParams: ["genealogyId"],
|
||||
allowedSources: ["G01", "G05", "N01", "N02"],
|
||||
}),
|
||||
G11: defineRoute({
|
||||
path: "/pages/genealogy/g11-genealogy-settings",
|
||||
kind: "flow",
|
||||
parent: "G05",
|
||||
requiredParams: ["genealogyId"],
|
||||
allowedSources: ["G05"],
|
||||
}),
|
||||
G12: defineRoute({
|
||||
path: "/pages/genealogy/g12-generation-poems",
|
||||
kind: "flow",
|
||||
parent: "G05",
|
||||
requiredParams: ["genealogyId"],
|
||||
allowedSources: ["G01", "G05"],
|
||||
}),
|
||||
T01: defineRoute({
|
||||
path: "/pages/tree/t01-tree-overview",
|
||||
kind: "page",
|
||||
parent: "G05",
|
||||
requiredParams: ["genealogyId"],
|
||||
optionalParams: ["selectedId"],
|
||||
allowedSources: ["G01", "G05", "T04", "T06", "T07"],
|
||||
}),
|
||||
T03: defineRoute({
|
||||
path: "/pages/tree/t03-member-profile",
|
||||
kind: "single",
|
||||
parent: "T01",
|
||||
parentParamMap: { selectedId: "personId" },
|
||||
requiredParams: ["genealogyId", "personId"],
|
||||
allowedSources: ["T01", "T07", "R02"],
|
||||
resultOperations: ["member-open-requested"],
|
||||
}),
|
||||
T04: defineRoute({
|
||||
path: "/pages/tree/t04-add-relative",
|
||||
kind: "flow",
|
||||
parent: "T01",
|
||||
parentParamMap: { selectedId: "personId" },
|
||||
requiredParams: ["genealogyId"],
|
||||
optionalParams: ["personId", "mode"],
|
||||
allowedSources: ["T01"],
|
||||
}),
|
||||
T05: defineRoute({
|
||||
path: "/pages/tree/t05-edit-member",
|
||||
kind: "flow",
|
||||
parent: "T03",
|
||||
requiredParams: ["genealogyId", "personId"],
|
||||
allowedSources: ["T03"],
|
||||
}),
|
||||
T06: defineRoute({
|
||||
path: "/pages/tree/t06-edit-relationship",
|
||||
kind: "flow",
|
||||
parent: "T01",
|
||||
parentParamMap: { selectedId: "personId" },
|
||||
requiredParams: ["genealogyId", "personId"],
|
||||
allowedSources: ["T01"],
|
||||
}),
|
||||
T07: defineRoute({
|
||||
path: "/pages/tree/t07-member-directory",
|
||||
kind: "page",
|
||||
parent: "T01",
|
||||
requiredParams: ["genealogyId"],
|
||||
allowedSources: ["T01"],
|
||||
}),
|
||||
T08: defineRoute({
|
||||
path: "/pages/tree/t08-member-states",
|
||||
kind: "page",
|
||||
parent: "T03",
|
||||
requiredParams: ["genealogyId", "personId"],
|
||||
allowedSources: ["T03"],
|
||||
}),
|
||||
F01: defineRoute({
|
||||
path: "/pages/family/f01-family-feed",
|
||||
kind: "root",
|
||||
parent: null,
|
||||
optionalParams: ["genealogyId"],
|
||||
}),
|
||||
F02: defineRoute({
|
||||
path: "/pages/family/f02-publish-feed",
|
||||
kind: "flow",
|
||||
parent: "F01",
|
||||
requiredParams: ["genealogyId"],
|
||||
allowedSources: ["F01"],
|
||||
}),
|
||||
F03: defineRoute({
|
||||
path: "/pages/family/f03-feed-detail",
|
||||
kind: "page",
|
||||
parent: "F01",
|
||||
requiredParams: ["genealogyId", "feedId"],
|
||||
allowedSources: ["F01"],
|
||||
}),
|
||||
F04: defineRoute({
|
||||
path: "/pages/family/f04-article-list",
|
||||
kind: "page",
|
||||
parent: "F01",
|
||||
requiredParams: ["genealogyId"],
|
||||
allowedSources: ["F01"],
|
||||
}),
|
||||
F05: defineRoute({
|
||||
path: "/pages/family/f05-article-detail",
|
||||
kind: "page",
|
||||
parent: "F04",
|
||||
requiredParams: ["genealogyId", "articleId"],
|
||||
allowedSources: ["F04"],
|
||||
}),
|
||||
F06: defineRoute({
|
||||
path: "/pages/family/f06-article-editor",
|
||||
kind: "flow",
|
||||
parent: "F04",
|
||||
requiredParams: ["genealogyId", "mode"],
|
||||
optionalParams: ["articleId"],
|
||||
allowedSources: ["F04", "F05"],
|
||||
}),
|
||||
F07: defineRoute({
|
||||
path: "/pages/family/f07-album-list",
|
||||
kind: "page",
|
||||
parent: "F01",
|
||||
requiredParams: ["genealogyId"],
|
||||
allowedSources: ["F01"],
|
||||
}),
|
||||
F08: defineRoute({
|
||||
path: "/pages/family/f08-album-detail",
|
||||
kind: "page",
|
||||
parent: "F07",
|
||||
requiredParams: ["genealogyId", "albumId"],
|
||||
allowedSources: ["F07"],
|
||||
}),
|
||||
F09: defineRoute({
|
||||
path: "/pages/family/f09-media-upload",
|
||||
kind: "flow",
|
||||
parent: "F08",
|
||||
requiredParams: ["genealogyId", "albumId"],
|
||||
allowedSources: ["F08"],
|
||||
}),
|
||||
F10: defineRoute({
|
||||
path: "/pages/family/f10-video-list",
|
||||
kind: "page",
|
||||
parent: "F01",
|
||||
requiredParams: ["genealogyId"],
|
||||
allowedSources: ["F01"],
|
||||
}),
|
||||
R01: defineRoute({
|
||||
path: "/pages/records/r01-people-list",
|
||||
kind: "page",
|
||||
parent: "F01",
|
||||
requiredParams: ["genealogyId"],
|
||||
allowedSources: ["F01"],
|
||||
}),
|
||||
R02: defineRoute({
|
||||
path: "/pages/records/r02-person-detail",
|
||||
kind: "flow",
|
||||
parent: "R01",
|
||||
requiredParams: ["genealogyId", "mode"],
|
||||
optionalParams: ["personId"],
|
||||
allowedSources: ["R01"],
|
||||
}),
|
||||
R03: defineRoute({
|
||||
path: "/pages/records/r03-gift-list",
|
||||
kind: "page",
|
||||
parent: "F01",
|
||||
requiredParams: ["genealogyId"],
|
||||
allowedSources: ["F01"],
|
||||
}),
|
||||
R04: defineRoute({
|
||||
path: "/pages/records/r04-gift-editor",
|
||||
kind: "flow",
|
||||
parent: "R03",
|
||||
requiredParams: ["genealogyId", "mode"],
|
||||
optionalParams: ["relativeId"],
|
||||
allowedSources: ["R03"],
|
||||
}),
|
||||
R05: defineRoute({
|
||||
path: "/pages/records/r05-ritual-list",
|
||||
kind: "page",
|
||||
parent: "F01",
|
||||
requiredParams: ["genealogyId"],
|
||||
allowedSources: ["F01"],
|
||||
}),
|
||||
R06: defineRoute({
|
||||
path: "/pages/records/r06-ritual-detail",
|
||||
kind: "page",
|
||||
parent: "R05",
|
||||
requiredParams: ["genealogyId", "ceremonyId"],
|
||||
allowedSources: ["R05"],
|
||||
}),
|
||||
R07: defineRoute({
|
||||
path: "/pages/records/r07-ritual-editor",
|
||||
kind: "flow",
|
||||
parent: "R05",
|
||||
requiredParams: ["genealogyId", "mode"],
|
||||
optionalParams: ["ceremonyId"],
|
||||
allowedSources: ["R05", "R06"],
|
||||
}),
|
||||
R08: defineRoute({
|
||||
path: "/pages/records/r08-growth-journal",
|
||||
kind: "page",
|
||||
parent: "R02",
|
||||
requiredParams: ["genealogyId", "personId"],
|
||||
allowedSources: ["R02", "T03"],
|
||||
}),
|
||||
R09: defineRoute({
|
||||
path: "/pages/records/r09-life-events",
|
||||
kind: "page",
|
||||
parent: "R02",
|
||||
requiredParams: ["genealogyId", "personId"],
|
||||
allowedSources: ["R02", "T03"],
|
||||
}),
|
||||
R10: defineRoute({
|
||||
path: "/pages/records/r10-memo-list",
|
||||
kind: "page",
|
||||
parent: "F01",
|
||||
requiredParams: ["genealogyId"],
|
||||
allowedSources: ["F01"],
|
||||
}),
|
||||
R11: defineRoute({
|
||||
path: "/pages/records/r11-merit-records",
|
||||
kind: "page",
|
||||
parent: "F01",
|
||||
requiredParams: ["genealogyId"],
|
||||
allowedSources: ["F01"],
|
||||
}),
|
||||
N01: defineRoute({
|
||||
path: "/pages/notification/n01-message-center",
|
||||
kind: "page",
|
||||
parent: "G01",
|
||||
optionalParams: ["genealogyId"],
|
||||
allowedSources: ["G01", "M01"],
|
||||
}),
|
||||
N02: defineRoute({
|
||||
path: "/pages/notification/n02-message-detail",
|
||||
kind: "page",
|
||||
parent: "N01",
|
||||
requiredParams: ["id"],
|
||||
allowedSources: ["N01"],
|
||||
}),
|
||||
M01: defineRoute({
|
||||
path: "/pages/profile/m01-profile-home",
|
||||
kind: "root",
|
||||
parent: null,
|
||||
}),
|
||||
M02: defineRoute({
|
||||
path: "/pages/profile/m02-edit-profile",
|
||||
kind: "flow",
|
||||
parent: "M01",
|
||||
allowedSources: ["M01"],
|
||||
}),
|
||||
M03: defineRoute({
|
||||
path: "/pages/profile/m03-security-settings",
|
||||
kind: "page",
|
||||
parent: "M01",
|
||||
allowedSources: ["M01"],
|
||||
}),
|
||||
M04: defineRoute({
|
||||
path: "/pages/profile/m04-change-password",
|
||||
kind: "flow",
|
||||
parent: "M03",
|
||||
allowedSources: ["M03"],
|
||||
}),
|
||||
M05: defineRoute({
|
||||
path: "/pages/profile/m05-change-phone",
|
||||
kind: "flow",
|
||||
parent: "M03",
|
||||
allowedSources: ["M03"],
|
||||
}),
|
||||
M06: defineRoute({
|
||||
path: "/pages/profile/m06-help-center",
|
||||
kind: "page",
|
||||
parent: "M01",
|
||||
allowedSources: ["M01"],
|
||||
}),
|
||||
M07: defineRoute({
|
||||
path: "/pages/profile/m07-feedback",
|
||||
kind: "flow",
|
||||
parent: "M06",
|
||||
allowedSources: ["M06"],
|
||||
}),
|
||||
M08: defineRoute({
|
||||
path: "/pages/profile/m08-promotion",
|
||||
kind: "page",
|
||||
parent: "M01",
|
||||
allowedSources: ["M01"],
|
||||
}),
|
||||
M09: defineRoute({
|
||||
path: "/pages/profile/m09-vip-orders",
|
||||
kind: "page",
|
||||
parent: "M01",
|
||||
allowedSources: ["M01"],
|
||||
}),
|
||||
M10: defineRoute({
|
||||
path: "/pages/profile/m10-about-settings",
|
||||
kind: "page",
|
||||
parent: "M01",
|
||||
allowedSources: ["M01"],
|
||||
}),
|
||||
});
|
||||
|
||||
export const ROOT_ROUTE_KEYS = Object.freeze(["A01", "G01", "F01", "M01"]);
|
||||
|
||||
export const getRoute = (routeKey) =>
|
||||
typeof routeKey === "string" &&
|
||||
Object.prototype.hasOwnProperty.call(ROUTES, routeKey)
|
||||
? ROUTES[routeKey]
|
||||
: null;
|
||||
|
||||
export const getRouteKeyByPath = (path) => {
|
||||
if (typeof path !== "string") return null;
|
||||
const normalizedPath = `/${path.replace(/^\/+/, "")}`;
|
||||
return (
|
||||
Object.keys(ROUTES).find(
|
||||
(routeKey) => ROUTES[routeKey].path === normalizedPath,
|
||||
) || null
|
||||
);
|
||||
};
|
||||
Reference in New Issue
Block a user