listpage-next 0.0.171 → 0.0.173

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.
@@ -1,9 +1,12 @@
1
1
  import { SiderProps } from 'antd';
2
+ import { PageLogoProps } from '../PageLogo';
3
+ import { PageFloatProps } from '../PageProvider/float';
2
4
  export interface PageLayoutProps {
3
5
  sider?: React.ReactNode;
4
6
  header?: React.ReactNode;
5
7
  content?: React.ReactNode;
6
- logo?: React.ReactNode;
8
+ logo?: PageLogoProps;
9
+ floats?: PageFloatProps[];
7
10
  defaultCollapsed?: boolean;
8
11
  siderProps?: Omit<SiderProps, 'collapsed' | 'onCollapse'>;
9
12
  }
@@ -33,6 +33,7 @@ const PageLayoutComponent = (props)=>{
33
33
  };
34
34
  const PageLayout = (props)=>/*#__PURE__*/ jsx(PageProvider, {
35
35
  defaultCollapsed: props.defaultCollapsed,
36
+ floats: props.floats,
36
37
  children: /*#__PURE__*/ jsx(PageLayoutComponent, {
37
38
  ...props
38
39
  })
@@ -0,0 +1,7 @@
1
+ import { ReactNode } from 'react';
2
+ export interface PageLogoProps {
3
+ src?: string;
4
+ icon?: ReactNode;
5
+ title?: ReactNode;
6
+ }
7
+ export declare const PageLogo: (props: PageLogoProps) => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,37 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { Avatar, Image } from "antd";
3
+ import { styled } from "styled-components";
4
+ const PageLogo = (props)=>{
5
+ const { src, icon, title } = props;
6
+ return /*#__PURE__*/ jsxs(LogoContentWrapper, {
7
+ children: [
8
+ src && /*#__PURE__*/ jsx(Image, {
9
+ width: 30,
10
+ height: 30,
11
+ src: src,
12
+ preview: true
13
+ }),
14
+ icon && /*#__PURE__*/ jsx(Avatar, {
15
+ icon: icon,
16
+ shape: "circle",
17
+ size: 30
18
+ }),
19
+ title && /*#__PURE__*/ jsx(TitleContentWrapper, {
20
+ children: title
21
+ })
22
+ ]
23
+ });
24
+ };
25
+ const LogoContentWrapper = styled.div`
26
+ flex: 0;
27
+ display: flex;
28
+ align-items: center;
29
+ gap: 8px;
30
+ height: 48px;
31
+ `;
32
+ const TitleContentWrapper = styled.div`
33
+ font-size: 16px;
34
+ font-weight: 600;
35
+ color: #333;
36
+ `;
37
+ export { PageLogo };
@@ -0,0 +1,20 @@
1
+ import React, { JSX } from 'react';
2
+ export interface FloatContextProps {
3
+ showFloat: (key: string, record: any, onCloseCallback?: () => void) => void;
4
+ hideFloat: (key: string) => void;
5
+ }
6
+ export declare const FloatContext: React.Context<FloatContextProps | undefined>;
7
+ export declare const useFloatContext: () => FloatContextProps;
8
+ export declare const FloatProvider: (props: {
9
+ floats?: PageFloatProps[];
10
+ children: React.ReactNode;
11
+ }) => import("react/jsx-runtime").JSX.Element;
12
+ export type FloatComponentProps<T extends Record<string, any> = any> = {
13
+ record: T;
14
+ visible: boolean;
15
+ onClose: () => void;
16
+ };
17
+ export type PageFloatProps<T extends Record<string, any> = any> = {
18
+ key: string;
19
+ render: (props: FloatComponentProps<T>) => JSX.Element;
20
+ };
@@ -0,0 +1,64 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import { createContext, useCallback, useContext, useRef, useState } from "react";
3
+ const FloatContext = /*#__PURE__*/ createContext(void 0);
4
+ const useFloatContext = ()=>{
5
+ const context = useContext(FloatContext);
6
+ if (!context) return {
7
+ showFloat: ()=>{},
8
+ hideFloat: ()=>{}
9
+ };
10
+ return context;
11
+ };
12
+ const FloatProvider = (props)=>{
13
+ const { floats = [], children } = props;
14
+ const elesRef = useRef([]);
15
+ const [eles, setEles] = useState([]);
16
+ const hideFloat = useCallback((key)=>{
17
+ elesRef.current = elesRef.current.filter((ele)=>ele.key !== key);
18
+ setEles([
19
+ ...elesRef.current.map((i)=>i.ele)
20
+ ]);
21
+ }, [
22
+ eles
23
+ ]);
24
+ const showFloat = useCallback((key, record, onCloseCallback)=>{
25
+ const Component = floats.find((i)=>i.key === key)?.render;
26
+ if (!Component) return;
27
+ const node = /*#__PURE__*/ jsx(Component, {
28
+ visible: true,
29
+ record: record,
30
+ onClose: ()=>{
31
+ onCloseCallback?.();
32
+ elesRef.current = elesRef.current.filter(({ ele })=>ele !== node);
33
+ setEles([
34
+ ...elesRef.current.map((i)=>i.ele)
35
+ ]);
36
+ }
37
+ }, key);
38
+ elesRef.current.push({
39
+ key,
40
+ ele: node
41
+ });
42
+ setEles([
43
+ ...elesRef.current.map((i)=>i.ele)
44
+ ]);
45
+ }, [
46
+ floats,
47
+ eles,
48
+ elesRef,
49
+ setEles
50
+ ]);
51
+ return /*#__PURE__*/ jsx(FloatContext.Provider, {
52
+ value: {
53
+ showFloat,
54
+ hideFloat
55
+ },
56
+ children: /*#__PURE__*/ jsxs(Fragment, {
57
+ children: [
58
+ children,
59
+ eles
60
+ ]
61
+ })
62
+ });
63
+ };
64
+ export { FloatContext, FloatProvider, useFloatContext };
@@ -1,3 +1,4 @@
1
+ import { PageFloatProps } from './float';
1
2
  export declare const PageContext: import("react").Context<{
2
3
  collapsed: boolean;
3
4
  setCollapsed: (collapsed: boolean) => void;
@@ -5,9 +6,12 @@ export declare const PageContext: import("react").Context<{
5
6
  export interface PageProviderProps {
6
7
  children: React.ReactNode;
7
8
  defaultCollapsed?: boolean;
9
+ floats?: PageFloatProps[];
8
10
  }
9
- export declare const PageProvider: ({ children, defaultCollapsed, }: PageProviderProps) => import("react/jsx-runtime").JSX.Element;
11
+ export declare const PageProvider: ({ children, defaultCollapsed, floats, }: PageProviderProps) => import("react/jsx-runtime").JSX.Element;
10
12
  export declare const usePageContext: () => {
11
13
  collapsed: boolean;
12
14
  setCollapsed: (collapsed: boolean) => void;
15
+ showFloat: (key: string, record: any, onCloseCallback?: () => void) => void;
16
+ hideFloat: (key: string) => void;
13
17
  };
@@ -1,18 +1,31 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { createContext, useContext, useState } from "react";
3
+ import { FloatProvider, useFloatContext } from "./float.js";
3
4
  const PageContext = /*#__PURE__*/ createContext({
4
5
  collapsed: false,
5
6
  setCollapsed: ()=>{}
6
7
  });
7
- const PageProvider = ({ children, defaultCollapsed = false })=>{
8
+ const PageProvider = ({ children, defaultCollapsed = false, floats = [] })=>{
8
9
  const [collapsed, setCollapsed] = useState(defaultCollapsed);
9
- return /*#__PURE__*/ jsx(PageContext.Provider, {
10
- value: {
11
- collapsed,
12
- setCollapsed
13
- },
14
- children: children
10
+ return /*#__PURE__*/ jsx(FloatProvider, {
11
+ floats: floats,
12
+ children: /*#__PURE__*/ jsx(PageContext.Provider, {
13
+ value: {
14
+ collapsed,
15
+ setCollapsed
16
+ },
17
+ children: children
18
+ })
15
19
  });
16
20
  };
17
- const usePageContext = ()=>useContext(PageContext);
21
+ const usePageContext = ()=>{
22
+ const { showFloat, hideFloat } = useFloatContext();
23
+ const { collapsed, setCollapsed } = useContext(PageContext);
24
+ return {
25
+ collapsed,
26
+ setCollapsed,
27
+ showFloat,
28
+ hideFloat
29
+ };
30
+ };
18
31
  export { PageContext, PageProvider, usePageContext };
@@ -1,7 +1,8 @@
1
1
  import { SiderProps } from 'antd';
2
2
  import { ReactNode } from 'react';
3
+ import { PageLogoProps } from '../PageLogo';
3
4
  export interface PageSiderProps extends Omit<SiderProps, 'children'> {
4
- logo?: ReactNode;
5
+ logo?: PageLogoProps;
5
6
  children?: ReactNode;
6
7
  }
7
8
  export declare const PageSider: (props: PageSiderProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,6 +1,7 @@
1
1
  import { jsx, jsxs } from "react/jsx-runtime";
2
2
  import { styled } from "styled-components";
3
3
  import { Layout } from "antd";
4
+ import { PageLogo } from "../PageLogo/index.js";
4
5
  const PageSider = (props)=>{
5
6
  const { logo, children, ...siderProps } = props;
6
7
  return /*#__PURE__*/ jsx(SiderStyled, {
@@ -12,8 +13,8 @@ const PageSider = (props)=>{
12
13
  ...siderProps,
13
14
  children: /*#__PURE__*/ jsxs(SiderContent, {
14
15
  children: [
15
- logo && /*#__PURE__*/ jsx(LogoContentWrapper, {
16
- children: logo
16
+ logo && /*#__PURE__*/ jsx(PageLogo, {
17
+ ...logo
17
18
  }),
18
19
  /*#__PURE__*/ jsx(SiderContentWrapper, {
19
20
  children: children
@@ -27,17 +28,17 @@ const SiderStyled = styled(Layout.Sider)`
27
28
  border-right: 1px solid #e5e5e5;
28
29
  display: flex;
29
30
  flex-direction: column;
31
+
32
+ padding: 12px;
30
33
  `;
31
34
  const SiderContent = styled.div`
32
35
  display: flex;
33
36
  flex-direction: column;
34
37
  overflow: hidden;
38
+ height: 100%;
35
39
  `;
36
40
  const SiderContentWrapper = styled.div`
37
41
  flex: 1;
38
42
  overflow: auto;
39
43
  `;
40
- const LogoContentWrapper = styled.div`
41
- flex: 0;
42
- `;
43
44
  export { PageSider };
@@ -2,21 +2,14 @@ import { JSX, ReactNode } from 'react';
2
2
  import { FilterFormOption } from '../../components/FilterGroup';
3
3
  import type { ListPageStore } from './context';
4
4
  import { BaseQueryParams, PaginationData } from '../../http-client';
5
+ import type { FloatComponentProps } from '../../components/PageLayout/components/PageProvider/float';
5
6
  export type StateValue<FilterValue = any> = {
6
7
  filterValues?: FilterValue;
7
8
  pageSize?: number;
8
9
  currentPage?: number;
9
10
  };
10
- export type FloatComponentProps<T extends Record<string, any> = any> = {
11
- record?: T;
12
- visible: boolean;
13
- onClose: () => void;
14
- };
11
+ export type { FloatComponentProps, PageFloatProps as ListPageFloatProps, } from '../../components/PageLayout/components/PageProvider/float';
15
12
  export type FloatRender<RecordValue extends Record<string, any> = any> = (props: FloatComponentProps<RecordValue>) => JSX.Element;
16
- export type ListPageFloatProps<RecordValue extends Record<string, any> = any> = {
17
- key: string;
18
- render: FloatRender<RecordValue>;
19
- };
20
13
  export type ListPageFilterProps<FilterValue = any> = {
21
14
  labelInline?: boolean;
22
15
  options: FilterFormOption[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "listpage-next",
3
- "version": "0.0.171",
3
+ "version": "0.0.173",
4
4
  "description": "A React component library for creating filter forms with Ant Design",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",