dinocollab-core 1.1.1 → 1.1.3

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.
@@ -0,0 +1,2 @@
1
+ import{inherits as e,createClass as i,objectSpread2 as r,classCallCheck as t,callSuper as o,defineProperty as n}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as a,jsx as s}from"react/jsx-runtime";import l,{Component as d}from"react";import{Box as u}from"@mui/material";import{EDataViewMode as f}from"./types.js";import p from"./create.table.js";import{ToggleButtons as c,SwitchDataViewWithMode as m}from"./ui.units.js";import{CustomToolbar as g}from"./custom-toolbar.js";function h(h){var b=h.tableConfigs?p(h.tableConfigs):function(){return null},A=function(e){return l.useEffect((function(){e.onApiReady&&e.onApiReady(null)}),[e.onApiReady]),a(u,{sx:{p:2,textAlign:"center",bgcolor:"grey.100",borderRadius:1},children:["🏗️ Grid Layout Mode - Coming Soon",s("br",{}),s("small",{children:"Will display items in card/grid format"})]})};return function(){function l(e){var i,r;return t(this,l),r=o(this,l,[e]),n(r,"handleTableApiReady",(function(e){r.setState({tableApiRef:e})})),n(r,"handleGridApiReady",(function(e){r.setState({gridApiRef:e})})),r.state={mode:(null===(i=h.initialState)||void 0===i?void 0:i.mode)||f.Table,tableApiRef:null,gridApiRef:null},r}return e(l,d),i(l,[{key:"render",value:function(){var e=this.renderIssue();return e||a(u,{children:[s(u,{children:s(g,{tableApiRef:this.state.tableApiRef,gridApiRef:this.state.gridApiRef,currentMode:this.state.mode,showColumnsButton:!0,children:s(c,{})})}),s(m,{mode:this.state.mode,Table:s(b,r(r({},this.props),{},{onApiReady:this.handleTableApiReady})),Grid:s(A,r(r({},this.props),{},{onApiReady:this.handleGridApiReady}))})]})}},{key:"renderIssue",value:function(){var e=h.tableConfigs,i=h.gridConfigs;return e||i?null:s(u,{sx:{p:2,bgcolor:"warning.light",color:"warning.contrastText",borderRadius:1},children:"⚠️ Missing configuration: At least tableConfigs is required for Table mode (DataGrid), or you can configure both tableConfigs and gridConfigs for dual-mode support"})}}])}()}export{h as default};
2
+ //# sourceMappingURL=create.data-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.data-view.js","sources":["../../src/data-view/create.data-view.tsx"],"sourcesContent":["import React, { Component, ComponentType, Fragment, createRef } from 'react'\r\nimport { Box, IconButton } from '@mui/material'\r\nimport { EDataViewMode, IDataViewData, IDataViewInitial, ITableConfigs } from './types'\r\nimport createTable, { ITableProps } from './create.table'\r\nimport { SwitchDataViewWithMode, ToggleButtons } from './ui.units'\r\nimport { GridValidRowModel, GridToolbarColumnsButton, GridApi } from '@mui/x-data-grid'\r\nimport ViewColumnIcon from '@mui/icons-material/ViewColumn'\r\nimport CustomToolbar from './custom-toolbar';\r\n\r\nexport interface IDataViewFilter {}\r\n\r\nexport interface IDataViewContext {}\r\n\r\nexport interface IDataViewState extends IDataViewInitial {\r\n tableApiRef?: GridApi | null\r\n gridApiRef?: GridApi | null\r\n}\r\n\r\nexport interface IDataViewDef {}\r\n\r\nexport interface IDataViewSlots {}\r\n\r\nexport interface IDataViewProps<T extends GridValidRowModel> {\r\n data?: IDataViewData<T>\r\n filter?: IDataViewFilter\r\n initialState?: IDataViewInitial\r\n}\r\n\r\nexport interface IDataViewParams<T extends GridValidRowModel> {\r\n initialState?: IDataViewInitial\r\n filterConfigs?: {}\r\n tableConfigs?: ITableConfigs<T> // Configuration for Table mode (DataGrid)\r\n gridConfigs?: {} // Configuration for Grid mode (Card layout) - to be implemented\r\n slots?: IDataViewSlots\r\n}\r\n\r\n// function ExternalColumnsButton({ apiRef }) {\r\n// return (\r\n// <IconButton onClick={() => apiRef.current.showPreferences('columns')}>\r\n// <ViewColumnIcon />\r\n// </IconButton>\r\n// );\r\n// }\r\n\r\nfunction createDataView<T extends GridValidRowModel>(params: IDataViewParams<T>) {\r\n const EmptyTableComponent: ComponentType<ITableProps<T>> = () => null\r\n // Table mode: Using DataGrid component\r\n const TableInstance = params.tableConfigs ? createTable<T>(params.tableConfigs) : EmptyTableComponent\r\n \r\n // Grid mode: Card/Grid layout (to be implemented later)\r\n const GridInstance: ComponentType<ITableProps<T>> = (props) => {\r\n // TODO: Implement Grid layout component (card-based layout)\r\n // For now, call onApiReady with null since Grid layout is not implemented\r\n React.useEffect(() => {\r\n if (props.onApiReady) {\r\n props.onApiReady(null as any)\r\n }\r\n }, [props.onApiReady])\r\n \r\n return (\r\n <Box sx={{ p: 2, textAlign: 'center', bgcolor: 'grey.100', borderRadius: 1 }}>\r\n 🏗️ Grid Layout Mode - Coming Soon\r\n <br />\r\n <small>Will display items in card/grid format</small>\r\n </Box>\r\n )\r\n }\r\n\r\n class DataView extends Component<IDataViewProps<T>, IDataViewState> {\r\n constructor(props: IDataViewProps<T>) {\r\n super(props)\r\n this.state = {\r\n mode: params.initialState?.mode || EDataViewMode.Table,\r\n tableApiRef: null,\r\n gridApiRef: null\r\n }\r\n }\r\n\r\n handleTableApiReady = (api: GridApi) => {\r\n this.setState({ tableApiRef: api })\r\n }\r\n\r\n handleGridApiReady = (api: GridApi) => {\r\n this.setState({ gridApiRef: api })\r\n }\r\n\r\n render() {\r\n const issueWarning = this.renderIssue()\r\n\r\n if (issueWarning) {\r\n return issueWarning\r\n }\r\n\r\n return (\r\n <Box>\r\n <Box>\r\n {/* Custom Toolbar with Column Button */}\r\n <CustomToolbar \r\n tableApiRef={this.state.tableApiRef}\r\n gridApiRef={this.state.gridApiRef}\r\n currentMode={this.state.mode}\r\n showColumnsButton={true}\r\n >\r\n <ToggleButtons />\r\n </CustomToolbar>\r\n </Box>\r\n <SwitchDataViewWithMode \r\n mode={this.state.mode} \r\n Table={<TableInstance {...this.props} onApiReady={this.handleTableApiReady} />} \r\n Grid={<GridInstance {...this.props} onApiReady={this.handleGridApiReady} />} \r\n />\r\n </Box>\r\n )\r\n }\r\n\r\n renderIssue() {\r\n const { tableConfigs, gridConfigs } = params\r\n\r\n if (!tableConfigs && !gridConfigs) {\r\n return (\r\n <Box sx={{ p: 2, bgcolor: 'warning.light', color: 'warning.contrastText', borderRadius: 1 }}>\r\n ⚠️ Missing configuration: At least tableConfigs is required for Table mode (DataGrid), \r\n or you can configure both tableConfigs and gridConfigs for dual-mode support\r\n </Box>\r\n )\r\n }\r\n\r\n return null\r\n }\r\n }\r\n\r\n return DataView\r\n}\r\n\r\nexport default createDataView\r\n"],"names":["createDataView","params","TableInstance","tableConfigs","createTable","GridInstance","props","React","useEffect","onApiReady","_jsxs","Box","sx","p","textAlign","bgcolor","borderRadius","children","_jsx","DataView","_params$initialState","_this","_classCallCheck","_callSuper","_defineProperty","api","setState","tableApiRef","gridApiRef","state","mode","initialState","EDataViewMode","Table","_inherits","Component","_createClass","key","value","issueWarning","this","renderIssue","CustomToolbar","currentMode","showColumnsButton","ToggleButtons","SwitchDataViewWithMode","_objectSpread","handleTableApiReady","Grid","handleGridApiReady","gridConfigs","color"],"mappings":"oeA4CA,SAASA,EAA4CC,GACnD,IAEMC,EAAgBD,EAAOE,aAAeC,EAAeH,EAAOE,cAFP,WAAlC,OAAwC,IAAI,EAK/DE,EAA8C,SAACC,GASnD,OANAC,EAAMC,WAAU,WACVF,EAAMG,YACRH,EAAMG,WAAW,KAErB,GAAG,CAACH,EAAMG,aAGRC,EAACC,EAAG,CAACC,GAAI,CAAEC,EAAG,EAAGC,UAAW,SAAUC,QAAS,WAAYC,aAAc,GAAGC,SAAA,CAAA,qCAE1EC,EAAM,KAAA,IACNA,EAAqD,QAAA,CAAAD,SAAA,6CAG1D,EAiED,kBA9DE,SAAAE,EAAYb,GAAwB,IAAAc,EAAAC,EAMjC,OANiCC,OAAAH,GAClCE,EAAAE,EAAAJ,KAAAA,GAAMb,IAAMkB,EAAAH,EAQQ,uBAAA,SAACI,GACrBJ,EAAKK,SAAS,CAAEC,YAAaF,OAC9BD,EAAAH,EAEoB,sBAAA,SAACI,GACpBJ,EAAKK,SAAS,CAAEE,WAAYH,OAZ5BJ,EAAKQ,MAAQ,CACXC,MAAyB,QAAnBV,EAAAnB,EAAO8B,oBAAY,IAAAX,OAAA,EAAnBA,EAAqBU,OAAQE,EAAcC,MACjDN,YAAa,KACbC,WAAY,MACbP,CACH,CAAC,OAAAa,EAAAf,EARoBgB,GAQpBC,EAAAjB,EAAA,CAAA,CAAAkB,IAAA,SAAAC,MAUD,WACE,IAAMC,EAAeC,KAAKC,cAE1B,OAAIF,GAKF7B,EAACC,aACCO,EAACP,YAECO,EAACwB,GACCf,YAAaa,KAAKX,MAAMF,YACxBC,WAAYY,KAAKX,MAAMD,WACvBe,YAAaH,KAAKX,MAAMC,KACxBc,mBAAmB,EAAI3B,SAEvBC,EAAC2B,EAAa,CAAA,OAGlB3B,EAAC4B,GACChB,KAAMU,KAAKX,MAAMC,KACjBG,MAAOf,EAAChB,EAAa6C,EAAAA,EAAA,CAAA,EAAKP,KAAKlC,OAAK,GAAA,CAAEG,WAAY+B,KAAKQ,uBACvDC,KAAM/B,EAACb,EAAY0C,EAAAA,EAAA,CAAA,EAAKP,KAAKlC,OAAK,GAAA,CAAEG,WAAY+B,KAAKU,0BAI7D,GAAC,CAAAb,IAAA,cAAAC,MAED,WACE,IAAQnC,EAA8BF,EAA9BE,aAAcgD,EAAgBlD,EAAhBkD,YAEtB,OAAKhD,GAAiBgD,EASf,KAPHjC,EAACP,EAAI,CAAAC,GAAI,CAAEC,EAAG,EAAGE,QAAS,gBAAiBqC,MAAO,uBAAwBpC,aAAc,GAGlFC,SAAA,uKAKZ,IAAC,GAIL"}
@@ -0,0 +1,2 @@
1
+ import{jsx as r}from"react/jsx-runtime";import{useGridApiRef as t,DataGrid as o}from"@mui/x-data-grid";import{forwardRef as n,useImperativeHandle as e,useEffect as i}from"react";import{generateColumns as u}from"./helpers.js";function a(a){var m=u(a.columns);return n((function(n,u){var c,d=t();e(u,(function(){return d.current}),[]),i((function(){n.onApiReady&&d.current&&n.onApiReady(d.current)}),[n.onApiReady]);var f=(null===(c=n.data)||void 0===c?void 0:c.items)||[];return r(o,{apiRef:d,getRowId:a.getRowId,columns:m,rows:f})}))}export{a as default};
2
+ //# sourceMappingURL=create.table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.table.js","sources":["../../src/data-view/create.table.tsx"],"sourcesContent":["import { DataGrid, GridValidRowModel, GridRowSelectionModel, GridApi, useGridApiRef } from '@mui/x-data-grid'\r\nimport { ComponentType, forwardRef, useImperativeHandle, useEffect } from 'react'\r\nimport { IDataViewData, IDataViewPropsBase, ITableColDef, ITableConfigs } from './types'\r\nimport { generateColumns } from './helpers'\r\nimport { styled, Box, Paper, Typography, useTheme, alpha } from '@mui/material'\r\nimport { useState } from 'react'\r\n\r\nexport interface ITableProps<T extends GridValidRowModel> extends IDataViewPropsBase<T> {\r\n onRowSelectionChange?: (selection: GridRowSelectionModel) => void\r\n onApiReady?: (api: GridApi) => void\r\n}\r\n\r\nfunction createTable<T extends GridValidRowModel>(configs: ITableConfigs<T>): ComponentType<ITableProps<T>> {\r\n const columnsData = generateColumns(configs.columns)\r\n\r\n const Table = forwardRef<GridApi, ITableProps<T>>((props, ref) => {\r\n const apiRef = useGridApiRef()\r\n\r\n useImperativeHandle(ref, () => apiRef.current, [])\r\n\r\n // Call onApiReady when component mounts and API is ready\r\n useEffect(() => {\r\n if (props.onApiReady && apiRef.current) {\r\n props.onApiReady(apiRef.current)\r\n }\r\n }, [props.onApiReady])\r\n\r\n const items = props.data?.items || []\r\n return (\r\n <DataGrid\r\n apiRef={apiRef}\r\n getRowId={configs.getRowId}\r\n columns={columnsData}\r\n rows={items}\r\n // columnVisibilityModel={{}}\r\n />\r\n )\r\n })\r\n\r\n return Table\r\n}\r\n\r\nexport default createTable\r\n"],"names":["createTable","configs","columnsData","generateColumns","columns","forwardRef","props","ref","_props$data","apiRef","useGridApiRef","useImperativeHandle","current","useEffect","onApiReady","items","data","_jsx","DataGrid","getRowId","rows"],"mappings":"iOAYA,SAASA,EAAyCC,GAChD,IAAMC,EAAcC,EAAgBF,EAAQG,SA0B5C,OAxBcC,GAAoC,SAACC,EAAOC,GAAO,IAAAC,EACzDC,EAASC,IAEfC,EAAoBJ,GAAK,WAAA,OAAME,EAAOG,OAAO,GAAE,IAG/CC,GAAU,WACJP,EAAMQ,YAAcL,EAAOG,SAC7BN,EAAMQ,WAAWL,EAAOG,QAE5B,GAAG,CAACN,EAAMQ,aAEV,IAAMC,GAAkB,QAAVP,EAAAF,EAAMU,YAANR,IAAUA,OAAVA,EAAAA,EAAYO,QAAS,GACnC,OACEE,EAACC,EAAQ,CACPT,OAAQA,EACRU,SAAUlB,EAAQkB,SAClBf,QAASF,EACTkB,KAAML,GAIZ,GAGF"}
@@ -0,0 +1,2 @@
1
+ import{jsxs as e,jsx as l}from"react/jsx-runtime";import{Box as i,Tooltip as n,IconButton as r}from"@mui/material";import a from"@mui/icons-material/ViewColumn";var o=function(o){var t=o.currentMode,m=void 0===t?"Table":t,u=o.showColumnsButton,s=void 0===u||u,d=o.tableApiRef;o.gridApiRef;var c=o.children,f="Table"===m?d:null;return e(i,{sx:{display:"flex",alignItems:"center",gap:1,p:1},children:[s&&l(n,{title:"Table"===m?"Show/Hide Columns":"Column management only available in Table mode",children:l("span",{children:l(r,{onClick:function(){f&&f.showPreferences("columns")},disabled:!("Table"===m&&f),size:"small",children:l(a,{})})})}),c]})};o.defaultProps={currentMode:"Table",showColumnsButton:!0,tableApiRef:null,gridApiRef:null};export{o as CustomToolbar,o as default};
2
+ //# sourceMappingURL=custom-toolbar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-toolbar.js","sources":["../../src/data-view/custom-toolbar.tsx"],"sourcesContent":["import React from 'react'\r\nimport { Box, IconButton, Tooltip } from '@mui/material'\r\nimport { GridApi } from '@mui/x-data-grid'\r\nimport ViewColumnIcon from '@mui/icons-material/ViewColumn'\r\n\r\nexport interface ICustomToolbarProps {\r\n tableApiRef?: GridApi | null // API ref for Table mode (DataGrid)\r\n gridApiRef?: GridApi | null // API ref for Grid mode (Card layout) - future\r\n currentMode?: 'Table' | 'Grid'\r\n showColumnsButton?: boolean // Only works in Table mode\r\n children?: React.ReactNode\r\n}\r\n\r\nexport const CustomToolbar: React.FC<ICustomToolbarProps> = (props) => {\r\n const { currentMode = 'Table', showColumnsButton = true, tableApiRef, gridApiRef, children } = props\r\n\r\n // Get the current API reference based on the active mode\r\n // Note: Column button only works in Table mode (DataGrid)\r\n const currentApiRef = currentMode === 'Table' ? tableApiRef : null\r\n const isColumnButtonEnabled = currentMode === 'Table' && currentApiRef\r\n\r\n const handleColumnsButtonClick = () => {\r\n if (currentApiRef) {\r\n currentApiRef.showPreferences('columns' as any)\r\n }\r\n }\r\n\r\n return (\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, p: 1 }}>\r\n {showColumnsButton && (\r\n <Tooltip title={currentMode === 'Table' ? 'Show/Hide Columns' : 'Column management only available in Table mode'}>\r\n <span>\r\n <IconButton onClick={handleColumnsButtonClick} disabled={!isColumnButtonEnabled} size='small'>\r\n <ViewColumnIcon />\r\n </IconButton>\r\n </span>\r\n </Tooltip>\r\n )}\r\n {/* Additional toolbar items */}\r\n {children}\r\n </Box>\r\n )\r\n}\r\n\r\nCustomToolbar.defaultProps = {\r\n currentMode: 'Table',\r\n showColumnsButton: true,\r\n tableApiRef: null,\r\n gridApiRef: null\r\n}\r\n\r\nexport default CustomToolbar\r\n"],"names":["CustomToolbar","props","_props$currentMode","currentMode","_props$showColumnsBut","showColumnsButton","tableApiRef","gridApiRef","children","currentApiRef","_jsxs","Box","sx","display","alignItems","gap","p","_jsx","Tooltip","title","IconButton","onClick","showPreferences","disabled","size","ViewColumnIcon","defaultProps"],"mappings":"qKAaaA,EAA+C,SAACC,GAC3D,IAAAC,EAA+FD,EAAvFE,YAAAA,OAAc,IAAHD,EAAG,QAAOA,EAAAE,EAAkEH,EAAhEI,kBAAAA,OAAoB,IAAHD,GAAOA,EAAEE,EAAsCL,EAAtCK,YAAsCL,EAAzBM,WAAYC,IAAAA,EAAaP,EAAbO,SAI5EC,EAAgC,UAAhBN,EAA0BG,EAAc,KAS9D,OACEI,EAACC,EAAG,CAACC,GAAI,CAAEC,QAAS,OAAQC,WAAY,SAAUC,IAAK,EAAGC,EAAG,aAC1DX,GACCY,EAACC,EAAQ,CAAAC,MAAuB,UAAhBhB,EAA0B,oBAAsB,iDAC9DK,SAAAS,EAAA,OAAA,CAAAT,SACES,EAACG,GAAWC,QAXW,WAC3BZ,GACFA,EAAca,gBAAgB,UAEjC,EAOwDC,WAbX,UAAhBpB,GAA2BM,GAakCe,KAAK,QAAOhB,SAC3FS,EAACQ,EAAc,CAAA,SAMtBjB,IAGP,EAEAR,EAAc0B,aAAe,CAC3BvB,YAAa,QACbE,mBAAmB,EACnBC,YAAa,KACbC,WAAY"}
@@ -0,0 +1,2 @@
1
+ import{objectSpread2 as r}from"../_virtual/_rollupPluginBabelHelpers.js";var e=function(e,t){return Object.keys(e).map((function(t){return r({field:t},e[t])}))};export{e as generateColumns};
2
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sources":["../../src/data-view/helpers.ts"],"sourcesContent":["import { GridColDef, GridValidRowModel } from '@mui/x-data-grid'\r\nimport { ITableColDef } from './types'\r\n// import { filterOperators } from './filter-operators'\r\n\r\nexport interface IGenerateColumnsOptions {\r\n extendColDefs?: GridColDef[]\r\n // filterOperators?: (colDef: GridColDef) => GridColDef['filterOperators']\r\n}\r\n\r\nexport const generateColumns = <T extends GridValidRowModel>(cols: ITableColDef<T>, options?: IGenerateColumnsOptions): GridColDef[] => {\r\n const columns = Object.keys(cols).map<GridColDef>((key) => {\r\n const obj = { field: key, ...cols[key] }\r\n // obj.filterOperators = options?.filterOperators ? options.filterOperators(obj) : filterOperators(obj)\r\n return obj\r\n })\r\n if (!!options?.extendColDefs && options.extendColDefs.length > 0) columns.push(...options.extendColDefs)\r\n return columns\r\n}\r\n"],"names":["generateColumns","cols","options","Object","keys","map","key","_objectSpread","field"],"mappings":"yEASO,IAAMA,EAAkB,SAA8BC,EAAuBC,GAOlF,OANgBC,OAAOC,KAAKH,GAAMI,KAAgB,SAACC,GAGjD,OAFSC,EAAA,CAAKC,MAAOF,GAAQL,EAAKK,GAGpC,GAGF"}
@@ -0,0 +1,2 @@
1
+ import{createClass as e,classCallCheck as a,defineProperty as r}from"../_virtual/_rollupPluginBabelHelpers.js";import t from"./create.data-view.js";export{EDataViewMode}from"./types.js";var s=new(e((function e(){a(this,e),r(this,"createDataView",t)})));export{s as DinoDataView};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../src/data-view/index.ts"],"sourcesContent":["import createDataView from './create.data-view'\r\n\r\nexport * from './types'\r\n\r\nclass DinoDataViewBase {\r\n createDataView = createDataView\r\n}\r\n\r\nexport const DinoDataView = new DinoDataViewBase()\r\n"],"names":["DinoDataView","_createClass","DinoDataViewBase","_classCallCheck","_defineProperty","createDataView"],"mappings":"0LAEuB,IAMVA,EAAe,IAJNC,GAAA,SAAAC,IAAAC,OAAAD,GAAAE,wBACHC,EAAc"}
@@ -0,0 +1,2 @@
1
+ var r;!function(r){r.Table="Table",r.Grid="Grid"}(r||(r={}));export{r as EDataViewMode};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sources":["../../src/data-view/types.ts"],"sourcesContent":["import { GridColDef, GridLogicOperator, GridPaginationModel, GridRowIdGetter, GridSortDirection, GridValidRowModel } from '@mui/x-data-grid'\r\n\r\n//#region Common\r\nexport enum EDataViewMode {\r\n Table = 'Table',\r\n Grid = 'Grid'\r\n}\r\n\r\n// export enum ELogic {\r\n// And,\r\n// Or\r\n// }\r\n\r\n// export enum EOperator {\r\n// GreaterThan,\r\n// LessThan,\r\n// GreaterThanOrEqual,\r\n// LessThanOrEqual,\r\n// NotEqual,\r\n// Equal,\r\n// Contains\r\n// }\r\n\r\n// export enum EOrder {\r\n// Ascending,\r\n// Descending\r\n// }\r\n\r\n//#endregion\r\n\r\n//#region Table\r\nexport type ITableColDef<T extends GridValidRowModel> = {\r\n [key in keyof T]?: Omit<GridColDef, 'field'>\r\n}\r\n\r\n// export interface ITableSortDef<T> {\r\n// field: keyof T\r\n// sort: GridSortDirection\r\n// }\r\n\r\n// export interface ITableFilterItemDef<T> {\r\n// id?: number | string\r\n// field: keyof T\r\n// value?: any\r\n// operator: GridLogicOperator\r\n// }\r\n\r\n// export interface ITableFilterDef<T> {\r\n// items: ITableFilterItemDef<T>[]\r\n// logicOperator?: GridLogicOperator\r\n// quickFilterValues?: any[]\r\n// quickFilterLogicOperator?: GridLogicOperator\r\n// quickFilterExcludeHiddenColumns?: boolean\r\n// }\r\n\r\n// export type ITableFilterDetail = 'filter' | 'quickSearch' | 'sort' | 'pagination' | undefined\r\n\r\n// export interface ITableFilter<T> {\r\n// filter?: ITableFilterDef<T>\r\n// pagination?: GridPaginationModel\r\n// sort?: ITableSortDef<T>[]\r\n// loading?: boolean\r\n// detail?: ITableFilterDetail\r\n// }\r\n\r\nexport interface ITableConfigs<T extends GridValidRowModel> {\r\n getRowId: GridRowIdGetter<T>\r\n columns: ITableColDef<T>\r\n // featureMode?: GridFeatureMode\r\n // columnVisibilityModel?: Partial<Record<keyof T, boolean>>\r\n // filterOperators?: (config: GridColDef) => GridFilterOperator[]\r\n // actionRow?: Omit<GridColDef, 'field'>\r\n}\r\n\r\n//#endregion\r\n\r\n//#region DataView\r\nexport interface IDataViewInitial {\r\n mode?: EDataViewMode\r\n}\r\n\r\nexport interface IDataViewData<T extends GridValidRowModel> {\r\n items?: T[]\r\n rowTotal?: number\r\n}\r\n\r\nexport interface IDataViewPropsBase<T extends GridValidRowModel> {\r\n data?: IDataViewData<T>\r\n filter?: any\r\n onFilterChange?: (filter: any) => void\r\n}\r\n//#endregion\r\n"],"names":["EDataViewMode"],"mappings":"IAGYA,GAAZ,SAAYA,GACVA,EAAA,MAAA,QACAA,EAAA,KAAA,MACD,CAHD,CAAYA,IAAAA,EAGX,CAAA"}
@@ -0,0 +1,2 @@
1
+ import{slicedToArray as r}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as e,jsx as i}from"react/jsx-runtime";import a,{useMemo as o}from"react";import{styled as l,SvgIcon as m,ToggleButtonGroup as t,ToggleButton as n}from"@mui/material";import{EDataViewMode as s}from"./types.js";import c from"@mui/icons-material/ViewList";import d from"@mui/icons-material/ViewModule";var u=function(r){var e=o((function(){return r.mode===s.Table?r.Table:r.Grid}),[r.mode]);return i("div",{children:e})},f=function(){var o=a.useState("list"),l=r(o,2),m=l[0],u=l[1];return e(t,{size:"small",value:m,exclusive:!0,onChange:function(r,e){u(e)},children:[i(n,{color:m===s.Table?"primary":"standard",value:s.Table,"aria-label":s.Table,children:i(c,{})}),i(n,{color:m===s.Grid?"primary":"standard",value:s.Grid,"aria-label":s.Grid,children:i(d,{})})]})};l(m)({':where([data-mui-color-scheme="light"]) .no-rows-primary':{fill:"rgb(174, 184, 194)"},':where([data-mui-color-scheme="light"]) .no-rows-secondary':{fill:"rgb(232, 234, 237)"},':where([data-mui-color-scheme="dark"]) .no-rows-primary':{fill:"rgb(255, 255, 255)"},':where([data-mui-color-scheme="dark"]) .no-rows-secondary':{fill:"rgb(200, 200, 200)"}});export{u as SwitchDataViewWithMode,f as ToggleButtons};
2
+ //# sourceMappingURL=ui.units.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.units.js","sources":["../../src/data-view/ui.units.tsx"],"sourcesContent":["import React, { FC, ReactNode, useMemo } from 'react'\r\nimport { styled, SvgIcon, SvgIconProps, ToggleButton, ToggleButtonGroup } from '@mui/material'\r\nimport { EDataViewMode } from './types'\r\nimport ViewListIcon from '@mui/icons-material/ViewList'\r\nimport ViewModuleIcon from '@mui/icons-material/ViewModule'\r\n\r\nexport interface ISwitchDataViewWithModeProps {\r\n mode?: EDataViewMode\r\n Table: ReactNode\r\n Grid: ReactNode\r\n}\r\n\r\nexport const SwitchDataViewWithMode: FC<ISwitchDataViewWithModeProps> = (props) => {\r\n const children = useMemo(() => {\r\n return props.mode === EDataViewMode.Table ? props.Table : props.Grid\r\n }, [props.mode])\r\n return <div>{children}</div>\r\n}\r\n\r\nexport const ToggleButtons: FC = () => {\r\n const [view, setView] = React.useState('list')\r\n\r\n const handleChange = (event: React.MouseEvent<HTMLElement>, nextView: string) => {\r\n setView(nextView)\r\n }\r\n\r\n return (\r\n <ToggleButtonGroup size='small' value={view} exclusive onChange={handleChange}>\r\n <ToggleButton color={view === EDataViewMode.Table ? 'primary' : 'standard'} value={EDataViewMode.Table} aria-label={EDataViewMode.Table}>\r\n <ViewListIcon />\r\n </ToggleButton>\r\n <ToggleButton color={view === EDataViewMode.Grid ? 'primary' : 'standard'} value={EDataViewMode.Grid} aria-label={EDataViewMode.Grid}>\r\n <ViewModuleIcon />\r\n </ToggleButton>\r\n </ToggleButtonGroup>\r\n )\r\n}\r\n\r\nexport const NoDataIcon: FC<SvgIconProps> = (props) => (\r\n <NoDataIconStyled {...props} viewBox='0 0 452 257' fill='none' width='96' focusable='false'>\r\n <path\r\n className='no-rows-primary'\r\n d='M348 69c-46.392 0-84 37.608-84 84s37.608 84 84 84 84-37.608 84-84-37.608-84-84-84Zm-104 84c0-57.438 46.562-104 104-104s104 46.562 104 104-46.562 104-104 104-104-46.562-104-104Z'\r\n ></path>\r\n <path\r\n className='no-rows-primary'\r\n d='M308.929 113.929c3.905-3.905 10.237-3.905 14.142 0l63.64 63.64c3.905 3.905 3.905 10.236 0 14.142-3.906 3.905-10.237 3.905-14.142 0l-63.64-63.64c-3.905-3.905-3.905-10.237 0-14.142Z'\r\n ></path>\r\n <path\r\n className='no-rows-primary'\r\n d='M308.929 191.711c-3.905-3.906-3.905-10.237 0-14.142l63.64-63.64c3.905-3.905 10.236-3.905 14.142 0 3.905 3.905 3.905 10.237 0 14.142l-63.64 63.64c-3.905 3.905-10.237 3.905-14.142 0Z'\r\n ></path>\r\n <path\r\n className='no-rows-secondary'\r\n d='M0 10C0 4.477 4.477 0 10 0h380c5.523 0 10 4.477 10 10s-4.477 10-10 10H10C4.477 20 0 15.523 0 10ZM0 59c0-5.523 4.477-10 10-10h231c5.523 0 10 4.477 10 10s-4.477 10-10 10H10C4.477 69 0 64.523 0 59ZM0 106c0-5.523 4.477-10 10-10h203c5.523 0 10 4.477 10 10s-4.477 10-10 10H10c-5.523 0-10-4.477-10-10ZM0 153c0-5.523 4.477-10 10-10h195.5c5.523 0 10 4.477 10 10s-4.477 10-10 10H10c-5.523 0-10-4.477-10-10ZM0 200c0-5.523 4.477-10 10-10h203c5.523 0 10 4.477 10 10s-4.477 10-10 10H10c-5.523 0-10-4.477-10-10ZM0 247c0-5.523 4.477-10 10-10h231c5.523 0 10 4.477 10 10s-4.477 10-10 10H10c-5.523 0-10-4.477-10-10Z'\r\n ></path>\r\n </NoDataIconStyled>\r\n)\r\n\r\nconst NoDataIconStyled = styled(SvgIcon)({\r\n ':where([data-mui-color-scheme=\"light\"]) .no-rows-primary': {\r\n fill: 'rgb(174, 184, 194)'\r\n },\r\n ':where([data-mui-color-scheme=\"light\"]) .no-rows-secondary': {\r\n fill: 'rgb(232, 234, 237)'\r\n },\r\n ':where([data-mui-color-scheme=\"dark\"]) .no-rows-primary': {\r\n fill: 'rgb(255, 255, 255)'\r\n },\r\n ':where([data-mui-color-scheme=\"dark\"]) .no-rows-secondary': {\r\n fill: 'rgb(200, 200, 200)'\r\n }\r\n})\r\n"],"names":["SwitchDataViewWithMode","props","children","useMemo","mode","EDataViewMode","Table","Grid","_jsx","ToggleButtons","_React$useState","React","useState","_React$useState2","_slicedToArray","view","setView","_jsxs","ToggleButtonGroup","size","value","exclusive","onChange","event","nextView","ToggleButton","color","ViewListIcon","ViewModuleIcon","styled","SvgIcon","fill"],"mappings":"oYAYaA,EAA2D,SAACC,GACvE,IAAMC,EAAWC,GAAQ,WACvB,OAAOF,EAAMG,OAASC,EAAcC,MAAQL,EAAMK,MAAQL,EAAMM,IAClE,GAAG,CAACN,EAAMG,OACV,OAAOI,EAAA,MAAA,CAAAN,SAAMA,GACf,EAEaO,EAAoB,WAC/B,IAAAC,EAAwBC,EAAMC,SAAS,QAAOC,EAAAC,EAAAJ,EAAA,GAAvCK,EAAIF,EAAA,GAAEG,EAAOH,EAAA,GAMpB,OACEI,EAACC,GAAkBC,KAAK,QAAQC,MAAOL,EAAMM,WAAS,EAACC,SALpC,SAACC,EAAsCC,GAC1DR,EAAQQ,EACT,YAIGhB,EAACiB,EAAa,CAAAC,MAAOX,IAASV,EAAcC,MAAQ,UAAY,WAAYc,MAAOf,EAAcC,MAAK,aAAcD,EAAcC,MAChIJ,SAAAM,EAACmB,EAAe,CAAA,KAElBnB,EAACiB,GAAaC,MAAOX,IAASV,EAAcE,KAAO,UAAY,WAAYa,MAAOf,EAAcE,KAAI,aAAcF,EAAcE,cAC9HC,EAACoB,UAIT,EAuByBC,EAAOC,EAAPD,CAAgB,CACvC,2DAA4D,CAC1DE,KAAM,sBAER,6DAA8D,CAC5DA,KAAM,sBAER,0DAA2D,CACzDA,KAAM,sBAER,4DAA6D,CAC3DA,KAAM"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as e,objectWithoutProperties as t,objectSpread2 as n,inherits as r,createClass as o,classCallCheck as i,callSuper as l}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as s,jsxs as c}from"react/jsx-runtime";import{createRef as a,Component as u}from"react";import{styled as p,Box as m,IconButton as d,Typography as h,Tooltip as f}from"@mui/material";import g from"@mui/icons-material/Fullscreen";import v from"@mui/icons-material/FullscreenExit";import{getErrorMessage as x}from"./helpers.js";import"../components/breadcrumbs.js";import"../components/buttons.js";import"clipboard-copy";import"@mui/icons-material/Done";import"@mui/icons-material/ContentCopy";import"../components/create.multi-select-dropdown.js";import"../components/help-tooltip.js";import F,{textEditorClasses as C}from"../components/text-editor.js";var b=["children"];function y(t){return function(){function n(t){var r;return i(this,n),r=l(this,n,[t]),e(r,"handleFullscreenChange",(function(){r.setState({isFullscreen:!!document.fullscreenElement})})),e(r,"handleFullscreenToggle",(function(){r.contentRef.current&&(document.fullscreenElement?document.exitFullscreen():r.contentRef.current.requestFullscreen().catch((function(e){console.error("Error attempting to enable full-screen mode: ".concat(e.message))})))})),e(r,"getWrapClasses",(function(){var e=[];return r.state.isFullscreen&&e.push(C.fullscreen),e.join(" ")})),r.state={isFullscreen:!1},r.contentRef=a(),r}return r(n,u),o(n,[{key:"componentDidMount",value:function(){document.addEventListener("fullscreenchange",this.handleFullscreenChange)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("fullscreenchange",this.handleFullscreenChange)}},{key:"render",value:function(){var e,n,r,o,i,l=this,a=x(this.props.messageErrors,this.props.name),u=null!==(e=null===(n=this.props.name?null===(r=this.props.data)||void 0===r?void 0:r[this.props.name]:"")||void 0===n?void 0:n.toString())&&void 0!==e?e:"";return c(m,{id:t.id,ref:this.contentRef,sx:{backgroundColor:"#fff"},children:[this.state.isFullscreen&&s(k,{children:s(h,{variant:"h4",sx:{fontWeight:600,flex:1,textAlign:"center"},children:t.title})}),c(j,{className:this.getWrapClasses(),children:[s(E,{children:s(f,{title:this.state.isFullscreen?"Exit Fullscreen":"Fullscreen",arrow:!0,children:s(S,{sx:{color:"#06c"},onClick:this.handleFullscreenToggle,children:this.state.isFullscreen?s(v,{}):s(g,{})})})}),s(W,{children:s(F,{defautValue:u,name:null!==(o=null===(i=this.props.name)||void 0===i?void 0:i.toString())&&void 0!==o?o:"",readOnly:this.props.disabled,error:a.error,onBlur:function(){var e,t;l.props.name&&(null===(e=(t=l.props).onBlur)||void 0===e||e.call(t,l.props.name))}})})]})]})}}])}()}var j=p(m)((function(t){var n=t.theme;return e(e({maxWidth:n.breakpoints.values.xl,margin:"0 auto",position:"relative"},"&.".concat(C.fullscreen," .").concat(C.root),{height:"calc(100vh - ".concat(74,"px)")}),"&.".concat(C.fullscreen),{width:"871px"})})),k=p(m)({height:"".concat(64,"px"),display:"flex",justifyContent:"center",alignItems:"center"}),E=p((function(e){var r=e.children,o=t(e,b);return s(m,n(n({},o),{},{children:s(m,{children:r})}))}))({position:"sticky",top:"-1px",zIndex:2,"& > div":{height:0,display:"flex",justifyContent:"right",padding:"0 6px"}}),S=p(d)({flex:"0 0 auto",marginTop:"1px",width:"40px",height:"40px"}),W=p(m)({backgroundColor:"#fff",width:"100%","& .ql-container":{fontFamily:'"Roboto", serif',fontSize:"14px"},"& .ql-toolbar":{position:"sticky",top:"-1px",backgroundColor:"#fff",zIndex:1}});export{y as default};
1
+ import{defineProperty as e,objectWithoutProperties as t,objectSpread2 as n,inherits as r,createClass as o,classCallCheck as i,callSuper as l}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as s,jsxs as c}from"react/jsx-runtime";import{Component as a,createRef as u}from"react";import{styled as p,Box as m,IconButton as d,Typography as h,Tooltip as f}from"@mui/material";import g from"@mui/icons-material/Fullscreen";import v from"@mui/icons-material/FullscreenExit";import{getErrorMessage as x}from"./helpers.js";import"../components/breadcrumbs.js";import"../components/buttons.js";import"clipboard-copy";import"@mui/icons-material/Done";import"@mui/icons-material/ContentCopy";import"../components/create.multi-select-dropdown.js";import"../components/help-tooltip.js";import F,{textEditorClasses as C}from"../components/text-editor.js";var b=["children"];function y(t){return function(){function n(t){var r;return i(this,n),r=l(this,n,[t]),e(r,"handleFullscreenChange",(function(){r.setState({isFullscreen:!!document.fullscreenElement})})),e(r,"handleFullscreenToggle",(function(){r.contentRef.current&&(document.fullscreenElement?document.exitFullscreen():r.contentRef.current.requestFullscreen().catch((function(e){console.error("Error attempting to enable full-screen mode: ".concat(e.message))})))})),e(r,"getWrapClasses",(function(){var e=[];return r.state.isFullscreen&&e.push(C.fullscreen),e.join(" ")})),r.state={isFullscreen:!1},r.contentRef=u(),r}return r(n,a),o(n,[{key:"componentDidMount",value:function(){document.addEventListener("fullscreenchange",this.handleFullscreenChange)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("fullscreenchange",this.handleFullscreenChange)}},{key:"render",value:function(){var e,n,r,o,i,l=this,a=x(this.props.messageErrors,this.props.name),u=null!==(e=null===(n=this.props.name?null===(r=this.props.data)||void 0===r?void 0:r[this.props.name]:"")||void 0===n?void 0:n.toString())&&void 0!==e?e:"";return c(m,{id:t.id,ref:this.contentRef,sx:{backgroundColor:"#fff"},children:[this.state.isFullscreen&&s(k,{children:s(h,{variant:"h4",sx:{fontWeight:600,flex:1,textAlign:"center"},children:t.title})}),c(j,{className:this.getWrapClasses(),children:[s(E,{children:s(f,{title:this.state.isFullscreen?"Exit Fullscreen":"Fullscreen",arrow:!0,children:s(S,{sx:{color:"#06c"},onClick:this.handleFullscreenToggle,children:this.state.isFullscreen?s(v,{}):s(g,{})})})}),s(W,{children:s(F,{defautValue:u,name:null!==(o=null===(i=this.props.name)||void 0===i?void 0:i.toString())&&void 0!==o?o:"",readOnly:this.props.disabled,error:a.error,onBlur:function(){var e,t;l.props.name&&(null===(e=(t=l.props).onBlur)||void 0===e||e.call(t,l.props.name))}})})]})]})}}])}()}var j=p(m)((function(t){var n=t.theme;return e(e({maxWidth:n.breakpoints.values.xl,margin:"0 auto",position:"relative"},"&.".concat(C.fullscreen," .").concat(C.root),{height:"calc(100vh - ".concat(74,"px)")}),"&.".concat(C.fullscreen),{width:"871px"})})),k=p(m)({height:"".concat(64,"px"),display:"flex",justifyContent:"center",alignItems:"center"}),E=p((function(e){var r=e.children,o=t(e,b);return s(m,n(n({},o),{},{children:s(m,{children:r})}))}))({position:"sticky",top:"-1px",zIndex:2,"& > div":{height:0,display:"flex",justifyContent:"right",padding:"0 6px"}}),S=p(d)({flex:"0 0 auto",marginTop:"1px",width:"40px",height:"40px"}),W=p(m)({backgroundColor:"#fff",width:"100%","& .ql-container":{fontFamily:'"Roboto", serif',fontSize:"14px"},"& .ql-toolbar":{position:"sticky",top:"-1px",backgroundColor:"#fff",zIndex:1}});export{y as default};
2
2
  //# sourceMappingURL=create.text-editor.js.map
