Merge branches 'fix-textare-autop' and 'nocobase-next' of https://github.com/nocobase/nocobase into nocobase-next

This commit is contained in:
Semmy 2022-03-30 15:40:40 +08:00
commit 9615141180
4 changed files with 102 additions and 86 deletions

View File

@ -13,7 +13,7 @@ import {
RemoteSchemaTemplateManagerProvider, RemoteSchemaTemplateManagerProvider,
useDocumentTitle, useDocumentTitle,
useRoute, useRoute,
useSystemSettings, useSystemSettings
} from '../../../'; } from '../../../';
const InternalAdminLayout = (props: any) => { const InternalAdminLayout = (props: any) => {
@ -58,36 +58,42 @@ const InternalAdminLayout = (props: any) => {
/> />
{/* {result?.data?.data?.title} */} {/* {result?.data?.data?.title} */}
</div> </div>
<RemoteSchemaComponent <div
hidden={hidden} style={{
uid={route.uiSchemaUid} width: 'calc(100% - 590px)',
scope={{ onSelect, sideMenuRef, defaultSelectedUid }}
schemaTransform={(data) => {
if (!data) {
return data;
}
data['x-component-props'] = data['x-component-props'] || {};
data['x-component-props']['defaultSelectedUid'] = defaultSelectedUid;
return data;
}} }}
onSuccess={(data) => { >
if (defaultSelectedUid) { <RemoteSchemaComponent
const s = findByUid(data?.data, defaultSelectedUid); hidden={hidden}
if (s) { uid={route.uiSchemaUid}
setTitle(s.title); scope={{ onSelect, sideMenuRef, defaultSelectedUid }}
schemaTransform={(data) => {
if (!data) {
return data;
} }
return; data['x-component-props'] = data['x-component-props'] || {};
} data['x-component-props']['defaultSelectedUid'] = defaultSelectedUid;
setHidden(true); return data;
setTimeout(() => setHidden(false), 11); }}
const s = findMenuItem(data?.data); onSuccess={(data) => {
if (s) { if (defaultSelectedUid) {
setSchema(s); const s = findByUid(data?.data, defaultSelectedUid);
setTitle(s.title); if (s) {
history.push(`/admin/${s['x-uid']}`); setTitle(s.title);
} }
}} return;
/> }
setHidden(true);
setTimeout(() => setHidden(false), 11);
const s = findMenuItem(data?.data);
if (s) {
setSchema(s);
setTitle(s.title);
history.push(`/admin/${s['x-uid']}`);
}
}}
/>
</div>
</div> </div>
<div style={{ position: 'absolute', top: 0, right: 0 }}> <div style={{ position: 'absolute', top: 0, right: 0 }}>
<PluginManager.Toolbar <PluginManager.Toolbar

View File

@ -134,6 +134,19 @@ const useSideMenuRef = () => {
const MenuItemDesignerContext = createContext(null); const MenuItemDesignerContext = createContext(null);
const AddMenuItemButton = () => {
const schema = useFieldSchema();
const { render } = useSchemaInitializer(schema['x-initializer']);
const { designable } = useDesignable();
return (
designable && (
<AntdMenu.Item disabled style={{ padding: '0 8px', order: 9999 }}>
{render({ style: { background: 'none' } })}
</AntdMenu.Item>
)
);
};
export const Menu: ComposedMenu = observer((props) => { export const Menu: ComposedMenu = observer((props) => {
let { let {
onSelect, onSelect,
@ -192,66 +205,61 @@ export const Menu: ComposedMenu = observer((props) => {
<DndContext> <DndContext>
<MenuItemDesignerContext.Provider value={Designer}> <MenuItemDesignerContext.Provider value={Designer}>
<MenuModeContext.Provider value={mode}> <MenuModeContext.Provider value={mode}>
<div <AntdMenu
style={{ {...others}
width: 'calc(100% - 200px - 390px)', style={
display: 'flex', {
justifyContent: 'flex-start',
alignItems: 'center',
}}
>
<AntdMenu
{...others}
style={{
// width: mode === 'mix' ? '100%' : undefined, // width: mode === 'mix' ? '100%' : undefined,
}} }
className={css` }
.ant-menu-item:hover { className={css`
> .ant-menu-title-content > div { .ant-menu-item:hover {
.general-schema-designer { > .ant-menu-title-content > div {
display: block; .general-schema-designer {
} display: block;
} }
} }
`} }
onSelect={(info: any) => { `}
const s = schema.properties[info.key]; onSelect={(info: any) => {
if (mode === 'mix') { const s = schema.properties[info.key];
setSideMenuSchema(s); if (mode === 'mix') {
if (s['x-component'] !== 'Menu.SubMenu') { setSideMenuSchema(s);
onSelect && onSelect(info); if (s['x-component'] !== 'Menu.SubMenu') {
} else {
const menuItemSchema = findMenuItem(s);
if (!menuItemSchema) {
return;
}
// TODO
setLoading(true);
const keys = findKeysByUid(schema, menuItemSchema['x-uid']);
setDefaultSelectedKeys(keys);
setTimeout(() => {
setLoading(false);
}, 100);
onSelect &&
onSelect({
key: menuItemSchema.name,
item: {
props: {
schema: menuItemSchema,
},
},
});
}
} else {
onSelect && onSelect(info); onSelect && onSelect(info);
} else {
const menuItemSchema = findMenuItem(s);
if (!menuItemSchema) {
return;
}
// TODO
setLoading(true);
const keys = findKeysByUid(schema, menuItemSchema['x-uid']);
setDefaultSelectedKeys(keys);
setTimeout(() => {
setLoading(false);
}, 100);
onSelect &&
onSelect({
key: menuItemSchema.name,
item: {
props: {
schema: menuItemSchema,
},
},
});
} }
}} } else {
mode={mode === 'mix' ? 'horizontal' : mode} onSelect && onSelect(info);
defaultOpenKeys={defaultOpenKeys} }
defaultSelectedKeys={defaultSelectedKeys} }}
></AntdMenu> mode={mode === 'mix' ? 'horizontal' : mode}
{render({ style: { background: 'none' } })} defaultOpenKeys={defaultOpenKeys}
</div> defaultSelectedKeys={defaultSelectedKeys}
>
<AddMenuItemButton />
{props.children}
</AntdMenu>
{loading {loading
? null ? null
: mode === 'mix' && : mode === 'mix' &&

View File

@ -32,7 +32,8 @@ export const CurrentUser = () => {
<LanguageSettings /> <LanguageSettings />
<Menu.Divider /> <Menu.Divider />
<Menu.Item <Menu.Item
onClick={() => { onClick={async () => {
await api.resource('users').signout();
api.setBearerToken(null); api.setBearerToken(null);
history.push('/signin'); history.push('/signin');
}} }}

View File

@ -44,7 +44,8 @@ export async function signin(ctx: Context, next: Next) {
} }
export async function signout(ctx: Context, next: Next) { export async function signout(ctx: Context, next: Next) {
ctx.body = {}; await ctx.state.currentUser.update({ token: null });
ctx.body = ctx.state.currentUser;
await next(); await next();
} }