@nocobase/client-v2 2.2.0-alpha.1 → 2.2.0-alpha.2
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/es/PluginSettingsManager.d.ts +33 -0
- package/es/RouteRepository.d.ts +21 -6
- package/es/components/category-tabs/SortableCategoryTabs.d.ts +55 -0
- package/es/components/category-tabs/index.d.ts +9 -0
- package/es/components/form/JsonTextArea.d.ts +2 -1
- package/es/components/form/TypedVariableInput.d.ts +22 -4
- package/es/components/form/VariableJsonTextArea.d.ts +19 -0
- package/es/components/form/filter/CollectionFilterItem.d.ts +11 -1
- package/es/components/form/filter/index.d.ts +2 -0
- package/es/components/form/index.d.ts +1 -0
- package/es/components/index.d.ts +2 -0
- package/es/flow/actions/afterSuccess.d.ts +8 -1
- package/es/flow/actions/index.d.ts +1 -1
- package/es/flow/admin-shell/admin-layout/AdminLayoutEntryGuard.d.ts +2 -0
- package/es/flow/admin-shell/admin-layout/AdminLayoutMenuFlowUtils.d.ts +2 -1
- package/es/flow/admin-shell/admin-layout/AdminLayoutMenuModels.d.ts +2 -0
- package/es/flow/admin-shell/admin-layout/AdminLayoutMenuUtils.d.ts +3 -2
- package/es/flow/admin-shell/admin-layout/AdminLayoutSlotModels.d.ts +5 -0
- package/es/flow/admin-shell/admin-layout/resolveAdminRouteRuntimeTarget.d.ts +6 -0
- package/es/flow/components/FieldAssignRulesEditor.d.ts +3 -1
- package/es/flow/components/FieldAssignValueInput.d.ts +2 -0
- package/es/flow/index.d.ts +1 -0
- package/es/flow/models/base/GridModel.d.ts +1 -1
- package/es/flow/models/blocks/filter-form/FilterFormBlockModel.d.ts +5 -0
- package/es/flow/models/blocks/form/FormBlockModel.d.ts +4 -0
- package/es/flow/models/blocks/form/submitHandler.d.ts +1 -1
- package/es/flow/models/blocks/form/value-runtime/rules.d.ts +21 -0
- package/es/flow/models/blocks/form/value-runtime/runtime.d.ts +21 -0
- package/es/flow/models/blocks/form/value-runtime/types.d.ts +2 -2
- package/es/flow/models/blocks/table/TableActionsColumnModel.d.ts +1 -0
- package/es/flow/models/blocks/table/TableBlockModel.d.ts +1 -0
- package/es/flow/models/blocks/table/dragSort/dragSortHooks.d.ts +1 -1
- package/es/flow/models/blocks/table/dragSort/dragSortSettings.d.ts +2 -1
- package/es/flow/models/blocks/table/dragSort/dragSortUtils.d.ts +6 -4
- package/es/flow/models/fields/AssociationFieldModel/RecordSelectFieldModel.d.ts +2 -0
- package/es/flow/models/fields/AssociationFieldModel/SubTableFieldModel/SubTableColumnModel.d.ts +6 -0
- package/es/flow/resolveViewParamsToViewList.d.ts +1 -1
- package/es/flow/utils/dataScopeRowSnapshot.d.ts +59 -0
- package/es/flow/utils/dateTimeDisplayProps.d.ts +49 -0
- package/es/flow/utils/formValueDeps.d.ts +32 -0
- package/es/flow-compat/FieldValidation.d.ts +2 -1
- package/es/index.d.ts +2 -1
- package/es/index.mjs +233 -137
- package/lib/index.js +234 -138
- package/package.json +7 -7
- package/src/PluginSettingsManager.ts +53 -0
- package/src/RouteRepository.ts +126 -24
- package/src/__tests__/PluginSettingsManager.test.ts +13 -0
- package/src/__tests__/RouteRepository.test.ts +216 -0
- package/src/__tests__/browserChecker.test.ts +61 -0
- package/src/__tests__/exports.test.ts +16 -0
- package/src/__tests__/nocobase-buildin-plugin-auth.test.tsx +199 -0
- package/src/__tests__/plugin-manager.test.tsx +44 -2
- package/src/__tests__/settings-center.test.tsx +40 -1
- package/src/collection-manager/field-configure.ts +1 -1
- package/src/collection-manager/interfaces/id.ts +1 -1
- package/src/collection-manager/interfaces/m2m.tsx +2 -2
- package/src/collection-manager/interfaces/m2o.tsx +2 -2
- package/src/collection-manager/interfaces/nanoid.ts +1 -1
- package/src/collection-manager/interfaces/o2m.tsx +2 -2
- package/src/collection-manager/interfaces/obo.tsx +2 -2
- package/src/collection-manager/interfaces/oho.tsx +2 -2
- package/src/collection-manager/interfaces/properties/index.ts +2 -2
- package/src/collection-manager/interfaces/uuid.ts +1 -1
- package/src/components/AppComponents.tsx +19 -3
- package/src/components/README.md +7 -1
- package/src/components/README.zh-CN.md +6 -1
- package/src/components/category-tabs/SortableCategoryTabs.tsx +210 -0
- package/src/components/category-tabs/index.ts +10 -0
- package/src/components/form/JsonTextArea.tsx +21 -11
- package/src/components/form/TypedVariableInput.tsx +416 -93
- package/src/components/form/VariableJsonTextArea.tsx +175 -0
- package/src/components/form/__tests__/JsonTextArea.test.tsx +43 -0
- package/src/components/form/__tests__/TypedVariableInput.test.tsx +266 -9
- package/src/components/form/__tests__/VariableJsonTextArea.test.tsx +86 -0
- package/src/components/form/filter/CollectionFilterItem.tsx +32 -7
- package/src/components/form/filter/__tests__/CollectionFilterItem.test.tsx +38 -0
- package/src/components/form/filter/index.ts +2 -0
- package/src/components/form/index.tsx +1 -0
- package/src/components/index.ts +2 -0
- package/src/flow/__tests__/FlowRoute.test.tsx +443 -5
- package/src/flow/__tests__/getKey.test.ts +7 -0
- package/src/flow/__tests__/resolveViewParamsToViewList.test.ts +34 -0
- package/src/flow/actions/__tests__/afterSuccess.test.ts +73 -0
- package/src/flow/actions/__tests__/dataScopeFilter.test.ts +58 -0
- package/src/flow/actions/__tests__/dataScopeFormValueClear.test.ts +1022 -0
- package/src/flow/actions/__tests__/fieldLinkageRules.scopeDepth.test.ts +150 -1
- package/src/flow/actions/__tests__/linkageAssignField.legacy.test.ts +135 -0
- package/src/flow/actions/__tests__/linkageRules.hiddenSync.restore.test.ts +19 -5
- package/src/flow/actions/__tests__/linkageRules.subFormSetFieldProps.test.ts +92 -0
- package/src/flow/actions/__tests__/openView.defineProps.route.test.tsx +104 -0
- package/src/flow/actions/__tests__/subFormFieldLinkageRules.inputArgs.test.ts +2 -2
- package/src/flow/actions/afterSuccess.tsx +142 -3
- package/src/flow/actions/customVariable.tsx +1 -2
- package/src/flow/actions/dataScopeFilter.ts +10 -0
- package/src/flow/actions/dateTimeFormat.tsx +42 -28
- package/src/flow/actions/index.ts +1 -1
- package/src/flow/actions/linkageRules.tsx +123 -35
- package/src/flow/actions/linkageRulesFormValueRefresh.ts +22 -130
- package/src/flow/actions/openView.tsx +38 -4
- package/src/flow/actions/runjs.tsx +2 -14
- package/src/flow/actions/validation.tsx +62 -30
- package/src/flow/admin-shell/BaseLayoutModel.tsx +25 -3
- package/src/flow/admin-shell/BaseLayoutRouteCoordinator.ts +5 -2
- package/src/flow/admin-shell/__tests__/AdminLayoutRouteCoordinator.test.ts +13 -0
- package/src/flow/admin-shell/admin-layout/AdminLayoutComponent.tsx +34 -10
- package/src/flow/admin-shell/admin-layout/AdminLayoutEntryGuard.test.tsx +310 -0
- package/src/flow/admin-shell/admin-layout/AdminLayoutEntryGuard.tsx +44 -8
- package/src/flow/admin-shell/admin-layout/AdminLayoutMenuFlowUtils.ts +5 -3
- package/src/flow/admin-shell/admin-layout/AdminLayoutMenuModels.tsx +61 -9
- package/src/flow/admin-shell/admin-layout/AdminLayoutMenuUtils.tsx +71 -8
- package/src/flow/admin-shell/admin-layout/AdminLayoutModel.tsx +1 -1
- package/src/flow/admin-shell/admin-layout/AdminLayoutSlotModels.tsx +23 -9
- package/src/flow/admin-shell/admin-layout/HelpLite.tsx +1 -3
- package/src/flow/admin-shell/admin-layout/__tests__/AdminLayoutComponent.test.tsx +188 -0
- package/src/flow/admin-shell/admin-layout/__tests__/AdminLayoutMenuModels.test.ts +99 -0
- package/src/flow/admin-shell/admin-layout/__tests__/AdminLayoutModel.test.tsx +82 -0
- package/src/flow/admin-shell/admin-layout/__tests__/TopbarActionsBar.test.tsx +166 -2
- package/src/flow/admin-shell/admin-layout/resolveAdminRouteRuntimeTarget.test.ts +20 -0
- package/src/flow/admin-shell/admin-layout/resolveAdminRouteRuntimeTarget.ts +33 -5
- package/src/flow/components/DefaultValue.tsx +1 -2
- package/src/flow/components/DynamicFlowsIcon.tsx +447 -126
- package/src/flow/components/FieldAssignRulesEditor.tsx +128 -21
- package/src/flow/components/FieldAssignValueInput.tsx +10 -5
- package/src/flow/components/FlowRoute.tsx +56 -11
- package/src/flow/components/__tests__/DynamicFlowsIcon.test.tsx +148 -2
- package/src/flow/components/__tests__/FieldAssignRulesEditor.test.tsx +508 -4
- package/src/flow/components/__tests__/fieldAssignOptions.test.ts +151 -3
- package/src/flow/components/code-editor/__tests__/useCodeRunner.test.tsx +2 -17
- package/src/flow/components/code-editor/hooks/useCodeRunner.ts +2 -14
- package/src/flow/components/code-editor/runjsDiagnostics.ts +8 -45
- package/src/flow/components/fieldAssignOptions.ts +155 -27
- package/src/flow/flows/editMarkdownFlow.tsx +1 -1
- package/src/flow/getViewDiffAndUpdateHidden.tsx +1 -0
- package/src/flow/index.ts +2 -1
- package/src/flow/internal/utils/operatorSchemaHelper.ts +15 -1
- package/src/flow/models/actions/JSActionModel.tsx +2 -7
- package/src/flow/models/actions/JSCollectionActionModel.tsx +2 -7
- package/src/flow/models/actions/JSItemActionModel.tsx +2 -7
- package/src/flow/models/actions/JSRecordActionModel.tsx +2 -7
- package/src/flow/models/base/ActionModel.tsx +12 -1
- package/src/flow/models/base/GridModel.tsx +38 -7
- package/src/flow/models/base/PageModel/PageModel.tsx +4 -1
- package/src/flow/models/base/PageModel/__tests__/PageModel.test.ts +28 -4
- package/src/flow/models/base/__tests__/ActionModel.test.ts +83 -0
- package/src/flow/models/base/__tests__/GridModel.dragSnapshotContainer.test.ts +239 -1
- package/src/flow/models/base/__tests__/transformRowsToSingleColumn.test.ts +48 -0
- package/src/flow/models/blocks/filter-form/FilterFormBlockModel.tsx +31 -3
- package/src/flow/models/blocks/filter-form/FilterFormJSActionModel.tsx +2 -7
- package/src/flow/models/blocks/filter-form/__tests__/defaultValues.wiring.test.ts +77 -0
- package/src/flow/models/blocks/filter-form/fields/FilterFormCustomFieldModel.tsx +1 -1
- package/src/flow/models/blocks/filter-manager/flow-actions/__tests__/customizeFilterRender.test.tsx +56 -1
- package/src/flow/models/blocks/form/EditFormModel.tsx +1 -0
- package/src/flow/models/blocks/form/FormActionModel.tsx +1 -1
- package/src/flow/models/blocks/form/FormBlockModel.tsx +7 -0
- package/src/flow/models/blocks/form/JSFormActionModel.tsx +2 -7
- package/src/flow/models/blocks/form/__tests__/FormBlockModel.test.tsx +17 -0
- package/src/flow/models/blocks/form/__tests__/submitHandler.test.ts +54 -1
- package/src/flow/models/blocks/form/submitHandler.ts +17 -3
- package/src/flow/models/blocks/form/value-runtime/__tests__/runtime.test.ts +880 -102
- package/src/flow/models/blocks/form/value-runtime/rules.ts +445 -13
- package/src/flow/models/blocks/form/value-runtime/runtime.ts +257 -13
- package/src/flow/models/blocks/form/value-runtime/types.ts +2 -2
- package/src/flow/models/blocks/js-block/JSBlock.tsx +2 -7
- package/src/flow/models/blocks/table/JSColumnModel.tsx +1 -9
- package/src/flow/models/blocks/table/TableActionsColumnModel.tsx +36 -13
- package/src/flow/models/blocks/table/TableBlockModel.tsx +38 -17
- package/src/flow/models/blocks/table/TableColumnModel.tsx +36 -3
- package/src/flow/models/blocks/table/__tests__/TableActionsColumnModel.test.tsx +111 -1
- package/src/flow/models/blocks/table/__tests__/TableBlockModel.dragSort.test.ts +127 -0
- package/src/flow/models/blocks/table/__tests__/TableBlockModel.mobileSettingsButtons.test.tsx +78 -0
- package/src/flow/models/blocks/table/__tests__/TableBlockModel.rowSelection.test.tsx +1 -0
- package/src/flow/models/blocks/table/__tests__/TableColumnModel.test.tsx +159 -1
- package/src/flow/models/blocks/table/dragSort/dragSortHooks.tsx +28 -17
- package/src/flow/models/blocks/table/dragSort/dragSortSettings.ts +13 -6
- package/src/flow/models/blocks/table/dragSort/dragSortUtils.ts +15 -2
- package/src/flow/models/fields/AssociationFieldModel/AssociationFieldModel.tsx +1 -1
- package/src/flow/models/fields/AssociationFieldModel/PopupSubTableFieldModel/PopupSubTableFieldModel.tsx +29 -6
- package/src/flow/models/fields/AssociationFieldModel/RecordSelectFieldModel.tsx +16 -4
- package/src/flow/models/fields/AssociationFieldModel/SubTableFieldModel/SubTableColumnModel.tsx +141 -19
- package/src/flow/models/fields/AssociationFieldModel/SubTableFieldModel/SubTableField.tsx +13 -1
- package/src/flow/models/fields/AssociationFieldModel/SubTableFieldModel/__tests__/SubTableColumnModel.rowRecord.test.ts +197 -0
- package/src/flow/models/fields/AssociationFieldModel/SubTableFieldModel/__tests__/SubTableFieldModel.reset.test.ts +180 -0
- package/src/flow/models/fields/AssociationFieldModel/SubTableFieldModel/index.tsx +6 -4
- package/src/flow/models/fields/AssociationFieldModel/__tests__/AssociationFieldModel.updateAssociation.test.ts +72 -0
- package/src/flow/models/fields/AssociationFieldModel/__tests__/RecordPickerFieldModel.itemContext.test.ts +23 -0
- package/src/flow/models/fields/ClickableFieldModel.tsx +5 -0
- package/src/flow/models/fields/DisplayDateTimeFieldModel.tsx +29 -1
- package/src/flow/models/fields/InputFieldModel.tsx +40 -2
- package/src/flow/models/fields/JSEditableFieldModel.tsx +2 -11
- package/src/flow/models/fields/JSFieldModel.tsx +2 -7
- package/src/flow/models/fields/JSItemModel.tsx +2 -14
- package/src/flow/models/fields/SelectFieldModel.tsx +6 -4
- package/src/flow/models/fields/TextareaFieldModel.tsx +49 -3
- package/src/flow/models/fields/__tests__/DisplayDateTimeFieldModel.test.tsx +96 -0
- package/src/flow/models/fields/__tests__/InputFieldModel.test.tsx +117 -1
- package/src/flow/models/fields/__tests__/SelectFieldModel.test.tsx +43 -0
- package/src/flow/models/fields/__tests__/TextareaFieldModel.test.tsx +100 -0
- package/src/flow/models/topbar/TopbarActionModel.tsx +93 -10
- package/src/flow/resolveViewParamsToViewList.tsx +11 -3
- package/src/flow/utils/__tests__/dateTimeFormat.test.ts +258 -0
- package/src/flow/utils/dataScopeFormValueClear.ts +218 -81
- package/src/flow/utils/dataScopeRowSnapshot.ts +616 -0
- package/src/flow/utils/dateTimeDisplayProps.ts +135 -0
- package/src/flow/utils/formValueDeps.ts +170 -0
- package/src/flow-compat/FieldValidation.tsx +122 -60
- package/src/flow-compat/Popover.tsx +43 -4
- package/src/flow-compat/__tests__/Popover.test.tsx +34 -0
- package/src/index.ts +8 -1
- package/src/layout-manager/__tests__/LayoutRoute.test.tsx +41 -1
- package/src/nocobase-buildin-plugin/index.tsx +44 -14
- package/src/settings-center/AdminSettingsLayout.tsx +10 -2
- package/src/settings-center/SystemSettingsPage.tsx +1 -2
- package/src/settings-center/plugin-manager/PluginCard.tsx +2 -2
- package/src/settings-center/plugin-manager/index.tsx +3 -0
- package/src/settings-center/utils.tsx +0 -6
|
@@ -28,6 +28,13 @@ export type CurrentUserState = {
|
|
|
28
28
|
loading: boolean;
|
|
29
29
|
};
|
|
30
30
|
|
|
31
|
+
type CurrentUserAuthStatus = 'unknown' | 'authenticated' | 'unauthenticated' | 'redirecting';
|
|
32
|
+
|
|
33
|
+
type CurrentUserInternalState = CurrentUserState & {
|
|
34
|
+
authStatus: CurrentUserAuthStatus;
|
|
35
|
+
error?: Error | null;
|
|
36
|
+
};
|
|
37
|
+
|
|
31
38
|
export type CurrentRoleOption = {
|
|
32
39
|
name: string;
|
|
33
40
|
title: string;
|
|
@@ -151,7 +158,7 @@ const DataSourceBootstrapProvider: FC = ({ children }) => {
|
|
|
151
158
|
}
|
|
152
159
|
};
|
|
153
160
|
|
|
154
|
-
|
|
161
|
+
run();
|
|
155
162
|
|
|
156
163
|
return () => {
|
|
157
164
|
mounted = false;
|
|
@@ -173,21 +180,33 @@ const CurrentUserProvider: FC = ({ children }) => {
|
|
|
173
180
|
const app = useApp<Application>();
|
|
174
181
|
const location = useLocation();
|
|
175
182
|
const navigate = useNavigate();
|
|
176
|
-
const [state, setState] = useState<
|
|
183
|
+
const [state, setState] = useState<CurrentUserInternalState>({ loading: true, authStatus: 'unknown' });
|
|
177
184
|
const locationRef = useRef(location);
|
|
178
185
|
locationRef.current = location;
|
|
179
186
|
const authCheckRouteState = getCurrentUserAuthCheckRouteState(app, location.pathname);
|
|
187
|
+
const shouldBlockAuthRequiredRoute = authCheckRouteState === 'required' && state.authStatus !== 'authenticated';
|
|
188
|
+
const contextValue = useMemo<CurrentUserState>(
|
|
189
|
+
() => ({
|
|
190
|
+
data: state.data,
|
|
191
|
+
loading: state.loading,
|
|
192
|
+
}),
|
|
193
|
+
[state.data, state.loading],
|
|
194
|
+
);
|
|
180
195
|
|
|
181
196
|
useEffect(() => {
|
|
182
197
|
let mounted = true;
|
|
183
198
|
|
|
184
199
|
if (authCheckRouteState !== 'required') {
|
|
185
200
|
// 认证页等免鉴权路由不应再执行 `/auth:check`,否则未登录时会重复鉴权并触发重定向抖动。
|
|
186
|
-
setState({ loading: false });
|
|
201
|
+
setState({ loading: false, authStatus: 'unauthenticated', error: null });
|
|
187
202
|
return;
|
|
188
203
|
}
|
|
189
204
|
|
|
190
|
-
setState((previous) =>
|
|
205
|
+
setState((previous) =>
|
|
206
|
+
previous.authStatus === 'authenticated'
|
|
207
|
+
? previous
|
|
208
|
+
: { data: previous.data, loading: true, authStatus: 'unknown', error: null },
|
|
209
|
+
);
|
|
191
210
|
|
|
192
211
|
const run = async () => {
|
|
193
212
|
try {
|
|
@@ -204,11 +223,12 @@ const CurrentUserProvider: FC = ({ children }) => {
|
|
|
204
223
|
const user = res?.data?.data;
|
|
205
224
|
// 服务端通过 `{ code: 302, redirect }` 通知客户端先去某个中间页(例如 2FA 验证页)。这类响应没有 user.id,但也不能视为未登录——否则会和处理 302 的全局响应拦截器 (例如 plugin-two-factor-authentication 注册的那一个)竞态,而 `window.location.replace` 会覆盖更早发出的 `window.location.href`,把用户错误地弹回登录页。让响应拦截器接管跳转。
|
|
206
225
|
if (user?.code === 302) {
|
|
207
|
-
setState({ loading: false });
|
|
226
|
+
setState({ loading: false, authStatus: 'redirecting', error: null });
|
|
208
227
|
return;
|
|
209
228
|
}
|
|
210
229
|
if (user?.id == null) {
|
|
211
230
|
// 用 react-router navigate (虚拟跳转)而不是 location.replace, 这样如果有其他响应拦截器已经发起了 window.location.href 整页跳转(例如 2FA 插件接收到服务端 302 重定向), 真实跳转可以胜出 navigate, 不会被这里的 signin 重定向覆盖。
|
|
231
|
+
setState({ loading: true, authStatus: 'unauthenticated', error: null });
|
|
212
232
|
navigate(`/signin?redirect=${encodeURIComponent(getCurrentV2RedirectPath(app, locationRef.current))}`, {
|
|
213
233
|
replace: true,
|
|
214
234
|
});
|
|
@@ -230,21 +250,28 @@ const CurrentUserProvider: FC = ({ children }) => {
|
|
|
230
250
|
setState({
|
|
231
251
|
data: res?.data,
|
|
232
252
|
loading: false,
|
|
253
|
+
authStatus: 'authenticated',
|
|
254
|
+
error: null,
|
|
233
255
|
});
|
|
234
|
-
} catch (error:
|
|
256
|
+
} catch (error: unknown) {
|
|
235
257
|
if (!mounted) {
|
|
236
258
|
return;
|
|
237
259
|
}
|
|
238
260
|
|
|
239
|
-
const
|
|
261
|
+
const errorLike = error as { response?: { status?: number }; status?: number };
|
|
262
|
+
const isAuthError = errorLike?.response?.status === 401 || errorLike?.status === 401;
|
|
240
263
|
if (isAuthError) {
|
|
264
|
+
setState({ loading: true, authStatus: 'unauthenticated', error: null });
|
|
241
265
|
navigate(`/signin?redirect=${encodeURIComponent(getCurrentV2RedirectPath(app, locationRef.current))}`, {
|
|
242
266
|
replace: true,
|
|
243
267
|
});
|
|
244
268
|
return;
|
|
245
269
|
}
|
|
246
|
-
setState({
|
|
247
|
-
|
|
270
|
+
setState({
|
|
271
|
+
loading: false,
|
|
272
|
+
authStatus: 'unknown',
|
|
273
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
274
|
+
});
|
|
248
275
|
}
|
|
249
276
|
};
|
|
250
277
|
|
|
@@ -255,11 +282,15 @@ const CurrentUserProvider: FC = ({ children }) => {
|
|
|
255
282
|
};
|
|
256
283
|
}, [app, authCheckRouteState, navigate]);
|
|
257
284
|
|
|
258
|
-
if (state.
|
|
285
|
+
if (state.error) {
|
|
286
|
+
throw state.error;
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
if (state.loading || shouldBlockAuthRequiredRoute) {
|
|
259
290
|
return app.renderComponent('AppSpin');
|
|
260
291
|
}
|
|
261
292
|
|
|
262
|
-
return <CurrentUserContext.Provider value={
|
|
293
|
+
return <CurrentUserContext.Provider value={contextValue}>{children}</CurrentUserContext.Provider>;
|
|
263
294
|
};
|
|
264
295
|
|
|
265
296
|
const RootRedirect: FC = () => {
|
|
@@ -289,8 +320,9 @@ export class NocoBaseBuildInPlugin extends Plugin<any, Application> {
|
|
|
289
320
|
this.addComponents();
|
|
290
321
|
this.addRoutes();
|
|
291
322
|
|
|
292
|
-
|
|
323
|
+
// Auth-required routes must finish auth check or redirect before data source metadata requests can start.
|
|
293
324
|
this.app.use(CurrentUserProvider);
|
|
325
|
+
this.app.use(DataSourceBootstrapProvider);
|
|
294
326
|
this.app.flowEngine.registerModels({
|
|
295
327
|
AdminLayoutModel,
|
|
296
328
|
AdminLayoutMenuItemModel,
|
|
@@ -323,7 +355,6 @@ export class NocoBaseBuildInPlugin extends Plugin<any, Application> {
|
|
|
323
355
|
title: this.app.i18n.t('System settings'),
|
|
324
356
|
icon: 'SettingOutlined',
|
|
325
357
|
aclSnippet: 'pm.system-settings.system-settings',
|
|
326
|
-
sort: -100,
|
|
327
358
|
});
|
|
328
359
|
this.app.pluginSettingsManager.addPageTabItem({
|
|
329
360
|
menuKey: 'system-settings',
|
|
@@ -331,7 +362,6 @@ export class NocoBaseBuildInPlugin extends Plugin<any, Application> {
|
|
|
331
362
|
title: this.app.i18n.t('System settings'),
|
|
332
363
|
componentLoader: () => import('../settings-center/SystemSettingsPage'),
|
|
333
364
|
aclSnippet: 'pm.system-settings.system-settings',
|
|
334
|
-
sort: -100,
|
|
335
365
|
});
|
|
336
366
|
// Parent menu for security-related plugin settings (password policy, locked users, etc.). Registered here in the buildin plugin so any pro plugin can attach page tabs to `menuKey: 'security'` without each one re-registering the same parent.
|
|
337
367
|
this.app.pluginSettingsManager.addMenuItem({
|
|
@@ -209,6 +209,9 @@ export const InternalAdminSettingsLayout = () => {
|
|
|
209
209
|
style={{
|
|
210
210
|
background: token.colorBgContainer,
|
|
211
211
|
borderInlineEnd: `${token.lineWidth}px solid ${token.colorBorderSecondary}`,
|
|
212
|
+
minHeight: 0,
|
|
213
|
+
overflowY: 'auto',
|
|
214
|
+
overflowX: 'hidden',
|
|
212
215
|
}}
|
|
213
216
|
>
|
|
214
217
|
<Menu
|
|
@@ -239,11 +242,12 @@ export const InternalAdminSettingsLayout = () => {
|
|
|
239
242
|
<Layout.Content
|
|
240
243
|
style={{
|
|
241
244
|
background: token.colorBgLayout,
|
|
245
|
+
flex: 1,
|
|
242
246
|
display: 'flex',
|
|
243
247
|
flexDirection: 'column',
|
|
244
248
|
minWidth: 0,
|
|
245
|
-
|
|
246
|
-
|
|
249
|
+
minHeight: 0,
|
|
250
|
+
overflow: 'hidden',
|
|
247
251
|
}}
|
|
248
252
|
>
|
|
249
253
|
<PageHeader
|
|
@@ -273,6 +277,10 @@ export const InternalAdminSettingsLayout = () => {
|
|
|
273
277
|
/>
|
|
274
278
|
<div
|
|
275
279
|
style={{
|
|
280
|
+
flex: 1,
|
|
281
|
+
minHeight: 0,
|
|
282
|
+
boxSizing: 'border-box',
|
|
283
|
+
overflow: 'auto',
|
|
276
284
|
padding: token.paddingLG,
|
|
277
285
|
}}
|
|
278
286
|
>
|
|
@@ -221,7 +221,6 @@ export const SystemSettingsPage = () => {
|
|
|
221
221
|
return (
|
|
222
222
|
<div
|
|
223
223
|
style={{
|
|
224
|
-
minHeight: '100%',
|
|
225
224
|
background: token.colorBgContainer,
|
|
226
225
|
borderRadius: token.borderRadiusLG,
|
|
227
226
|
padding: token.paddingLG,
|
|
@@ -240,7 +239,7 @@ export const SystemSettingsPage = () => {
|
|
|
240
239
|
<Form.Item
|
|
241
240
|
name="raw_title"
|
|
242
241
|
label={t('System title')}
|
|
243
|
-
rules={[{ required: true, message: t('Please enter') + t('System title') }]}
|
|
242
|
+
rules={[{ required: true, message: t('Please enter') + ' ' + t('System title') }]}
|
|
244
243
|
>
|
|
245
244
|
<Input.TextArea autoSize={{ minRows: 2, maxRows: 4 }} />
|
|
246
245
|
</Form.Item>
|
|
@@ -116,7 +116,7 @@ export const PluginCard: FC<PluginCardProps> = ({ data }) => {
|
|
|
116
116
|
});
|
|
117
117
|
|
|
118
118
|
const openSettings = useMemoizedFn(() => {
|
|
119
|
-
navigate(app.pluginSettingsManager.
|
|
119
|
+
navigate(app.pluginSettingsManager.getPluginSettingsRoutePath(name));
|
|
120
120
|
});
|
|
121
121
|
|
|
122
122
|
const cardClassName = useMemo(
|
|
@@ -180,7 +180,7 @@ export const PluginCard: FC<PluginCardProps> = ({ data }) => {
|
|
|
180
180
|
<ReadOutlined /> {t('Docs')}
|
|
181
181
|
</a>
|
|
182
182
|
)}
|
|
183
|
-
{enabled && app.pluginSettingsManager.
|
|
183
|
+
{enabled && app.pluginSettingsManager.hasPluginSettings(name) && (
|
|
184
184
|
<a
|
|
185
185
|
onClick={(e) => {
|
|
186
186
|
e.stopPropagation();
|
|
@@ -86,6 +86,9 @@ export const PluginManagerPage: React.FC = () => {
|
|
|
86
86
|
async () => {
|
|
87
87
|
const response = await app.apiClient.request({
|
|
88
88
|
url: 'pm:list',
|
|
89
|
+
params: {
|
|
90
|
+
v2: true,
|
|
91
|
+
},
|
|
89
92
|
skipNotify: true,
|
|
90
93
|
});
|
|
91
94
|
return Array.isArray(response?.data?.data) ? response.data.data : [];
|
|
@@ -85,12 +85,6 @@ export function filterVisibleSettings(settings: readonly PluginSettingsPageType[
|
|
|
85
85
|
*/
|
|
86
86
|
export function sortTopLevelSettings(settings: PluginSettingsPageType[] = []) {
|
|
87
87
|
return [...settings].sort((a, b) => {
|
|
88
|
-
if (a.name === SYSTEM_SETTINGS_SETTING_NAME && b.name !== SYSTEM_SETTINGS_SETTING_NAME) {
|
|
89
|
-
return -1;
|
|
90
|
-
}
|
|
91
|
-
if (b.name === SYSTEM_SETTINGS_SETTING_NAME && a.name !== SYSTEM_SETTINGS_SETTING_NAME) {
|
|
92
|
-
return 1;
|
|
93
|
-
}
|
|
94
88
|
if ((a.sort || 0) !== (b.sort || 0)) {
|
|
95
89
|
return (a.sort || 0) - (b.sort || 0);
|
|
96
90
|
}
|