@@ -1,2 +1,2 @@
1
- import{toConsumableArray as r,typeof as n,objectSpread2 as e,createForOfIteratorHelper as t}from"../_virtual/_rollupPluginBabelHelpers.js";import o from"./validator.js";var i=function(r){for(var n=arguments.length,e=new Array(n>1?n-1:0),t=1;t<n;t++)e[t-1]=arguments[t];return e.length<1?r:e.filter((function(r){return r})).reduce((function(r,n){return r=Object.assign(r,n)}),r)},a=function(e){for(var t=arguments.length,o=new Array(t>1?t-1:0),u=1;u<t;u++)o[u-1]=arguments[u];if((o=o.filter((function(r){return!!r}))).length<1)return e;for(var c=[e].concat(r(o)).filter((function(r){return r})),f=c.reduce((function(e,t){if(!t)return e;var o=Object.keys(t).filter((function(r){return"object"===n(t[r])&&!Array.isArray(t[r])}));return e.push.apply(e,r(o)),e}),[]),l=i.apply(void 0,[e].concat(r(c.slice(1)))),s=l,v=c.slice(1).filter((function(r){return!!r})),p=function(){var n=f[y];s[n]=a.apply(void 0,[{},s[n]].concat(r(v.map((function(r){return r[n]})))))},y=0;y<f.length;y++)p();return l},u=function(r,n){return r&&r[n]?e(e({},r[n][0]),{},{error:!0}):{error:!1,message:""}},c=function(r){var n=Array.from(r).reduce((function(r,n){return r[n[0]]?Array.isArray(r[n[0]])?r[n[0]].push(n[1]):r[n[0]]=[r[n[0]],n[1]]:r[n[0]]=n[1],r}),{});return Object.keys(n).forEach((function(r){var e=n[r];"string"!=typeof e||"true"!==e.toString().toLocaleLowerCase()&&"false"!==e.toString().toLocaleLowerCase()||(n[r]="true"===e.toString().toLocaleLowerCase())})),n},f=function(r){if("string"==typeof r)return r.trim();if(Array.isArray(r))return r.map((function(r){return f(r)}));if(r&&"object"===n(r)){var e={};return Object.keys(r).forEach((function(n){e[n]=f(r[n])})),e}return r},l=function(r,n,e,t){var o=t.run(n);if(o){var i=e||{},a=Object.keys(n).filter((function(r){return!!n[r]})).filter((function(r){return n[r]instanceof File&&!!n[r].size}));return a.push(r),a.forEach((function(r){o[r]?i[r]=o[r]:delete i[r]})),i}return null},s=function(r,n){var e,t=null===(e=r.response)||void 0===e?void 0:e.data;if(t){var o=Object.keys(n),i={};return o.forEach((function(r){var n=t[r];Array.isArray(n)&&n.length>0&&(i[r]=[{message:n[0]}])})),i}},v=function(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];for(var i=e.map((function(r){return null==r?void 0:r.configs})).filter((function(r){return!!r})),u=Object.assign.apply(Object,[{}].concat(r(i))),c=function(){var n=Object.keys(u)[f];u[n]=a.apply(void 0,[{}].concat(r(i.map((function(r){return r?r[n]:{Rules:[]}}))))),u[n].Rules=i.map((function(r){return r?r[n]:{Rules:[]}})).reduce((function(n,e){var t;return n.push.apply(n,r(null!==(t=null==e?void 0:e.Rules)&&void 0!==t?t:[])),n}),[])},f=0;f<Object.keys(u).length;f++)c();return new o(u)},p=function(r,n){if(0===r.length)return{valid:!1,message:"File is empty or cannot be parsed"};var e=Object.keys(r[0]),o=n.filter((function(r){return!e.includes(r)}));if(o.length>0)return{valid:!1,message:"Missing required columns: ".concat(o.join(", "))};for(var i=0;i<r.length;i++){var a,u=r[i],c=t(n);try{for(c.s();!(a=c.n()).done;){var f=a.value,l=u[f];if("string"!=typeof l||""===l.trim())return{valid:!1,message:'Invalid or missing value for "'.concat(f.toString(),'" at row ').concat(i+2)}}}catch(r){c.e(r)}finally{c.f()}}return{valid:!0}};export{c as convertFormDataToJson,s as getErrorFromResponse,u as getErrorMessage,l as singleValidate,f as trimAllStrings,p as validateCsvModel,v as validateMerge};
1
+ import{toConsumableArray as r,objectSpread2 as n,typeof as e,createForOfIteratorHelper as t}from"../_virtual/_rollupPluginBabelHelpers.js";import o from"./validator.js";var a=function(r){for(var n=arguments.length,e=new Array(n>1?n-1:0),t=1;t<n;t++)e[t-1]=arguments[t];return e.length<1?r:e.filter((function(r){return r})).reduce((function(r,n){return r=Object.assign(r,n)}),r)},i=function(n){for(var t=arguments.length,o=new Array(t>1?t-1:0),u=1;u<t;u++)o[u-1]=arguments[u];if((o=o.filter((function(r){return!!r}))).length<1)return n;for(var c=[n].concat(r(o)).filter((function(r){return r})),f=c.reduce((function(n,t){if(!t)return n;var o=Object.keys(t).filter((function(r){return"object"===e(t[r])&&!Array.isArray(t[r])}));return n.push.apply(n,r(o)),n}),[]),l=a.apply(void 0,[n].concat(r(c.slice(1)))),s=l,v=c.slice(1).filter((function(r){return!!r})),p=function(){var n=f[y];s[n]=i.apply(void 0,[{},s[n]].concat(r(v.map((function(r){return r[n]})))))},y=0;y<f.length;y++)p();return l},u=function(r,e){return r&&r[e]?n(n({},r[e][0]),{},{error:!0}):{error:!1,message:""}},c=function(r){var n=Array.from(r).reduce((function(r,n){return r[n[0]]?Array.isArray(r[n[0]])?r[n[0]].push(n[1]):r[n[0]]=[r[n[0]],n[1]]:r[n[0]]=n[1],r}),{});return Object.keys(n).forEach((function(r){var e=n[r];"string"!=typeof e||"true"!==e.toString().toLocaleLowerCase()&&"false"!==e.toString().toLocaleLowerCase()||(n[r]="true"===e.toString().toLocaleLowerCase())})),n},f=function(r){return r},l=function(r,n,e,t){var o=t.run(n);if(o){var a=e||{},i=Object.keys(n).filter((function(r){return!!n[r]})).filter((function(r){return n[r]instanceof File&&!!n[r].size}));return i.push(r),i.forEach((function(r){o[r]?a[r]=o[r]:delete a[r]})),a}return null},s=function(r,n){var e,t=null===(e=r.response)||void 0===e?void 0:e.data;if(t){var o=Object.keys(n),a={};return o.forEach((function(r){var n=t[r];Array.isArray(n)&&n.length>0&&(a[r]=[{message:n[0]}])})),a}},v=function(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];for(var a=e.map((function(r){return null==r?void 0:r.configs})).filter((function(r){return!!r})),u=Object.assign.apply(Object,[{}].concat(r(a))),c=function(){var n=Object.keys(u)[f];u[n]=i.apply(void 0,[{}].concat(r(a.map((function(r){return r?r[n]:{Rules:[]}}))))),u[n].Rules=a.map((function(r){return r?r[n]:{Rules:[]}})).reduce((function(n,e){var t;return n.push.apply(n,r(null!==(t=null==e?void 0:e.Rules)&&void 0!==t?t:[])),n}),[])},f=0;f<Object.keys(u).length;f++)c();return new o(u)},p=function(r,n){if(0===r.length)return{valid:!1,message:"File is empty or cannot be parsed"};var e=Object.keys(r[0]),o=n.filter((function(r){return!e.includes(r)}));if(o.length>0)return{valid:!1,message:"Missing required columns: ".concat(o.join(", "))};for(var a=0;a<r.length;a++){var i,u=r[a],c=t(n);try{for(c.s();!(i=c.n()).done;){var f=i.value,l=u[f];if("string"!=typeof l||""===l.trim())return{valid:!1,message:'Invalid or missing value for "'.concat(f.toString(),'" at row ').concat(a+2)}}}catch(r){c.e(r)}finally{c.f()}}return{valid:!0}};export{c as convertFormDataToJson,s as getErrorFromResponse,u as getErrorMessage,l as singleValidate,f as trimAllStrings,p as validateCsvModel,v as validateMerge};
2
2
  //# sourceMappingURL=helpers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sources":["../../src/form/helpers.ts"],"sourcesContent":["import { AxiosError } from 'axios'\r\nimport FormValidator, { IModelError, IRuleOption, IPartialError } from './validator'\r\n\r\ntype IAnyObject = { [key: string]: any }\r\nconst objectAssign = <T extends IAnyObject>(model: T, ...sources: (Partial<T> | undefined)[]) => {\r\n if (sources.length < 1) {\r\n return model\r\n }\r\n const temps = sources.filter((x) => x) as T[]\r\n return temps.reduce((a, b) => {\r\n a = Object.assign(a, b)\r\n return a\r\n }, model)\r\n}\r\n\r\nconst deepMerge = <T extends IAnyObject>(model: T, ...sources: (Partial<T> | undefined)[]) => {\r\n sources = sources.filter((x) => !!x)\r\n if (sources.length < 1) {\r\n return model\r\n }\r\n const temps = [model, ...sources].filter((x) => x)\r\n const fieldObjects = temps.reduce<string[]>((a, b) => {\r\n if (!b) return a\r\n const fields = Object.keys(b).filter((x) => typeof b[x] === 'object' && !Array.isArray(b[x]))\r\n a.push(...fields)\r\n return a\r\n }, [])\r\n\r\n const target = objectAssign<T>(model, ...temps.slice(1))\r\n const temp = target as any\r\n const temp2 = temps.slice(1).filter((x) => !!x) as Partial<T>[]\r\n for (let index = 0; index < fieldObjects.length; index++) {\r\n const element = fieldObjects[index]\r\n temp[element] = deepMerge({}, temp[element], ...temp2.map((x) => x[element]))\r\n }\r\n return target\r\n}\r\n\r\nexport const getErrorMessage = function <TModel>(MessageErrors: IPartialError<TModel> | undefined, key?: keyof TModel): IModelError {\r\n return MessageErrors && (MessageErrors as any)[key] ? { ...(MessageErrors as any)[key][0], error: true } : { error: false, message: '' }\r\n}\r\n\r\ntype IModelBase = {\r\n [key: string]: any\r\n}\r\n\r\nexport const convertFormDataToJson = function <TModel>(form: FormData): Partial<TModel> {\r\n const data = Array.from(form as any).reduce<Partial<TModel>>((a: unknown | any, b: any) => {\r\n if (!a[b[0]]) {\r\n a[b[0]] = b[1]\r\n } else if (Array.isArray(a[b[0]])) {\r\n a[b[0]].push(b[1])\r\n } else {\r\n a[b[0]] = [a[b[0]], b[1]]\r\n }\r\n return a\r\n }, {} as any) as any\r\n\r\n Object.keys(data).forEach((key) => {\r\n const value = data[key]\r\n if (typeof value === 'string' && (value.toString().toLocaleLowerCase() === 'true' || value.toString().toLocaleLowerCase() === 'false')) {\r\n data[key] = value.toString().toLocaleLowerCase() === 'true'\r\n }\r\n })\r\n return data\r\n}\r\n\r\nexport const trimAllStrings = <T>(obj: T): Partial<T> => {\r\n if (typeof obj === 'string') {\r\n return obj.trim() as any\r\n }\r\n if (Array.isArray(obj)) {\r\n return obj.map((item) => trimAllStrings(item)) as any\r\n }\r\n if (obj && typeof obj === 'object') {\r\n const result: any = {}\r\n Object.keys(obj).forEach((key) => {\r\n result[key] = trimAllStrings((obj as any)[key])\r\n })\r\n return result\r\n }\r\n return obj\r\n}\r\n\r\nexport const singleValidate = function <TModel, TPartial = TModel>(\r\n key: keyof TModel,\r\n modelState: TPartial,\r\n MessageErrors: IPartialError<TModel>,\r\n Validator: FormValidator<TPartial>\r\n) {\r\n const messageErrors = Validator.run(modelState) as { [key: string]: any }\r\n if (messageErrors) {\r\n let errors = (MessageErrors || {}) as { [key: string]: any }\r\n const keys = Object.keys(modelState as any)\r\n .filter((key) => !!(modelState as any)[key])\r\n .filter((key) => ((modelState as any)[key] instanceof File ? !!((modelState as any)[key] as File).size : false))\r\n keys.push(key as string)\r\n keys.forEach((key) => {\r\n if (messageErrors[key]) {\r\n errors[key] = messageErrors[key]\r\n } else {\r\n delete errors[key]\r\n }\r\n })\r\n return errors\r\n }\r\n return null\r\n}\r\n\r\nexport const getErrorFromResponse = function <TModel>(error: AxiosError, ModelRender: TModel) {\r\n const data = error.response?.data as any\r\n if (data) {\r\n const keys = Object.keys(ModelRender as any)\r\n const MessageErrors: IPartialError<TModel> | undefined = {}\r\n keys.forEach((key) => {\r\n const messages = data[key]\r\n if (Array.isArray(messages) && messages.length > 0) {\r\n ;(MessageErrors as any)[key] = [{ message: messages[0] }]\r\n }\r\n })\r\n return MessageErrors\r\n }\r\n}\r\n\r\nexport const clearFieldEmpty = <TModel>(model: Extract<TModel, IModelBase>) => {\r\n Object.keys(model).forEach((key: keyof Extract<TModel, IModelBase>) => {\r\n if (!model[key]) delete model[key]\r\n })\r\n}\r\n\r\nexport const validateMerge = <TModel>(...validateor: (FormValidator<TModel> | undefined)[]): FormValidator<TModel> => {\r\n const configs = validateor.map((x) => x?.configs).filter((x) => !!x)\r\n\r\n let temp: any = Object.assign({}, ...configs)\r\n\r\n for (let index = 0; index < Object.keys(temp).length; index++) {\r\n const key = Object.keys(temp)[index]\r\n //merge configs\r\n temp[key] = deepMerge({}, ...configs.map((x) => (x ? x[key] : { Rules: [] })))\r\n //merge rules\r\n temp[key].Rules = configs\r\n .map((x) => (x ? x[key] : { Rules: [] }))\r\n .reduce<IRuleOption<TModel>[]>((a, b) => {\r\n a.push(...(b?.Rules ?? []))\r\n return a\r\n }, [])\r\n }\r\n return new FormValidator(temp)\r\n}\r\n\r\n/**\r\n * Interface representing the result of a CSV validation.\r\n */\r\nexport interface IValidateCsv {\r\n /** Indicates whether the CSV data is valid */\r\n valid: boolean\r\n /** Optional message providing error details if validation fails */\r\n message?: string\r\n}\r\n\r\n/**\r\n * Validates a parsed CSV data array against a list of required column keys.\r\n *\r\n * @param data - An array of objects representing rows parsed from a CSV file.\r\n * @param requiredKeys - An array of keys that must exist in the CSV headers and each row.\r\n * @returns An object indicating whether the data is valid and an optional error message.\r\n */\r\nexport const validateCsvModel = <T extends Record<string, any>>(data: T[], requiredKeys: (keyof T)[]): IValidateCsv => {\r\n // If the data is empty, consider the file invalid\r\n if (data.length === 0) {\r\n return { valid: false, message: 'File is empty or cannot be parsed' }\r\n }\r\n\r\n // Extract headers from the first row\r\n const headers = Object.keys(data[0])\r\n\r\n // Check for missing required columns\r\n const missing = requiredKeys.filter((key) => !headers.includes(key as string))\r\n if (missing.length > 0) {\r\n return { valid: false, message: `Missing required columns: ${missing.join(', ')}` }\r\n }\r\n\r\n // Validate that each required column in each row has a non-empty string value\r\n for (let i = 0; i < data.length; i++) {\r\n const row = data[i]\r\n for (const key of requiredKeys) {\r\n const value = row[key as string]\r\n if (typeof value !== 'string' || value.trim() === '') {\r\n return {\r\n valid: false,\r\n message: `Invalid or missing value for \"${key.toString()}\" at row ${i + 2}` // +2 accounts for header and 0-based index\r\n }\r\n }\r\n }\r\n }\r\n\r\n // All validations passed\r\n return { valid: true }\r\n}\r\n"],"names":["objectAssign","model","_len","arguments","length","sources","Array","_key","filter","x","reduce","a","b","Object","assign","deepMerge","_len2","_key2","temps","concat","_toConsumableArray","fieldObjects","fields","keys","_typeof","isArray","push","apply","target","slice","temp","temp2","_loop","element","index","map","getErrorMessage","MessageErrors","key","_objectSpread","error","message","convertFormDataToJson","form","data","from","forEach","value","toString","toLocaleLowerCase","trimAllStrings","obj","trim","item","result","singleValidate","modelState","Validator","messageErrors","run","errors","File","size","getErrorFromResponse","ModelRender","_error$response","response","messages","validateMerge","_len3","validateor","_key3","configs","_loop2","Rules","_b$Rules","FormValidator","validateCsvModel","requiredKeys","valid","headers","missing","includes","join","i","_step","row","_iterator","_createForOfIteratorHelper","s","n","done","err","e","f"],"mappings":"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"}
