@antscorp/antsomi-ui 1.3.5-beta.340 → 1.3.5-beta.342

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.
@@ -13,6 +13,7 @@ export interface HeaderV2Props {
13
13
  style?: React.CSSProperties;
14
14
  pageTitle?: string | React.ReactNode;
15
15
  breadcrumbs?: Breadcrumb[];
16
+ showLogo?: boolean;
16
17
  accountSelection?: Omit<AccountSelectionProps, 'onChange' | 'apiConfig'> & {
17
18
  onSelectAccount?: (userId: string) => void;
18
19
  };
@@ -28,6 +29,7 @@ export interface HeaderV2Props {
28
29
  show?: boolean;
29
30
  };
30
31
  useURLParam?: boolean;
32
+ rightContent?: React.ReactNode;
31
33
  config?: {
32
34
  env?: envType;
33
35
  language?: string;
@@ -13,7 +13,7 @@ import React, { memo, useLayoutEffect, useMemo, useState } from 'react';
13
13
  import { Link, useLocation } from 'react-router-dom';
14
14
  // Hooks
15
15
  // Styled
16
- import { HeaderV2Styled } from './styled';
16
+ import { HeaderV2Styled, LogoWrapper } from './styled';
17
17
  // Components
18
18
  import { AccountSelection } from '../AccountSelection';
19
19
  import { AccountSharing, Help, Notification, } from '../../organism';
@@ -23,16 +23,16 @@ import { useContextSelector } from 'use-context-selector';
23
23
  import { AppConfigContext } from '../../..';
24
24
  import { isNil } from 'lodash';
25
25
  import { useCustomRouter } from '@antscorp/antsomi-ui/es/hooks';
26
+ const SubLogoAntsomi = 'https://st-media-template.antsomi.com/icons/antsomi/antsomi.png';
26
27
  const { DATAFLOWS, APP_ANTALYSER } = APP_CODES;
27
28
  // const DOUBLE_RIGHT_POINTING = '&raquo;'
28
29
  export const HeaderV2 = memo(props => {
29
30
  var _a;
30
31
  const { auth, env: envContext, languageCode = 'en', appCode: contextAppCode, urlLogout: urlLogoutProvider = '', menuCode: contextMenuCode, } = useContextSelector(AppConfigContext, state => state);
31
32
  const { search } = useLocation();
32
- // const history = useHistory();
33
33
  const { replace } = useCustomRouter();
34
34
  // * Prefer to use Header in AppConfigContext
35
- const { className, style, breadcrumbs, pageTitle = '', accountSelection = {}, helpConfig, notificationConfig = {}, accountSharingConfig, useURLParam, config, } = props;
35
+ const { className, style, breadcrumbs, showLogo = false, rightContent, pageTitle = '', accountSelection = {}, helpConfig, notificationConfig = {}, accountSharingConfig, useURLParam, config, } = props;
36
36
  /** General config for children component */
37
37
  const { env = envContext, language = languageCode, userId = isNaN(Number(auth === null || auth === void 0 ? void 0 : auth.userId)) ? 0 : Number(auth === null || auth === void 0 ? void 0 : auth.userId), portalId = auth === null || auth === void 0 ? void 0 : auth.portalId, token = auth === null || auth === void 0 ? void 0 : auth.token, permissionDomain = PERMISSION_API, iamDomain = IAM_API, appCode = contextAppCode, menuCode = contextMenuCode, } = config || {};
38
38
  const { currentAccount, inputStyle = 'select', onSelectAccount } = accountSelection, accountSelectionProps = __rest(accountSelection, ["currentAccount", "inputStyle", "onSelectAccount"]);
@@ -107,6 +107,8 @@ export const HeaderV2 = memo(props => {
107
107
  const QUOTE_ENTITY = React.createElement(React.Fragment, null, "\u00BB");
108
108
  return (React.createElement(HeaderV2Styled, { className: className || '', style: style },
109
109
  React.createElement("div", { className: "left-side" },
110
+ showLogo && (React.createElement(LogoWrapper, null,
111
+ React.createElement("img", { src: SubLogoAntsomi, alt: "Antsomi sub logo" }))),
110
112
  React.createElement(AccountSelection, Object.assign({}, accountSelectionProps, { currentAccount: selectedAccount, apiConfig: accountSelectionApiConfig, onChange: handleChangeAccount, inputStyle: inputStyle })),
111
113
  React.createElement("div", { className: "title-container" },
112
114
  breadcrumbs ? (React.createElement("div", { className: "header-breadcrumbs" }, breadcrumbs.map((item, index) => (React.createElement(React.Fragment, { key: `${item.title}_${item.link}` },
@@ -117,6 +119,7 @@ export const HeaderV2 = memo(props => {
117
119
  "\u2002")))))) : null,
118
120
  typeof pageTitle === 'string' ? (React.createElement("div", { className: "page-title" }, pageTitle)) : (pageTitle))),
119
121
  React.createElement("div", { className: "right-side" },
122
+ rightContent,
120
123
  showHelp ? React.createElement(Help, Object.assign({ configs: helpConfigProps }, helpProps)) : null,
121
124
  showNotification ? React.createElement(Notification, Object.assign({}, notificationConfigProps)) : null,
122
125
  showAccountSharing ? (React.createElement(AccountSharing, Object.assign({ isShowSharing: isShowSharing, isShareAccountAccess: isShareAccountAccess }, accountSharingPropsFormatted, accountSharingProps))) : null)));
@@ -1 +1,2 @@
1
1
  export declare const HeaderV2Styled: import("styled-components").StyledComponent<"div", any, {}, never>;
2
+ export declare const LogoWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -14,11 +14,10 @@ export const HeaderV2Styled = styled.div `
14
14
  .right-side {
15
15
  display: flex;
16
16
  align-items: center;
17
- gap: 10px;
17
+ gap: 15px;
18
18
  }
19
19
 
20
20
  .left-side {
21
- gap: 15px;
22
21
  flex: 1;
23
22
  overflow: hidden;
24
23
  }
@@ -45,3 +44,12 @@ export const HeaderV2Styled = styled.div `
45
44
  font-weight: bold;
46
45
  }
47
46
  `;
47
+ export const LogoWrapper = styled.div `
48
+ height: 30px;
49
+ width: 30px;
50
+
51
+ img {
52
+ height: 100%;
53
+ width: 100%;
54
+ }
55
+ `;
@@ -38,6 +38,7 @@ export const Layout = memo(props => {
38
38
  const { auth, languageCode, appCode, env } = appConfig;
39
39
  const { token, userId, portalId } = auth || {};
40
40
  const headerStore = useLayoutStore(store => store.state.header);
41
+ const showLeftMenu = useLayoutStore(store => store.state.leftMenu.show);
41
42
  const [showAccountSelection, setShowAccountSelection] = useState(false);
42
43
  // Memo
43
44
  const permissionDomain = useMemo(() => {
@@ -91,10 +92,10 @@ export const Layout = memo(props => {
91
92
  const hasRole = hasSelectAccountPermission(activeItemPath, flattenPermissionList);
92
93
  setShowAccountSelection(hasRole);
93
94
  }, [onActiveMenuChange]);
94
- return (React.createElement(LayoutWrapper, null,
95
- React.createElement(HeaderV2, Object.assign({}, mergeHeaderProps)),
95
+ return (React.createElement(LayoutWrapper, { showLeftMenu: showLeftMenu },
96
+ React.createElement(HeaderV2, Object.assign({}, mergeHeaderProps, { showLogo: !showLeftMenu })),
96
97
  React.createElement(Flex, { className: "layout-body" },
97
- React.createElement(LeftMenu, Object.assign({ className: `layout-body__menu ${className}`, appConfig: appConfig }, restOfLeftMenuProps, { onActiveMenuCodeChange: onActiveMenuCodeChange })),
98
+ showLeftMenu && (React.createElement(LeftMenu, Object.assign({ className: `layout-body__menu ${className}`, appConfig: appConfig }, restOfLeftMenuProps, { onActiveMenuCodeChange: onActiveMenuCodeChange }))),
98
99
  React.createElement(ContentWrapper, null,
99
100
  React.createElement("div", Object.assign({}, restOfWorkspaceProps, { className: `layout-body__content ${(workspaceProps === null || workspaceProps === void 0 ? void 0 : workspaceProps.className) || ''}` }),
100
101
  React.createElement(NotificationWrapper, null,
@@ -4,6 +4,7 @@ import { DeepPartial } from '@antscorp/antsomi-ui/es/types';
4
4
  export interface HeaderStore extends Partial<HeaderV2Props> {
5
5
  }
6
6
  export interface LeftMenuStore {
7
+ show: boolean;
7
8
  onClickCreateDashboard?: React.MouseEventHandler<HTMLElement>;
8
9
  }
9
10
  export interface WorkspaceStore {
@@ -3,7 +3,7 @@ import { create } from 'zustand';
3
3
  import { merge } from 'lodash';
4
4
  const initialState = {
5
5
  header: {},
6
- leftMenu: {},
6
+ leftMenu: { show: true },
7
7
  workspace: {},
8
8
  };
9
9
  export const useLayoutStore = create(set => ({
@@ -19,15 +19,19 @@ export const useLayoutStore = create(set => ({
19
19
  state: Object.assign(Object.assign({}, store.state), { workspace: Object.assign(Object.assign({}, store.state.workspace), newState) }),
20
20
  })),
21
21
  resetHeaderState: () => set(store => ({
22
- state: Object.assign(Object.assign({}, store.state), { header: initialState.header }),
22
+ state: Object.assign(Object.assign({}, store.state), { header: {} }),
23
23
  })),
24
24
  resetLeftMenuState: () => set(store => ({
25
- state: Object.assign(Object.assign({}, store.state), { leftMenu: initialState.leftMenu }),
25
+ state: Object.assign(Object.assign({}, store.state), { leftMenu: { show: true } }),
26
26
  })),
27
27
  resetWorkspaceState: () => set(store => ({
28
- state: Object.assign(Object.assign({}, store.state), { workspace: initialState.workspace }),
28
+ state: Object.assign(Object.assign({}, store.state), { workspace: {} }),
29
29
  })),
30
30
  resetLayoutState: () => set(store => ({
31
- state: Object.assign(Object.assign({}, store.state), initialState),
31
+ state: Object.assign(Object.assign({}, store.state), {
32
+ header: {},
33
+ leftMenu: { show: true },
34
+ workspace: {},
35
+ }),
32
36
  })),
33
37
  }));
@@ -1,5 +1,7 @@
1
1
  /// <reference types="react" />
2
- export declare const LayoutWrapper: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("antd/es/flex/interface").FlexProps<import("antd/es/_util/type").AnyObject> & import("react").RefAttributes<HTMLElement>>, any, {}, never>;
2
+ export declare const LayoutWrapper: import("styled-components").StyledComponent<import("react").ForwardRefExoticComponent<import("antd/es/flex/interface").FlexProps<import("antd/es/_util/type").AnyObject> & import("react").RefAttributes<HTMLElement>>, any, {
3
+ showLeftMenu: boolean;
4
+ }, never>;
3
5
  export declare const ContentWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
4
6
  export declare const NotificationWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
5
7
  export declare const ChildrenWrapper: import("styled-components").StyledComponent<"div", any, {}, never>;
@@ -12,10 +12,14 @@ export const LayoutWrapper = styled(Flex) `
12
12
  position: relative;
13
13
 
14
14
  .layout-header {
15
- width: calc(100% - 71px);
16
15
  position: absolute;
17
- left: 71px;
18
16
  z-index: 20;
17
+ ${({ showLeftMenu }) => showLeftMenu
18
+ ? `
19
+ width: calc(100% - 71px);
20
+ left: 71px;
21
+ `
22
+ : 'width: 100%'};
19
23
  }
20
24
 
21
25
  .layout-body {
@@ -47,6 +47,7 @@ export const MenuWrapper = styled.div `
47
47
  .antsomi-menu-submenu-title {
48
48
  margin-top: 10px;
49
49
  margin-bottom: 10px;
50
+ transition: all 0.3s;
50
51
  }
51
52
 
52
53
  .antsomi-menu-submenu-open {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@antscorp/antsomi-ui",
3
- "version": "1.3.5-beta.340",
3
+ "version": "1.3.5-beta.342",
4
4
  "description": "An enterprise-class UI design language and React UI library.",
5
5
  "sideEffects": [
6
6
  "dist/*",