1
+ {"version":3,"file":"helpers.js","sources":["../../src/form/helpers.ts"],"sourcesContent":["import { AxiosError } from 'axios'\r\nimport FormValidator, { IModelError, IRuleOption, IPartialError } from './validator'\r\n\r\ntype IAnyObject = { [key: string]: any }\r\nconst objectAssign = <T extends IAnyObject>(model: T, ...sources: (Partial<T> | undefined)[]) => {\r\n if (sources.length < 1) {\r\n return model\r\n }\r\n const temps = sources.filter((x) => x) as T[]\r\n return temps.reduce((a, b) => {\r\n a = Object.assign(a, b)\r\n return a\r\n }, model)\r\n}\r\n\r\nconst deepMerge = <T extends IAnyObject>(model: T, ...sources: (Partial<T> | undefined)[]) => {\r\n sources = sources.filter((x) => !!x)\r\n if (sources.length < 1) {\r\n return model\r\n }\r\n const temps = [model, ...sources].filter((x) => x)\r\n const fieldObjects = temps.reduce<string[]>((a, b) => {\r\n if (!b) return a\r\n const fields = Object.keys(b).filter((x) => typeof b[x] === 'object' && !Array.isArray(b[x]))\r\n a.push(...fields)\r\n return a\r\n }, [])\r\n\r\n const target = objectAssign<T>(model, ...temps.slice(1))\r\n const temp = target as any\r\n const temp2 = temps.slice(1).filter((x) => !!x) as Partial<T>[]\r\n for (let index = 0; index < fieldObjects.length; index++) {\r\n const element = fieldObjects[index]\r\n temp[element] = deepMerge({}, temp[element], ...temp2.map((x) => x[element]))\r\n }\r\n return target\r\n}\r\n\r\nexport const getErrorMessage = function <TModel>(MessageErrors: IPartialError<TModel> | undefined, key?: keyof TModel): IModelError {\r\n return MessageErrors && (MessageErrors as any)[key] ? { ...(MessageErrors as any)[key][0], error: true } : { error: false, message: '' }\r\n}\r\n\r\ntype IModelBase = {\r\n [key: string]: any\r\n}\r\n\r\nexport const convertFormDataToJson = function <TModel>(form: FormData): Partial<TModel> {\r\n const data = Array.from(form as any).reduce<Partial<TModel>>((a: unknown | any, b: any) => {\r\n if (!a[b[0]]) {\r\n a[b[0]] = b[1]\r\n } else if (Array.isArray(a[b[0]])) {\r\n a[b[0]].push(b[1])\r\n } else {\r\n a[b[0]] = [a[b[0]], b[1]]\r\n }\r\n return a\r\n }, {} as any) as any\r\n\r\n Object.keys(data).forEach((key) => {\r\n const value = data[key]\r\n if (typeof value === 'string' && (value.toString().toLocaleLowerCase() === 'true' || value.toString().toLocaleLowerCase() === 'false')) {\r\n data[key] = value.toString().toLocaleLowerCase() === 'true'\r\n }\r\n })\r\n return data\r\n}\r\n\r\nexport const trimAllStrings = <T>(obj: T): Partial<T> => {\r\n // if (typeof obj === 'string') {\r\n // return obj.trim() as any\r\n // }\r\n // if (Array.isArray(obj)) {\r\n // return obj.map((item) => trimAllStrings(item)) as any\r\n // }\r\n // if (obj && typeof obj === 'object') {\r\n // const result: any = {}\r\n // Object.keys(obj).forEach((key) => {\r\n // result[key] = trimAllStrings((obj as any)[key])\r\n // })\r\n // return result\r\n // }\r\n return obj\r\n}\r\n\r\nexport const singleValidate = function <TModel, TPartial = TModel>(\r\n key: keyof TModel,\r\n modelState: TPartial,\r\n MessageErrors: IPartialError<TModel>,\r\n Validator: FormValidator<TPartial>\r\n) {\r\n const messageErrors = Validator.run(modelState) as { [key: string]: any }\r\n if (messageErrors) {\r\n let errors = (MessageErrors || {}) as { [key: string]: any }\r\n const keys = Object.keys(modelState as any)\r\n .filter((key) => !!(modelState as any)[key])\r\n .filter((key) => ((modelState as any)[key] instanceof File ? !!((modelState as any)[key] as File).size : false))\r\n keys.push(key as string)\r\n keys.forEach((key) => {\r\n if (messageErrors[key]) {\r\n errors[key] = messageErrors[key]\r\n } else {\r\n delete errors[key]\r\n }\r\n })\r\n return errors\r\n }\r\n return null\r\n}\r\n\r\nexport const getErrorFromResponse = function <TModel>(error: AxiosError, ModelRender: TModel) {\r\n const data = error.response?.data as any\r\n if (data) {\r\n const keys = Object.keys(ModelRender as any)\r\n const MessageErrors: IPartialError<TModel> | undefined = {}\r\n keys.forEach((key) => {\r\n const messages = data[key]\r\n if (Array.isArray(messages) && messages.length > 0) {\r\n ;(MessageErrors as any)[key] = [{ message: messages[0] }]\r\n }\r\n })\r\n return MessageErrors\r\n }\r\n}\r\n\r\nexport const clearFieldEmpty = <TModel>(model: Extract<TModel, IModelBase>) => {\r\n Object.keys(model).forEach((key: keyof Extract<TModel, IModelBase>) => {\r\n if (!model[key]) delete model[key]\r\n })\r\n}\r\n\r\nexport const validateMerge = <TModel>(...validateor: (FormValidator<TModel> | undefined)[]): FormValidator<TModel> => {\r\n const configs = validateor.map((x) => x?.configs).filter((x) => !!x)\r\n\r\n let temp: any = Object.assign({}, ...configs)\r\n\r\n for (let index = 0; index < Object.keys(temp).length; index++) {\r\n const key = Object.keys(temp)[index]\r\n //merge configs\r\n temp[key] = deepMerge({}, ...configs.map((x) => (x ? x[key] : { Rules: [] })))\r\n //merge rules\r\n temp[key].Rules = configs\r\n .map((x) => (x ? x[key] : { Rules: [] }))\r\n .reduce<IRuleOption<TModel>[]>((a, b) => {\r\n a.push(...(b?.Rules ?? []))\r\n return a\r\n }, [])\r\n }\r\n return new FormValidator(temp)\r\n}\r\n\r\n/**\r\n * Interface representing the result of a CSV validation.\r\n */\r\nexport interface IValidateCsv {\r\n /** Indicates whether the CSV data is valid */\r\n valid: boolean\r\n /** Optional message providing error details if validation fails */\r\n message?: string\r\n}\r\n\r\n/**\r\n * Validates a parsed CSV data array against a list of required column keys.\r\n *\r\n * @param data - An array of objects representing rows parsed from a CSV file.\r\n * @param requiredKeys - An array of keys that must exist in the CSV headers and each row.\r\n * @returns An object indicating whether the data is valid and an optional error message.\r\n */\r\nexport const validateCsvModel = <T extends Record<string, any>>(data: T[], requiredKeys: (keyof T)[]): IValidateCsv => {\r\n // If the data is empty, consider the file invalid\r\n if (data.length === 0) {\r\n return { valid: false, message: 'File is empty or cannot be parsed' }\r\n }\r\n\r\n // Extract headers from the first row\r\n const headers = Object.keys(data[0])\r\n\r\n // Check for missing required columns\r\n const missing = requiredKeys.filter((key) => !headers.includes(key as string))\r\n if (missing.length > 0) {\r\n return { valid: false, message: `Missing required columns: ${missing.join(', ')}` }\r\n }\r\n\r\n // Validate that each required column in each row has a non-empty string value\r\n for (let i = 0; i < data.length; i++) {\r\n const row = data[i]\r\n for (const key of requiredKeys) {\r\n const value = row[key as string]\r\n if (typeof value !== 'string' || value.trim() === '') {\r\n return {\r\n valid: false,\r\n message: `Invalid or missing value for \"${key.toString()}\" at row ${i + 2}` // +2 accounts for header and 0-based index\r\n }\r\n }\r\n }\r\n }\r\n\r\n // All validations passed\r\n return { valid: true }\r\n}\r\n"],"names":["objectAssign","model","_len","arguments","length","sources","Array","_key","filter","x","reduce","a","b","Object","assign","deepMerge","_len2","_key2","temps","concat","_toConsumableArray","fieldObjects","fields","keys","_typeof","isArray","push","apply","target","slice","temp","temp2","_loop","element","index","map","getErrorMessage","MessageErrors","key","_objectSpread","error","message","convertFormDataToJson","form","data","from","forEach","value","toString","toLocaleLowerCase","trimAllStrings","obj","singleValidate","modelState","Validator","messageErrors","run","errors","File","size","getErrorFromResponse","ModelRender","_error$response","response","messages","validateMerge","_len3","validateor","_key3","configs","_loop2","Rules","_b$Rules","FormValidator","validateCsvModel","requiredKeys","valid","headers","missing","includes","join","i","_step","row","_iterator","_createForOfIteratorHelper","s","n","done","trim","err","e","f"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- export{default as ApiPopover,ApiPopoverContext,mapApiPopoverContext,withApiPopoverContext}from"./api-context/popover.js";export{AlertDialog,default as AlertGlobal,ApiAlertContext}from"./api-context/alert-global.js";export{default as DrawerGlobal}from"./api-context/drawer-global.js";export{default as GlobalModal,GlobalModalContext,mapGlobalModalContext,withApiGlobalModalConsumerContext,withApiGlobalModalContext}from"./api-context/global-modal.js";export{default as PopoverGlobal,PopoverGlobalApi,PopoverGlobalContext,PopoverGlobalProvider,mapPopoverGlobalContext,withPopoverGlobalContext}from"./api-context/popover-global.js";export{default as Breadcrumbs}from"./components/breadcrumbs.js";export{LoadingButton}from"./components/buttons.js";export{default as CopyToClipboard}from"./components/copy-to-clipboard.js";export{default as CreateMultiSelectDropdown}from"./components/create.multi-select-dropdown.js";export{default as ImageWithFallback}from"./components/image-with-fallback.js";export{default as HelpTooltip,HelpTooltipWrap}from"./components/help-tooltip.js";export{default as TextEditorPreview}from"./components/text-editor.preview.js";export{default as TextEditor,textEditorClasses}from"./components/text-editor.js";export{default as CreateFilterBar}from"./filter-bar/create.filter-bar.js";export{EFieldValidate,ESearchMatch}from"./filter-bar/types.js";export{default as FormValidator,SingleRuleValidate,createFormValidator,mapRuleOptions}from"./form/validator.js";export{default as DinoForm}from"./form/dino-form.js";export{convertFormDataToJson,getErrorMessage,validateCsvModel}from"./form/helpers.js";export{useCheckScrolled,useDebounce}from"./hooks/index.js";export{ELazyStatus}from"./redux/types.js";export{default as DinoRedux}from"./redux/dino.js";export{default as CreateHocLazy,EmptyComponent,defaultOptionHocLazy}from"./redux/create.hoc-lazy.js";export{ELogic,EOperator,EOrder}from"./table/model-filter.js";import"react/jsx-runtime";import"react";import"@mui/material";import"@mui/icons-material/Edit";import"@mui/icons-material/Delete";export{cleanObject,decodeBase64,deepRemoveEmptyFields,encodeBase64,fetchDelay,formatCapitalizeFirstText,formatCurrency,formatDatetime,formatFileSize,formatNumberWithCommas,isGuid,isValidEmail,isValidPhoneNumber,isValidURL,mergeClasses,mergeObjects,sleep,tryParseArray,tryParseCsvFileToArray,tryParseIntRequired,tryParseObject,windowScrollToTop}from"./utils/helpers.js";import"./utils/dayjs-config.js";export{default as JObject}from"./utils/json-object.js";export{MFEventProvider,useMFEvent}from"./utils/mfe-events.js";export{QueryParam}from"./utils/query-param.js";export{default as CreateTable}from"./table/create.table.js";export{default as DinoTable}from"./table/dino.js";export{dinoTableClasses}from"./table/helpers.js";export{default as DinoTableGrid}from"./table-grid/dino.js";export{CreateTableGridItemActions}from"./table-grid/item-actions.js";export{default as dayjsCustom}from"dayjs";
1
+ export{default as ApiPopover,ApiPopoverContext,mapApiPopoverContext,withApiPopoverContext}from"./api-context/popover.js";export{AlertDialog,default as AlertGlobal,ApiAlertContext}from"./api-context/alert-global.js";export{default as DrawerGlobal}from"./api-context/drawer-global.js";export{default as GlobalModal,GlobalModalContext,mapGlobalModalContext,withApiGlobalModalConsumerContext,withApiGlobalModalContext}from"./api-context/global-modal.js";export{default as PopoverGlobal,PopoverGlobalApi,PopoverGlobalContext,PopoverGlobalProvider,mapPopoverGlobalContext,withPopoverGlobalContext}from"./api-context/popover-global.js";export{default as Breadcrumbs}from"./components/breadcrumbs.js";export{LoadingButton}from"./components/buttons.js";export{default as CopyToClipboard}from"./components/copy-to-clipboard.js";export{default as CreateMultiSelectDropdown}from"./components/create.multi-select-dropdown.js";export{default as ImageWithFallback}from"./components/image-with-fallback.js";export{default as HelpTooltip,HelpTooltipWrap}from"./components/help-tooltip.js";export{default as TextEditorPreview}from"./components/text-editor.preview.js";export{default as TextEditor,textEditorClasses}from"./components/text-editor.js";export{DinoDataView}from"./data-view/index.js";export{default as CreateFilterBar}from"./filter-bar/create.filter-bar.js";export{EFieldValidate,ESearchMatch}from"./filter-bar/types.js";export{default as FormValidator,SingleRuleValidate,createFormValidator,mapRuleOptions}from"./form/validator.js";export{default as DinoForm}from"./form/dino-form.js";export{convertFormDataToJson,getErrorMessage,validateCsvModel}from"./form/helpers.js";export{useCheckScrolled,useDebounce}from"./hooks/index.js";export{ELazyStatus}from"./redux/types.js";export{default as DinoRedux}from"./redux/dino.js";export{default as CreateHocLazy,EmptyComponent,defaultOptionHocLazy}from"./redux/create.hoc-lazy.js";export{ELogic,EOperator,EOrder}from"./table/model-filter.js";import"react/jsx-runtime";import"react";import"@mui/material";import"@mui/icons-material/Edit";import"@mui/icons-material/Delete";export{cleanObject,decodeBase64,deepRemoveEmptyFields,encodeBase64,fetchDelay,formatCapitalizeFirstText,formatCurrency,formatDatetime,formatFileSize,formatNumberWithCommas,isGuid,isValidEmail,isValidPhoneNumber,isValidURL,mergeClasses,mergeObjects,sleep,tryParseArray,tryParseCsvFileToArray,tryParseIntRequired,tryParseObject,windowScrollToTop}from"./utils/helpers.js";import"./utils/dayjs-config.js";export{default as JObject}from"./utils/json-object.js";export{MFEventProvider,useMFEvent}from"./utils/mfe-events.js";export{QueryParam}from"./utils/query-param.js";export{default as CreateTable}from"./table/create.table.js";export{default as DinoTable}from"./table/dino.js";export{dinoTableClasses}from"./table/helpers.js";export{default as DinoTableGrid}from"./table-grid/dino.js";export{CreateTableGridItemActions}from"./table-grid/item-actions.js";export{EDataViewMode}from"./data-view/types.js";export{default as dayjsCustom}from"dayjs";
2
2
  //# sourceMappingURL=index.js.map
@@ -1,2 +1,2 @@
1
- import{createClass as e,classCallCheck as t,defineProperty as i,objectSpread2 as a}from"../_virtual/_rollupPluginBabelHelpers.js";import{deepRemoveEmptyFields as r}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"react/jsx-runtime";import"react";import"react-router-dom";import{QueryParam as l}from"../utils/query-param.js";var o=new(e((function e(){var o=this;t(this,e),i(this,"getUrlQuery",(function(e){try{var t=l.Gets("table");return t.table?JSON.parse(t.table):null==e?void 0:e.defaultFilter}catch(t){return null==e?void 0:e.defaultFilter}})),i(this,"setUrlQuery",(function(e,t){var i=o.extractFilter(e,t),a=r(i);if(0===Object.keys(a).length)return l.ReplaceDeletes("table");l.ReplacePatch({table:JSON.stringify(a)})})),i(this,"extractFilter",(function(e,t){var i,r,l,o,n=(null==t?void 0:t.defaultFilter)||{},s=a({},e);delete s.details;var u=(null===(i=s.pagination)||void 0===i?void 0:i.page)===(null===(r=n.pagination)||void 0===r?void 0:r.page),p=(null===(l=s.pagination)||void 0===l?void 0:l.pageSize)===(null===(o=n.pagination)||void 0===o?void 0:o.pageSize);return u&&p&&delete s.pagination,s}))})));export{o as default};
1
+ import{createClass as e,classCallCheck as t,defineProperty as i,objectSpread2 as a}from"../_virtual/_rollupPluginBabelHelpers.js";import{deepRemoveEmptyFields as r}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"react/jsx-runtime";import"react";import"react-router-dom";import{QueryParam as l}from"../utils/query-param.js";var o=new(e((function e(){var o=this;t(this,e),i(this,"getUrlQuery",(function(e){try{var t=l.Gets("table");return t.table?JSON.parse(t.table):null==e?void 0:e.defaultFilter}catch(t){return null==e?void 0:e.defaultFilter}})),i(this,"setUrlQuery",(function(e,t){var i=o.extractFilter(e,t),a=r(i);if(0===Object.keys(a).length)return l.ReplaceDeletes("table");l.ReplacePatch({table:JSON.stringify(a)})})),i(this,"extractFilter",(function(e,t){var i,r,l,o,n=(null==t?void 0:t.defaultFilter)||{},s=a({},e);delete s.details,delete s.loading;var u=(null===(i=s.pagination)||void 0===i?void 0:i.page)===(null===(r=n.pagination)||void 0===r?void 0:r.page),p=(null===(l=s.pagination)||void 0===l?void 0:l.pageSize)===(null===(o=n.pagination)||void 0===o?void 0:o.pageSize);return u&&p&&delete s.pagination,s}))})));export{o as default};
2
2
  //# sourceMappingURL=url-query-param.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"url-query-param.js","sources":["../../src/table-grid/url-query-param.ts"],"sourcesContent":["import { ITableGridFilter } from './types'\r\nimport { deepRemoveEmptyFields, QueryParam } from '../utils'\r\n\r\nexport interface ITableGridQueryParams {\r\n table?: string\r\n}\r\n\r\nexport interface IUrlQueryParamOptions<T> {\r\n defaultFilter?: ITableGridFilter<T>\r\n}\r\n\r\nclass UrlQueryParamBase {\r\n getUrlQuery = <T>(options?: IUrlQueryParamOptions<T>) => {\r\n try {\r\n const query = QueryParam.Gets<ITableGridQueryParams>('table')\r\n return query.table ? JSON.parse(query.table) : options?.defaultFilter\r\n } catch (error) {\r\n return options?.defaultFilter\r\n }\r\n }\r\n\r\n setUrlQuery = <T>(params: ITableGridFilter<T>, options?: IUrlQueryParamOptions<T>) => {\r\n const filter = this.extractFilter(params, options)\r\n const filterRemovedEmpty = deepRemoveEmptyFields(filter)\r\n\r\n if (Object.keys(filterRemovedEmpty).length === 0) {\r\n return QueryParam.ReplaceDeletes<ITableGridQueryParams>('table')\r\n }\r\n QueryParam.ReplacePatch<ITableGridQueryParams>({ table: JSON.stringify(filterRemovedEmpty) })\r\n }\r\n\r\n extractFilter = <T>(filter: ITableGridFilter<T>, options?: IUrlQueryParamOptions<T>): ITableGridFilter<T> => {\r\n const dFilter: Partial<ITableGridFilter<T>> = options?.defaultFilter || {}\r\n const obj = { ...filter }\r\n delete obj.details\r\n\r\n const checkPagination1 = obj.pagination?.page === dFilter.pagination?.page\r\n const checkPagination2 = obj.pagination?.pageSize === dFilter.pagination?.pageSize\r\n if (checkPagination1 && checkPagination2) delete obj.pagination\r\n\r\n return obj\r\n }\r\n}\r\n\r\nconst UrlQueryParam = new UrlQueryParamBase()\r\nexport default UrlQueryParam\r\n"],"names":["UrlQueryParam","_createClass","UrlQueryParamBase","_this","this","_classCallCheck","_defineProperty","options","query","QueryParam","Gets","table","JSON","parse","defaultFilter","error","params","filter","extractFilter","filterRemovedEmpty","deepRemoveEmptyFields","Object","keys","length","ReplaceDeletes","ReplacePatch","stringify","_obj$pagination","_dFilter$pagination","_obj$pagination2","_dFilter$pagination2","dFilter","obj","_objectSpread","details","checkPagination1","pagination","page","checkPagination2","pageSize"],"mappings":"qVAC4D,IA2CtDA,EAAgB,IAjCCC,GAAA,SAAAC,IAAA,IAAAC,EAAAC,KAAAC,OAAAH,GAAAI,EAAAF,KAAA,eACP,SAAIG,GAChB,IACE,IAAMC,EAAQC,EAAWC,KAA4B,SACrD,OAAOF,EAAMG,MAAQC,KAAKC,MAAML,EAAMG,OAASJ,aAAAA,EAAAA,EAASO,aACzD,CAAC,MAAOC,GACP,OAAOR,aAAAA,EAAAA,EAASO,aACjB,KACFR,EAEaF,KAAA,eAAA,SAAIY,EAA6BT,GAC7C,IAAMU,EAASd,EAAKe,cAAcF,EAAQT,GACpCY,EAAqBC,EAAsBH,GAEjD,GAA+C,IAA3CI,OAAOC,KAAKH,GAAoBI,OAClC,OAAOd,EAAWe,eAAsC,SAE1Df,EAAWgB,aAAoC,CAAEd,MAAOC,KAAKc,UAAUP,QACxEb,EAEeF,KAAA,iBAAA,SAAIa,EAA6BV,GAA2D,IAAAoB,EAAAC,EAAAC,EAAAC,EACpGC,GAAwCxB,aAAAA,EAAAA,EAASO,gBAAiB,CAAE,EACpEkB,EAAGC,EAAA,CAAA,EAAQhB,UACVe,EAAIE,QAEX,IAAMC,GAAiCR,QAAdA,EAAAK,EAAII,kBAAJT,IAAcA,OAAdA,EAAAA,EAAgBU,SAA2B,QAAvBT,EAAKG,EAAQK,kBAAU,IAAAR,OAAA,EAAlBA,EAAoBS,MAChEC,GAAiCT,QAAdA,EAAAG,EAAII,kBAAJP,IAAcA,OAAdA,EAAAA,EAAgBU,aAA+B,QAAvBT,EAAKC,EAAQK,kBAAU,IAAAN,OAAA,EAAlBA,EAAoBS,UAG1E,OAFIJ,GAAoBG,UAAyBN,EAAII,WAE9CJ,IACR"}
1
+ {"version":3,"file":"url-query-param.js","sources":["../../src/table-grid/url-query-param.ts"],"sourcesContent":["import { ITableGridFilter } from './types'\r\nimport { deepRemoveEmptyFields, QueryParam } from '../utils'\r\n\r\nexport interface ITableGridQueryParams {\r\n table?: string\r\n}\r\n\r\nexport interface IUrlQueryParamOptions<T> {\r\n defaultFilter?: ITableGridFilter<T>\r\n}\r\n\r\nclass UrlQueryParamBase {\r\n getUrlQuery = <T>(options?: IUrlQueryParamOptions<T>) => {\r\n try {\r\n const query = QueryParam.Gets<ITableGridQueryParams>('table')\r\n return query.table ? JSON.parse(query.table) : options?.defaultFilter\r\n } catch (error) {\r\n return options?.defaultFilter\r\n }\r\n }\r\n\r\n setUrlQuery = <T>(params: ITableGridFilter<T>, options?: IUrlQueryParamOptions<T>) => {\r\n const filter = this.extractFilter(params, options)\r\n const filterRemovedEmpty = deepRemoveEmptyFields(filter)\r\n\r\n if (Object.keys(filterRemovedEmpty).length === 0) {\r\n return QueryParam.ReplaceDeletes<ITableGridQueryParams>('table')\r\n }\r\n QueryParam.ReplacePatch<ITableGridQueryParams>({ table: JSON.stringify(filterRemovedEmpty) })\r\n }\r\n\r\n extractFilter = <T>(filter: ITableGridFilter<T>, options?: IUrlQueryParamOptions<T>): ITableGridFilter<T> => {\r\n const dFilter: Partial<ITableGridFilter<T>> = options?.defaultFilter || {}\r\n const obj = { ...filter }\r\n delete obj.details\r\n delete obj.loading\r\n\r\n const checkPagination1 = obj.pagination?.page === dFilter.pagination?.page\r\n const checkPagination2 = obj.pagination?.pageSize === dFilter.pagination?.pageSize\r\n if (checkPagination1 && checkPagination2) delete obj.pagination\r\n\r\n return obj\r\n }\r\n}\r\n\r\nconst UrlQueryParam = new UrlQueryParamBase()\r\nexport default UrlQueryParam\r\n"],"names":["UrlQueryParam","_createClass","UrlQueryParamBase","_this","this","_classCallCheck","_defineProperty","options","query","QueryParam","Gets","table","JSON","parse","defaultFilter","error","params","filter","extractFilter","filterRemovedEmpty","deepRemoveEmptyFields","Object","keys","length","ReplaceDeletes","ReplacePatch","stringify","_obj$pagination","_dFilter$pagination","_obj$pagination2","_dFilter$pagination2","dFilter","obj","_objectSpread","details","loading","checkPagination1","pagination","page","checkPagination2","pageSize"],"mappings":"qVAC4D,IA4CtDA,EAAgB,IAlCCC,GAAA,SAAAC,IAAA,IAAAC,EAAAC,KAAAC,OAAAH,GAAAI,EAAAF,KAAA,eACP,SAAIG,GAChB,IACE,IAAMC,EAAQC,EAAWC,KAA4B,SACrD,OAAOF,EAAMG,MAAQC,KAAKC,MAAML,EAAMG,OAASJ,aAAAA,EAAAA,EAASO,aACzD,CAAC,MAAOC,GACP,OAAOR,aAAAA,EAAAA,EAASO,aACjB,KACFR,EAEaF,KAAA,eAAA,SAAIY,EAA6BT,GAC7C,IAAMU,EAASd,EAAKe,cAAcF,EAAQT,GACpCY,EAAqBC,EAAsBH,GAEjD,GAA+C,IAA3CI,OAAOC,KAAKH,GAAoBI,OAClC,OAAOd,EAAWe,eAAsC,SAE1Df,EAAWgB,aAAoC,CAAEd,MAAOC,KAAKc,UAAUP,QACxEb,EAEeF,KAAA,iBAAA,SAAIa,EAA6BV,GAA2D,IAAAoB,EAAAC,EAAAC,EAAAC,EACpGC,GAAwCxB,aAAAA,EAAAA,EAASO,gBAAiB,CAAE,EACpEkB,EAAGC,EAAA,CAAA,EAAQhB,UACVe,EAAIE,eACJF,EAAIG,QAEX,IAAMC,GAAiCT,QAAdA,EAAAK,EAAIK,kBAAJV,IAAcA,OAAdA,EAAAA,EAAgBW,SAA2B,QAAvBV,EAAKG,EAAQM,kBAAU,IAAAT,OAAA,EAAlBA,EAAoBU,MAChEC,GAAiCV,QAAdA,EAAAG,EAAIK,kBAAJR,IAAcA,OAAdA,EAAAA,EAAgBW,aAA+B,QAAvBV,EAAKC,EAAQM,kBAAU,IAAAP,OAAA,EAAlBA,EAAoBU,UAG1E,OAFIJ,GAAoBG,UAAyBP,EAAIK,WAE9CL,IACR"}
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ import { IDataViewData, IDataViewInitial, ITableConfigs } from './types';
3
+ import { GridValidRowModel, GridApi } from '@mui/x-data-grid';
4
+ export interface IDataViewFilter {
5
+ }
6
+ export interface IDataViewContext {
7
+ }
8
+ export interface IDataViewState extends IDataViewInitial {
9
+ tableApiRef?: GridApi | null;
10
+ gridApiRef?: GridApi | null;
11
+ }
12
+ export interface IDataViewDef {
13
+ }
14
+ export interface IDataViewSlots {
15
+ }
16
+ export interface IDataViewProps<T extends GridValidRowModel> {
17
+ data?: IDataViewData<T>;
18
+ filter?: IDataViewFilter;
19
+ initialState?: IDataViewInitial;
20
+ }
21
+ export interface IDataViewParams<T extends GridValidRowModel> {
22
+ initialState?: IDataViewInitial;
23
+ filterConfigs?: {};
24
+ tableConfigs?: ITableConfigs<T>;
25
+ gridConfigs?: {};
26
+ slots?: IDataViewSlots;
27
+ }
28
+ declare function createDataView<T extends GridValidRowModel>(params: IDataViewParams<T>): {
29
+ new (props: IDataViewProps<T>): {
30
+ handleTableApiReady: (api: GridApi) => void;
31
+ handleGridApiReady: (api: GridApi) => void;
32
+ render(): import("react/jsx-runtime").JSX.Element;
33
+ renderIssue(): import("react/jsx-runtime").JSX.Element | null;
34
+ context: unknown;
35
+ setState<K extends keyof IDataViewState>(state: IDataViewState | ((prevState: Readonly<IDataViewState>, props: Readonly<IDataViewProps<T>>) => IDataViewState | Pick<IDataViewState, K> | null) | Pick<IDataViewState, K> | null, callback?: (() => void) | undefined): void;
36
+ forceUpdate(callback?: (() => void) | undefined): void;
37
+ readonly props: Readonly<IDataViewProps<T>>;
38
+ state: Readonly<IDataViewState>;
39
+ refs: {
40
+ [key: string]: React.ReactInstance;
41
+ };
42
+ componentDidMount?(): void;
43
+ shouldComponentUpdate?(nextProps: Readonly<IDataViewProps<T>>, nextState: Readonly<IDataViewState>, nextContext: any): boolean;
44
+ componentWillUnmount?(): void;
45
+ componentDidCatch?(error: Error, errorInfo: React.ErrorInfo): void;
46
+ getSnapshotBeforeUpdate?(prevProps: Readonly<IDataViewProps<T>>, prevState: Readonly<IDataViewState>): any;
47
+ componentDidUpdate?(prevProps: Readonly<IDataViewProps<T>>, prevState: Readonly<IDataViewState>, snapshot?: any): void;
48
+ componentWillMount?(): void;
49
+ UNSAFE_componentWillMount?(): void;
50
+ componentWillReceiveProps?(nextProps: Readonly<IDataViewProps<T>>, nextContext: any): void;
51
+ UNSAFE_componentWillReceiveProps?(nextProps: Readonly<IDataViewProps<T>>, nextContext: any): void;
52
+ componentWillUpdate?(nextProps: Readonly<IDataViewProps<T>>, nextState: Readonly<IDataViewState>, nextContext: any): void;
53
+ UNSAFE_componentWillUpdate?(nextProps: Readonly<IDataViewProps<T>>, nextState: Readonly<IDataViewState>, nextContext: any): void;
54
+ };
55
+ contextType?: React.Context<any> | undefined;
56
+ };
57
+ export default createDataView;
@@ -0,0 +1,9 @@
1
+ import { GridValidRowModel, GridRowSelectionModel, GridApi } from '@mui/x-data-grid';
2
+ import { ComponentType } from 'react';
3
+ import { IDataViewPropsBase, ITableConfigs } from './types';
4
+ export interface ITableProps<T extends GridValidRowModel> extends IDataViewPropsBase<T> {
5
+ onRowSelectionChange?: (selection: GridRowSelectionModel) => void;
6
+ onApiReady?: (api: GridApi) => void;
7
+ }
8
+ declare function createTable<T extends GridValidRowModel>(configs: ITableConfigs<T>): ComponentType<ITableProps<T>>;
9
+ export default createTable;
@@ -0,0 +1,11 @@
1
+ import React from 'react';
2
+ import { GridApi } from '@mui/x-data-grid';
3
+ export interface ICustomToolbarProps {
4
+ tableApiRef?: GridApi | null;
5
+ gridApiRef?: GridApi | null;
6
+ currentMode?: 'Table' | 'Grid';
7
+ showColumnsButton?: boolean;
8
+ children?: React.ReactNode;
9
+ }
10
+ export declare const CustomToolbar: React.FC<ICustomToolbarProps>;
11
+ export default CustomToolbar;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,6 @@
1
+ import { GridColDef, GridValidRowModel } from '@mui/x-data-grid';
2
+ import { ITableColDef } from './types';
3
+ export interface IGenerateColumnsOptions {
4
+ extendColDefs?: GridColDef[];
5
+ }
6
+ export declare const generateColumns: <T extends GridValidRowModel>(cols: ITableColDef<T>, options?: IGenerateColumnsOptions) => GridColDef[];
@@ -0,0 +1,6 @@
1
+ import createDataView from './create.data-view';
2
+ export * from './types';
3
+ declare class DinoDataViewBase {
4
+ createDataView: typeof createDataView;
5
+ }
6
+ export declare const DinoDataView: DinoDataViewBase;
@@ -0,0 +1,24 @@
1
+ import { GridColDef, GridRowIdGetter, GridValidRowModel } from '@mui/x-data-grid';
2
+ export declare enum EDataViewMode {
3
+ Table = "Table",
4
+ Grid = "Grid"
5
+ }
6
+ export type ITableColDef<T extends GridValidRowModel> = {
7
+ [key in keyof T]?: Omit<GridColDef, 'field'>;
8
+ };
9
+ export interface ITableConfigs<T extends GridValidRowModel> {
10
+ getRowId: GridRowIdGetter<T>;
11
+ columns: ITableColDef<T>;
12
+ }
13
+ export interface IDataViewInitial {
14
+ mode?: EDataViewMode;
15
+ }
16
+ export interface IDataViewData<T extends GridValidRowModel> {
17
+ items?: T[];
18
+ rowTotal?: number;
19
+ }
20
+ export interface IDataViewPropsBase<T extends GridValidRowModel> {
21
+ data?: IDataViewData<T>;
22
+ filter?: any;
23
+ onFilterChange?: (filter: any) => void;
24
+ }
@@ -0,0 +1,11 @@
1
+ import { FC, ReactNode } from 'react';
2
+ import { SvgIconProps } from '@mui/material';
3
+ import { EDataViewMode } from './types';
4
+ export interface ISwitchDataViewWithModeProps {
5
+ mode?: EDataViewMode;
6
+ Table: ReactNode;
7
+ Grid: ReactNode;
8
+ }
9
+ export declare const SwitchDataViewWithMode: FC<ISwitchDataViewWithModeProps>;
10
+ export declare const ToggleButtons: FC;
11
+ export declare const NoDataIcon: FC<SvgIconProps>;
@@ -1,6 +1,7 @@
1
1
  /// <reference path="./@types/global.d.ts" />
2
2
  export * from './api-context';
3
3
  export * from './components';
4
+ export * from './data-view';
4
5
  export * from './filter-bar';
5
6
  export * from './form';
6
7
  export * from './hooks';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dinocollab-core",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",