dinocollab-core 2.2.13 → 2.2.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/data-surface/index.js +1 -1
- package/dist/form/index.js +1 -1
- package/dist/src/components/image-with-fallback.js +1 -1
- package/dist/src/components/image-with-fallback.js.map +1 -1
- package/dist/src/data-surface/button-switch.js +1 -1
- package/dist/src/data-surface/button-switch.js.map +1 -1
- package/dist/src/data-surface/helpers.js +1 -1
- package/dist/src/data-surface/helpers.js.map +1 -1
- package/dist/src/data-surface/ui.units.js +1 -1
- package/dist/src/data-surface/ui.units.js.map +1 -1
- package/dist/src/filter-bar/components/chip-viewer.js +1 -1
- package/dist/src/filter-bar/components/chip-viewer.js.map +1 -1
- package/dist/src/filter-bar/components/filter-input.mobile.js +1 -1
- package/dist/src/filter-bar/components/filter-input.mobile.js.map +1 -1
- package/dist/src/filter-bar/components/filter-summary.js +1 -1
- package/dist/src/filter-bar/components/filter-summary.js.map +1 -1
- package/dist/src/filter-bar/components/popper-custom.js +1 -1
- package/dist/src/filter-bar/components/popper-custom.js.map +1 -1
- package/dist/src/filter-bar/components/ui.units.js +1 -1
- package/dist/src/filter-bar/components/ui.units.js.map +1 -1
- package/dist/src/filter-bar/convert-to-graphql.js +1 -1
- package/dist/src/filter-bar/convert-to-graphql.js.map +1 -1
- package/dist/src/filter-bar/index.create.js +1 -1
- package/dist/src/filter-bar/index.create.js.map +1 -1
- package/dist/src/filter-bar/index.dino.js +1 -1
- package/dist/src/filter-bar/index.dino.js.map +1 -1
- package/dist/src/filter-bar/menu/create-form-field-datetime.js +2 -0
- package/dist/src/filter-bar/menu/create-form-field-datetime.js.map +1 -0
- package/dist/src/filter-bar/menu/create-form-field-select-multiple.js +1 -1
- package/dist/src/filter-bar/menu/create-form-field-select-multiple.js.map +1 -1
- package/dist/src/filter-bar/menu/create-form-field-select.js +1 -1
- package/dist/src/filter-bar/menu/create-form-field-select.js.map +1 -1
- package/dist/src/filter-bar/menu/create-form-field-string.js +1 -1
- package/dist/src/filter-bar/menu/create-form-field-string.js.map +1 -1
- package/dist/src/filter-bar/menu/create.js +1 -1
- package/dist/src/filter-bar/menu/create.js.map +1 -1
- package/dist/src/filter-bar/types.js.map +1 -1
- package/dist/src/form/create.date-expired.js +1 -1
- package/dist/src/form/create.date-expired.js.map +1 -1
- package/dist/src/form/create.form-base.js +1 -1
- package/dist/src/form/create.form-base.js.map +1 -1
- package/dist/src/form/create.form-grid-layout.js +1 -1
- package/dist/src/form/create.form-grid-layout.js.map +1 -1
- package/dist/src/form/create.form-grid-layout.units.js +1 -1
- package/dist/src/form/create.form-grid-layout.units.js.map +1 -1
- package/dist/src/form/create.select-simple.js +1 -1
- package/dist/src/form/create.select-simple.js.map +1 -1
- package/dist/src/form/create.select-with-api.js +1 -1
- package/dist/src/form/create.select-with-api.js.map +1 -1
- package/dist/src/form/dino-form.js.map +1 -1
- package/dist/src/table/create.table.js +1 -1
- package/dist/src/table/create.table.js.map +1 -1
- package/dist/src/table/helpers.js +1 -1
- package/dist/src/table/helpers.js.map +1 -1
- package/dist/src/table/styled.js +2 -0
- package/dist/src/table/styled.js.map +1 -0
- package/dist/src/table/toolbar-pannel.js +1 -1
- package/dist/src/table/toolbar-pannel.js.map +1 -1
- package/dist/src/utils/helpers.js +1 -1
- package/dist/src/utils/helpers.js.map +1 -1
- package/dist/table/index.js +1 -1
- package/dist/types/components/image-with-fallback.d.ts +7 -2
- package/dist/types/data-surface/button-switch.d.ts +1 -0
- package/dist/types/data-surface/helpers.d.ts +5 -3
- package/dist/types/data-surface/ui.units.d.ts +4 -2
- package/dist/types/data-view/dino.d.ts +1 -1
- package/dist/types/data-view/query-param-url.d.ts +1 -1
- package/dist/types/filter-bar/components/filter-summary.types.d.ts +2 -1
- package/dist/types/filter-bar/components/hint-icon.types.d.ts +1 -1
- package/dist/types/filter-bar/components/popper-custom.d.ts +1 -0
- package/dist/types/filter-bar/components/ui.units.d.ts +8 -1
- package/dist/types/filter-bar/index.d.ts +2 -0
- package/dist/types/filter-bar/index.dino.d.ts +2 -0
- package/dist/types/filter-bar/menu/create-form-field-datetime.d.ts +53 -0
- package/dist/types/filter-bar/menu/create-form-field-select-multiple.d.ts +17 -0
- package/dist/types/filter-bar/menu/create-form-field-select.d.ts +17 -0
- package/dist/types/filter-bar/menu/create-form-field-string.d.ts +16 -0
- package/dist/types/filter-bar/menu/create.d.ts +17 -0
- package/dist/types/filter-bar/menu/types.d.ts +6 -1
- package/dist/types/filter-bar/types.d.ts +3 -0
- package/dist/types/form/create.date-expired.d.ts +10 -5
- package/dist/types/form/create.form-base.d.ts +1 -0
- package/dist/types/form/create.form-grid-layout.d.ts +6 -4
- package/dist/types/form/create.form-grid-layout.units.d.ts +12 -6
- package/dist/types/form/create.select-simple.d.ts +13 -3
- package/dist/types/form/create.select-with-api.d.ts +56 -4
- package/dist/types/form/dino-form.d.ts +4 -3
- package/dist/types/form/index.d.ts +2 -1
- package/dist/types/table/helpers.d.ts +0 -3
- package/dist/types/table/index.d.ts +1 -1
- package/dist/types/table/styled.d.ts +8 -0
- package/dist/types/table/toolbar-pannel.d.ts +5 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.table.js","sources":["../../../src/table/create.table.tsx"],"sourcesContent":["import { Component, Fragment } from 'react'\r\nimport { Box, BoxProps, styled } from '@mui/material'\r\nimport { DataGrid, DataGridProps, GridColDef, GridFeatureMode, GridFilterOperator } from '@mui/x-data-grid'\r\nimport { GridSortModel, GridValidRowModel, GridRowIdGetter, GridRowSelectionModel } from '@mui/x-data-grid'\r\nimport { GridCallbackDetails, GridColumnVisibilityModel, GridDensity, GridFilterModel, GridPaginationModel } from '@mui/x-data-grid'\r\nimport type { ComponentType, ReactNode } from 'react'\r\nimport { mergeObjects } from '../utils'\r\nimport { TableBaseContext } from './context'\r\nimport { IActionRowProps } from './create.action-row'\r\nimport { customFilterOperators } from './custom.filter-operators'\r\nimport { GlobalModal, mapGlobalModalContext } from '../api-context'\r\nimport { ICustomGridColDef, ICustomGridFilterModel, ICustomGridSortModel, ITableData, ITableQueryParams } from './types'\r\nimport TableHelper, { dinoTableClasses } from './helpers'\r\nimport ToolbarPannel, { IToolbarPannelProps } from './toolbar-pannel'\r\n\r\nexport interface ITableSlots<T> {\r\n maxSelection?: number\r\n density?: GridDensity\r\n toolbar?: ComponentType<IToolbarPannelProps>\r\n actionRow?: ComponentType<IActionRowProps<T>>\r\n toolbarProps?: IToolbarPannelProps\r\n dataGridProps?: DataGridProps\r\n wrapProps?: BoxProps\r\n}\r\n\r\nexport type ITableParamsSlots<T> = Pick<ITableSlots<T>, 'maxSelection' | 'toolbarProps' | 'dataGridProps' | 'wrapProps'>\r\n\r\nexport interface ITableProps<T> {\r\n data?: ITableData<T>\r\n query?: ITableQueryParams<T>\r\n loading?: boolean\r\n onChange?: (query: ITableQueryParams<T>) => void\r\n onRowSelectionChange?: DataGridProps['onRowSelectionModelChange']\r\n slots?: ITableSlots<T>\r\n}\r\n\r\nexport interface ITableParams<T extends GridValidRowModel> extends ITableParamsSlots<T> {\r\n featureMode?: GridFeatureMode\r\n getRowId: GridRowIdGetter<T>\r\n columns: ICustomGridColDef<T>\r\n filterOperators?: (config: GridColDef) => GridFilterOperator[]\r\n columnVisibilityModel?: Partial<Record<keyof T, boolean>>\r\n actionRow?: Omit<GridColDef, 'field'>\r\n disableActionRow?: boolean\r\n disableGlobalModalProvider?: boolean\r\n}\r\n\r\nexport function CreateTable<T extends GridValidRowModel>(params: ITableParams<T>): ComponentType<ITableProps<T>> {\r\n const generateColumns = (extendColDefs?: GridColDef[]) => {\r\n const columns = Object.keys(params.columns).map<GridColDef>((key) => {\r\n const obj = { field: key, ...params.columns[key] }\r\n obj.filterOperators = params.filterOperators ? params.filterOperators(obj) : customFilterOperators(obj)\r\n return obj\r\n })\r\n\r\n if (!!extendColDefs && extendColDefs.length > 0) columns.push(...extendColDefs)\r\n return columns\r\n }\r\n\r\n class Table extends Component<ITableProps<T>> {\r\n private tableQueryParams: ITableQueryParams<T>\r\n // private tableQueryParamsCache: ITableQueryParams<T> = {}\r\n private defaultTableQueryParams: ITableQueryParams<T>\r\n private columns: GridColDef<T>[]\r\n private rowSelecteds: GridRowSelectionModel\r\n private changeTimeout?: ReturnType<typeof setTimeout>\r\n constructor(props: ITableProps<T>) {\r\n super(props)\r\n this.columns = this.initialColumns()\r\n this.tableQueryParams = { ...props.query }\r\n this.defaultTableQueryParams = this.tableQueryParams\r\n this.rowSelecteds = []\r\n }\r\n\r\n get mergeConfig() {\r\n const toolbarPannelProps = mergeObjects({}, params?.toolbarProps, this.props.slots?.toolbarProps)\r\n return {\r\n toolbar: this.props.slots?.toolbar ?? (() => <ToolbarPannel {...toolbarPannelProps} />),\r\n ActionRow: this.props.slots?.actionRow,\r\n disableActionRow: params.disableActionRow,\r\n columnVisibilityModel: params.columnVisibilityModel,\r\n maxSelcion: this.props.slots?.maxSelection ?? params.maxSelection,\r\n dataGridProps: mergeObjects({}, params.dataGridProps, this.props.slots?.dataGridProps),\r\n wrapProps: mergeObjects({}, params.wrapProps, this.props.slots?.wrapProps),\r\n loading: (this.props.loading !== undefined ? this.props.loading : this.tableQueryParams?.loading) ?? false\r\n }\r\n }\r\n\r\n setTableQueryParams = (value: Partial<ITableQueryParams<T>>) => {\r\n this.tableQueryParams = mergeObjects({}, this.tableQueryParams, value)\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.changeTimeout) {\r\n clearTimeout(this.changeTimeout)\r\n }\r\n }\r\n\r\n shouldComponentUpdate(nextProps: Readonly<ITableProps<T>>): boolean {\r\n if (params.featureMode === 'server') {\r\n // Check if query changed\r\n if (!TableHelper.equalTableQueryParams(nextProps.query, this.props.query)) {\r\n this.setTableQueryParams(nextProps.query ?? {})\r\n return true\r\n }\r\n // Check if data or loading changed\r\n if (JSON.stringify(nextProps.data) !== JSON.stringify(this.props.data) || nextProps.loading !== this.props.loading) {\r\n return true\r\n }\r\n return false\r\n } else {\r\n return true\r\n }\r\n }\r\n\r\n render() {\r\n return this.renderWrapContext(\r\n <Wrap {...this.mergeConfig.wrapProps}>\r\n <DataGrid loading={this.props.loading} {...this.getDataGridProps()} />\r\n </Wrap>\r\n )\r\n }\r\n\r\n renderWrapContext = (children: ReactNode) => {\r\n const WrapComponent = params.disableGlobalModalProvider ? Fragment : GlobalModal\r\n return (\r\n <WrapComponent>\r\n {mapGlobalModalContext((context) => (\r\n <TableBaseContext.Provider value={{ showModal: context.show, closeModal: context.close }}>{children}</TableBaseContext.Provider>\r\n ))}\r\n </WrapComponent>\r\n )\r\n }\r\n\r\n getDataGridProps = (): DataGridProps<T> => {\r\n const initialState = TableHelper.mapInitialState(this.props.query, {\r\n columns: { columnVisibilityModel: params.columnVisibilityModel as GridColumnVisibilityModel }\r\n })\r\n const obj: DataGridProps<T> = {\r\n getRowId: params.getRowId,\r\n initialState,\r\n columns: this.columns,\r\n rows: this.props.data?.items ?? [],\r\n checkboxSelection: true,\r\n pagination: true,\r\n density: this.props.slots?.density ?? 'standard',\r\n filterDebounceMs: 800,\r\n sx: { border: 0 },\r\n slots: { toolbar: this.mergeConfig.toolbar },\r\n rowSelectionModel: this.rowSelecteds,\r\n onRowSelectionModelChange: this.handleRowSelectionChange\r\n }\r\n if (params.featureMode === 'server') {\r\n const objServer: Partial<DataGridProps<T>> = {\r\n filterMode: 'server',\r\n sortingMode: 'server',\r\n paginationMode: 'server',\r\n onPaginationModelChange: this.onPaginationModelChange,\r\n onFilterModelChange: this.onFilterModelChange,\r\n onSortModelChange: this.onSortModelChange,\r\n rowCount: this.props.data?.rowTotal ?? 0,\r\n paginationModel: this.tableQueryParams.pagination,\r\n filterModel: this.tableQueryParams.filter as GridFilterModel,\r\n sortModel: TableHelper.mapSortModel(this.tableQueryParams.sort),\r\n loading: this.mergeConfig.loading\r\n }\r\n Object.assign(obj, objServer)\r\n }\r\n return mergeObjects(obj, this.mergeConfig.dataGridProps)\r\n }\r\n\r\n initialColumns = (): GridColDef<T>[] => {\r\n const { ActionRow, disableActionRow } = this.mergeConfig\r\n const list: GridColDef<T>[] = []\r\n if (!!ActionRow && disableActionRow !== true) {\r\n list.push({\r\n field: 'Actions',\r\n minWidth: 100,\r\n headerAlign: 'right',\r\n align: 'right',\r\n filterable: false,\r\n sortable: false,\r\n renderCell: (value) => <ActionRow value={value.row} />,\r\n ...params.actionRow\r\n })\r\n }\r\n return generateColumns(list)\r\n }\r\n\r\n onPaginationModelChange = (model: GridPaginationModel, details: GridCallbackDetails<'pagination'>) => {\r\n if (this.mergeConfig.loading) return\r\n this.setTableQueryParams({ pagination: model, detail: 'pagination' })\r\n this.handleChange()\r\n }\r\n\r\n onFilterModelChange = (model: GridFilterModel, details: GridCallbackDetails<'filter'>) => {\r\n if (this.mergeConfig.loading) return\r\n const { pagination } = this.tableQueryParams\r\n this.setTableQueryParams({\r\n filter: model as ICustomGridFilterModel<T>,\r\n pagination: { page: 0, pageSize: pagination?.pageSize ?? 25 },\r\n detail: TableHelper.detectSearchType(model)\r\n })\r\n this.handleChange()\r\n }\r\n\r\n onSortModelChange = (model: GridSortModel, details: GridCallbackDetails<any>) => {\r\n if (this.mergeConfig.loading) return\r\n let sortValue = model as ICustomGridSortModel<T>\r\n const { sort } = this.tableQueryParams\r\n if (!!sort?.length && !sortValue.length) {\r\n if (sort?.[0]?.field === this.defaultTableQueryParams.sort?.[0]?.field) {\r\n sortValue = [{ field: sort[0]?.field, sort: sort[0]?.sort === 'desc' ? 'asc' : 'desc' }]\r\n } else {\r\n sortValue = this.defaultTableQueryParams.sort ?? []\r\n }\r\n }\r\n this.setTableQueryParams({ sort: sortValue, detail: 'sort' })\r\n this.handleChange()\r\n }\r\n\r\n handleChange = () => {\r\n if (this.changeTimeout) clearTimeout(this.changeTimeout)\r\n this.changeTimeout = setTimeout(() => {\r\n this.props.onChange && this.props.onChange(this.tableQueryParams)\r\n }, 300)\r\n }\r\n\r\n handleRowSelectionChange = (value: GridRowSelectionModel, details: GridCallbackDetails) => {\r\n if (this.mergeConfig.maxSelcion && value.length > this.mergeConfig.maxSelcion) {\r\n this.rowSelecteds = value.slice(0, this.mergeConfig.maxSelcion)\r\n } else {\r\n this.rowSelecteds = value\r\n }\r\n this.props.onRowSelectionChange && this.props.onRowSelectionChange(this.rowSelecteds, details)\r\n this.forceUpdate()\r\n }\r\n }\r\n\r\n return Table\r\n}\r\n\r\nexport default CreateTable\r\n\r\nconst Wrap = styled(({ children, ...p }: BoxProps) => (\r\n <Box {...p}>\r\n <div>{children}</div>\r\n </Box>\r\n))({\r\n flex: 1,\r\n position: 'relative',\r\n '& > div': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n overflowY: 'auto'\r\n },\r\n '.MuiDataGrid-root': {\r\n '--unstable_DataGrid-radius': 0,\r\n overflow: 'hidden'\r\n },\r\n [`.MuiDataGrid-cell.${dinoTableClasses.whiteSpacePre} .MuiDataGrid-cellContent`]: {\r\n whiteSpace: 'pre'\r\n },\r\n [`.MuiTablePagination-root p`]: {\r\n marginBottom: 0\r\n }\r\n})\r\n"],"names":["CreateTable","params","Table","props","_this","_classCallCheck","_callSuper","_defineProperty","value","tableQueryParams","mergeObjects","children","WrapComponent","disableGlobalModalProvider","Fragment","GlobalModal","_jsx","mapGlobalModalContext","context","TableBaseContext","Provider","showModal","show","closeModal","close","_this$props$data$item","_this$props$data","_this$props$slots$den","_this$props$slots","initialState","TableHelper","mapInitialState","query","columns","columnVisibilityModel","obj","getRowId","rows","data","items","checkboxSelection","pagination","density","slots","filterDebounceMs","sx","border","toolbar","mergeConfig","rowSelectionModel","rowSelecteds","onRowSelectionModelChange","handleRowSelectionChange","featureMode","_this$props$data$rowT","_this$props$data2","objServer","filterMode","sortingMode","paginationMode","onPaginationModelChange","onFilterModelChange","onSortModelChange","rowCount","rowTotal","paginationModel","filterModel","filter","sortModel","mapSortModel","sort","loading","Object","assign","dataGridProps","extendColDefs","_this$mergeConfig","ActionRow","disableActionRow","list","push","_objectSpread","field","minWidth","headerAlign","align","filterable","sortable","renderCell","row","actionRow","keys","map","key","filterOperators","customFilterOperators","length","apply","_toConsumableArray","model","details","setTableQueryParams","detail","handleChange","_pagination$pageSize","page","pageSize","detectSearchType","_sort$","_this$defaultTableQue","_sort$2","_sort$3","_this$defaultTableQue2","sortValue","defaultTableQueryParams","changeTimeout","clearTimeout","setTimeout","onChange","maxSelcion","slice","onRowSelectionChange","forceUpdate","initialColumns","_inherits","Component","_createClass","get","_this$props$slots2","_this$props$slots$too","_this$props$slots3","_this$props$slots4","_this$props$slots$max","_this$props$slots5","_this$props$slots6","_this$props$slots7","_ref","_this$tableQueryParam","toolbarPannelProps","toolbarProps","this","ToolbarPannel","maxSelection","wrapProps","undefined","nextProps","_nextProps$query","equalTableQueryParams","JSON","stringify","renderWrapContext","Wrap","DataGrid","getDataGridProps","styled","_ref2","p","_objectWithoutProperties","_excluded","Box","flex","position","top","left","width","height","overflowY","overflow","concat","dinoTableClasses","whiteSpacePre","whiteSpace","marginBottom"],"mappings":"ozBA+CM,SAAUA,EAAyCC,GAgMvD,kBA7KE,SAAAC,EAAYC,GAAqB,IAAAC,EAKT,OALSC,OAAAH,GAC/BE,EAAAE,EAAAJ,KAAAA,GAAMC,IAAMI,EAAAH,EAqBQ,sBAAA,SAACI,GACrBJ,EAAKK,iBAAmBC,EAAa,CAAE,EAAEN,EAAKK,iBAAkBD,KACjED,EAAAH,EAiCmB,oBAAA,SAACO,GACnB,IAAMC,EAAgBX,EAAOY,2BAA6BC,EAAWC,EACrE,OACEC,EAACJ,EACE,CAAAD,SAAAM,EAAsB,SAACC,GAAO,OAC7BF,EAACG,EAAiBC,UAASZ,MAAO,CAAEa,UAAWH,EAAQI,KAAMC,WAAYL,EAAQM,gBAAUb,GAC5F,OAGNJ,EAAAH,EAAA,mBAEkB,WAAuB,IAAAqB,EAAAC,EAAAC,EAAAC,EAClCC,EAAeC,EAAYC,gBAAgB3B,EAAKD,MAAM6B,MAAO,CACjEC,QAAS,CAAEC,sBAAuBjC,EAAOiC,yBAErCC,EAAwB,CAC5BC,SAAUnC,EAAOmC,SACjBP,aAAAA,EACAI,QAAS7B,EAAK6B,QACdI,aAAIZ,UAAAC,EAAEtB,EAAKD,MAAMmC,YAAI,IAAAZ,OAAA,EAAfA,EAAiBa,aAAK,IAAAd,EAAAA,EAAI,GAChCe,mBAAmB,EACnBC,YAAY,EACZC,gBAAOf,UAAAC,EAAExB,EAAKD,MAAMwC,aAAK,IAAAf,OAAA,EAAhBA,EAAkBc,eAAO,IAAAf,EAAAA,EAAI,WACtCiB,iBAAkB,IAClBC,GAAI,CAAEC,OAAQ,GACdH,MAAO,CAAEI,QAAS3C,EAAK4C,YAAYD,SACnCE,kBAAmB7C,EAAK8C,aACxBC,0BAA2B/C,EAAKgD,0BAElC,GAA2B,WAAvBnD,EAAOoD,YAA0B,CAAA,IAAAC,EAAAC,EAC7BC,EAAuC,CAC3CC,WAAY,SACZC,YAAa,SACbC,eAAgB,SAChBC,wBAAyBxD,EAAKwD,wBAC9BC,oBAAqBzD,EAAKyD,oBAC1BC,kBAAmB1D,EAAK0D,kBACxBC,iBAAQT,UAAAC,EAAEnD,EAAKD,MAAMmC,YAAI,IAAAiB,OAAA,EAAfA,EAAiBS,gBAAQ,IAAAV,EAAAA,EAAI,EACvCW,gBAAiB7D,EAAKK,iBAAiBgC,WACvCyB,YAAa9D,EAAKK,iBAAiB0D,OACnCC,UAAWtC,EAAYuC,aAAajE,EAAKK,iBAAiB6D,MAC1DC,QAASnE,EAAK4C,YAAYuB,SAE5BC,OAAOC,OAAOtC,EAAKqB,EACpB,CACD,OAAO9C,EAAayB,EAAK/B,EAAK4C,YAAY0B,iBAC3CnE,EAAAH,EAAA,iBAEgB,WACf,IA5HqBuE,EACjB1C,EA2HJ2C,EAAwCxE,EAAK4C,YAArC6B,EAASD,EAATC,UAAWC,EAAgBF,EAAhBE,iBACbC,EAAwB,GAa9B,OAZMF,IAAkC,IAArBC,GACjBC,EAAKC,KAAIC,EAAA,CACPC,MAAO,UACPC,SAAU,IACVC,YAAa,QACbC,MAAO,QACPC,YAAY,EACZC,UAAU,EACVC,WAAY,SAAChF,GAAK,OAAKQ,EAAC6D,EAAS,CAACrE,MAAOA,EAAMiF,KAAO,GACnDxF,EAAOyF,YAvIOf,EA0IEI,EAzInB9C,EAAUuC,OAAOmB,KAAK1F,EAAOgC,SAAS2D,IAAgB,SAACC,GAC3D,IAAM1D,EAAG8C,EAAA,CAAKC,MAAOW,GAAQ5F,EAAOgC,QAAQ4D,IAE5C,OADA1D,EAAI2D,gBAAkB7F,EAAO6F,gBAAkB7F,EAAO6F,gBAAgB3D,GAAO4D,EAAsB5D,GAC5FA,CACT,GAEMwC,GAAiBA,EAAcqB,OAAS,GAAG/D,EAAQ+C,KAAIiB,MAAZhE,EAAOiE,EAASvB,IAC1D1C,IAmIN1B,EAAAH,EAAA,0BAEyB,SAAC+F,EAA4BC,GACjDhG,EAAK4C,YAAYuB,UACrBnE,EAAKiG,oBAAoB,CAAE5D,WAAY0D,EAAOG,OAAQ,eACtDlG,EAAKmG,kBACNhG,EAAAH,EAAA,sBAEqB,SAAC+F,EAAwBC,GAA0C,IAAAI,EACvF,IAAIpG,EAAK4C,YAAYuB,QAArB,CACA,IAAQ9B,EAAerC,EAAKK,iBAApBgC,WACRrC,EAAKiG,oBAAoB,CACvBlC,OAAQgC,EACR1D,WAAY,CAAEgE,KAAM,EAAGC,SAA8B,QAAtBF,EAAE/D,aAAU,EAAVA,EAAYiE,gBAAQ,IAAAF,EAAAA,EAAI,IACzDF,OAAQxE,EAAY6E,iBAAiBR,KAEvC/F,EAAKmG,cAPyB,IAQ/BhG,EAAAH,EAAA,oBAEmB,SAAC+F,EAAsBC,GACzC,IAAIhG,EAAK4C,YAAYuB,QAArB,CACA,IAEyCqC,EAAAC,EACiCC,EAAAC,EAEjEC,EALLC,EAAYd,EACR7B,EAASlE,EAAKK,iBAAd6D,KACR,GAAMA,SAAAA,EAAM0B,SAAWiB,EAAUjB,OAC/B,IAAI1B,iBAAIsC,EAAJtC,EAAO,UAAE,IAAAsC,OAAA,EAATA,EAAW1B,kBAAK2B,EAAKzG,EAAK8G,wBAAwB5C,YAAI,IAAAuC,GAAKA,QAALA,EAAjCA,EAAoC,cAAEA,SAAtCA,EAAwC3B,OAC/D+B,EAAY,CAAC,CAAE/B,MAAc,QAAT4B,EAAExC,EAAK,UAAE,IAAAwC,OAAA,EAAPA,EAAS5B,MAAOZ,KAAwB,UAAX,QAAPyC,EAAAzC,EAAK,UAAE,IAAAyC,OAAA,EAAPA,EAASzC,MAAkB,MAAQ,cAE/E2C,EAA6CD,QAApCA,EAAG5G,EAAK8G,wBAAwB5C,YAAI0C,IAAAA,EAAAA,EAAI,GAGrD5G,EAAKiG,oBAAoB,CAAE/B,KAAM2C,EAAWX,OAAQ,SACpDlG,EAAKmG,cAXyB,IAY/BhG,EAAAH,EAAA,eAEc,WACTA,EAAK+G,eAAeC,aAAahH,EAAK+G,eAC1C/G,EAAK+G,cAAgBE,WAAW,WAC9BjH,EAAKD,MAAMmH,UAAYlH,EAAKD,MAAMmH,SAASlH,EAAKK,iBACjD,EAAE,OACJF,EAAAH,EAAA,2BAE0B,SAACI,EAA8B4F,GACpDhG,EAAK4C,YAAYuE,YAAc/G,EAAMwF,OAAS5F,EAAK4C,YAAYuE,WACjEnH,EAAK8C,aAAe1C,EAAMgH,MAAM,EAAGpH,EAAK4C,YAAYuE,YAEpDnH,EAAK8C,aAAe1C,EAEtBJ,EAAKD,MAAMsH,sBAAwBrH,EAAKD,MAAMsH,qBAAqBrH,EAAK8C,aAAckD,GACtFhG,EAAKsH,gBAvKLtH,EAAK6B,QAAU7B,EAAKuH,iBACpBvH,EAAKK,iBAAgBwE,KAAQ9E,EAAM6B,OACnC5B,EAAK8G,wBAA0B9G,EAAKK,iBACpCL,EAAK8C,aAAe,GAAE9C,CACxB,CAAC,OAAAwH,EAAA1H,EAbiB2H,GAajBC,EAAA5H,EAAA,CAAA,CAAA2F,IAAA,cAAAkC,IAED,WAAe,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACPC,EAAqBhI,EAAa,CAAA,EAAIT,aAAAA,EAAAA,EAAQ0I,aAA8BX,QAAlBA,EAAEY,KAAKzI,MAAMwC,aAAXqF,IAAgBA,OAAhBA,EAAAA,EAAkBW,cACpF,MAAO,CACL5F,gBAAOkF,UAAAC,EAAEU,KAAKzI,MAAMwC,aAAK,IAAAuF,OAAA,EAAhBA,EAAkBnF,eAAO,IAAAkF,EAAAA,EAAK,WAAA,OAAMjH,EAAC6H,EAAa5D,EAAKyD,CAAAA,EAAAA,GAAuB,EACvF7D,UAA2BsD,QAAlBA,EAAES,KAAKzI,MAAMwC,aAAXwF,IAAgBA,OAAhBA,EAAAA,EAAkBzC,UAC7BZ,iBAAkB7E,EAAO6E,iBACzB5C,sBAAuBjC,EAAOiC,sBAC9BqF,WAA0Ca,QAAhCA,EAAkB,QAAlBC,EAAEO,KAAKzI,MAAMwC,aAAX0F,IAAgBA,OAAhBA,EAAAA,EAAkBS,wBAAYV,EAAAA,EAAInI,EAAO6I,aACrDpE,cAAehE,EAAa,CAAE,EAAET,EAAOyE,cAA+B,QAAlB4D,EAAEM,KAAKzI,MAAMwC,aAAX2F,IAAgBA,OAAhBA,EAAAA,EAAkB5D,eACxEqE,UAAWrI,EAAa,CAAE,EAAET,EAAO8I,UAA2B,QAAlBR,EAAEK,KAAKzI,MAAMwC,aAAX4F,IAAgBA,OAAhBA,EAAAA,EAAkBQ,WAChExE,QAAgG,QAAzFiE,OAA0BQ,IAAvBJ,KAAKzI,MAAMoE,QAAwBqE,KAAKzI,MAAMoE,gBAAOkE,EAAGG,KAAKnI,wBAAgB,IAAAgI,OAAA,EAArBA,EAAuBlE,eAAO,IAAAiE,GAAAA,EAEpG,GAAC,CAAA3C,IAAA,uBAAArF,MAMD,WACMoI,KAAKzB,eACPC,aAAawB,KAAKzB,cAEtB,GAAC,CAAAtB,IAAA,wBAAArF,MAED,SAAsByI,GAGyD,IAAAC,EAF7E,MAA2B,WAAvBjJ,EAAOoD,cAEJvB,EAAYqH,sBAAsBF,EAAUjH,MAAO4G,KAAKzI,MAAM6B,OAK/DoH,KAAKC,UAAUJ,EAAU3G,QAAU8G,KAAKC,UAAUT,KAAKzI,MAAMmC,OAAS2G,EAAU1E,UAAYqE,KAAKzI,MAAMoE,SAJzGqE,KAAKvC,oBAAmC,QAAhB6C,EAACD,EAAUjH,aAAKkH,IAAAA,EAAAA,EAAI,KACrC,GAUb,GAAC,CAAArD,IAAA,SAAArF,MAED,WACE,OAAOoI,KAAKU,kBACVtI,EAACuI,EAAItE,EAAAA,EAAK,CAAA,EAAA2D,KAAK5F,YAAY+F,WAAS,CAAA,EAAA,UAClC/H,EAACwI,EAAQvE,EAAA,CAACV,QAASqE,KAAKzI,MAAMoE,SAAaqE,KAAKa,wBAGtD,IAAC,GAuHL,CAIA,IAAMF,EAAOG,EAAO,SAAAC,GAAA,IAAGhJ,EAAQgJ,EAARhJ,SAAaiJ,EAACC,EAAAF,EAAAG,GAAA,OACnC9I,EAAC+I,EAAG9E,EAAAA,KAAK2E,GAAC,GAAA,CAAAjJ,SACRK,EAAM,MAAA,CAAAL,SAAAA,MACF,EAHK+I,CAIXnJ,EAAAA,EAAA,CACAyJ,KAAM,EACNC,SAAU,WACV,UAAW,CACTA,SAAU,WACVC,IAAK,EACLC,KAAM,EACNC,MAAO,OACPC,OAAQ,OACRC,UAAW,QAEb,oBAAqB,CACnB,6BAA8B,EAC9BC,SAAU,WACX,qBAAAC,OACqBC,EAAiBC,cAA2C,6BAAA,CAChFC,WAAY,QAEkB,6BAAA,CAC9BC,aAAc"}
|
|
1
|
+
{"version":3,"file":"create.table.js","sources":["../../../src/table/create.table.tsx"],"sourcesContent":["import { Component, Fragment } from 'react'\r\nimport { Box, BoxProps, styled } from '@mui/material'\r\nimport { DataGrid, DataGridProps, GridColDef, GridFeatureMode, GridFilterOperator } from '@mui/x-data-grid'\r\nimport { GridSortModel, GridValidRowModel, GridRowIdGetter, GridRowSelectionModel } from '@mui/x-data-grid'\r\nimport { GridCallbackDetails, GridColumnVisibilityModel, GridDensity, GridFilterModel, GridPaginationModel } from '@mui/x-data-grid'\r\nimport type { ComponentType, ReactNode } from 'react'\r\nimport { mergeObjects } from '../utils'\r\nimport { TableBaseContext } from './context'\r\nimport { IActionRowProps } from './create.action-row'\r\nimport { customFilterOperators } from './custom.filter-operators'\r\nimport { GlobalModal, mapGlobalModalContext } from '../api-context'\r\nimport { ICustomGridColDef, ICustomGridFilterModel, ICustomGridSortModel, ITableData, ITableQueryParams } from './types'\r\nimport TableHelper from './helpers'\r\nimport ToolbarPannel, { IToolbarPannelProps } from './toolbar-pannel'\r\nimport { dinoTableClasses, TableStyled } from './styled'\r\n\r\nexport interface ITableSlots<T> {\r\n maxSelection?: number\r\n density?: GridDensity\r\n toolbar?: ComponentType<IToolbarPannelProps>\r\n actionRow?: ComponentType<IActionRowProps<T>>\r\n toolbarProps?: IToolbarPannelProps\r\n dataGridProps?: DataGridProps\r\n wrapProps?: BoxProps\r\n}\r\n\r\nexport type ITableParamsSlots<T> = Pick<ITableSlots<T>, 'maxSelection' | 'toolbarProps' | 'dataGridProps' | 'wrapProps'>\r\n\r\nexport interface ITableProps<T> {\r\n data?: ITableData<T>\r\n query?: ITableQueryParams<T>\r\n loading?: boolean\r\n onChange?: (query: ITableQueryParams<T>) => void\r\n onRowSelectionChange?: DataGridProps['onRowSelectionModelChange']\r\n slots?: ITableSlots<T>\r\n}\r\n\r\nexport interface ITableParams<T extends GridValidRowModel> extends ITableParamsSlots<T> {\r\n featureMode?: GridFeatureMode\r\n getRowId: GridRowIdGetter<T>\r\n columns: ICustomGridColDef<T>\r\n filterOperators?: (config: GridColDef) => GridFilterOperator[]\r\n columnVisibilityModel?: Partial<Record<keyof T, boolean>>\r\n actionRow?: Omit<GridColDef, 'field'>\r\n disableActionRow?: boolean\r\n disableGlobalModalProvider?: boolean\r\n}\r\n\r\nexport function CreateTable<T extends GridValidRowModel>(params: ITableParams<T>): ComponentType<ITableProps<T>> {\r\n const generateColumns = (extendColDefs?: GridColDef[]) => {\r\n const columns = Object.keys(params.columns).map<GridColDef>((key) => {\r\n const obj = { field: key, ...params.columns[key] }\r\n obj.filterOperators = params.filterOperators ? params.filterOperators(obj) : customFilterOperators(obj)\r\n return obj\r\n })\r\n\r\n if (!!extendColDefs && extendColDefs.length > 0) columns.push(...extendColDefs)\r\n return columns\r\n }\r\n\r\n class Table extends Component<ITableProps<T>> {\r\n private tableQueryParams: ITableQueryParams<T>\r\n // private tableQueryParamsCache: ITableQueryParams<T> = {}\r\n private defaultTableQueryParams: ITableQueryParams<T>\r\n private columns: GridColDef<T>[]\r\n private rowSelecteds: GridRowSelectionModel\r\n private changeTimeout?: ReturnType<typeof setTimeout>\r\n constructor(props: ITableProps<T>) {\r\n super(props)\r\n this.columns = this.initialColumns()\r\n this.tableQueryParams = { ...props.query }\r\n this.defaultTableQueryParams = this.tableQueryParams\r\n this.rowSelecteds = []\r\n }\r\n\r\n get mergeConfig() {\r\n const toolbarPannelProps = mergeObjects({}, params?.toolbarProps, this.props.slots?.toolbarProps)\r\n return {\r\n toolbar: this.props.slots?.toolbar ?? (() => <ToolbarPannel {...toolbarPannelProps} />),\r\n ActionRow: this.props.slots?.actionRow,\r\n disableActionRow: params.disableActionRow,\r\n columnVisibilityModel: params.columnVisibilityModel,\r\n maxSelcion: this.props.slots?.maxSelection ?? params.maxSelection,\r\n dataGridProps: mergeObjects({}, params.dataGridProps, this.props.slots?.dataGridProps),\r\n wrapProps: mergeObjects({}, params.wrapProps, this.props.slots?.wrapProps),\r\n loading: (this.props.loading !== undefined ? this.props.loading : this.tableQueryParams?.loading) ?? false\r\n }\r\n }\r\n\r\n setTableQueryParams = (value: Partial<ITableQueryParams<T>>) => {\r\n this.tableQueryParams = mergeObjects({}, this.tableQueryParams, value)\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this.changeTimeout) {\r\n clearTimeout(this.changeTimeout)\r\n }\r\n }\r\n\r\n shouldComponentUpdate(nextProps: Readonly<ITableProps<T>>): boolean {\r\n if (params.featureMode === 'server') {\r\n // Check if query changed\r\n if (!TableHelper.equalTableQueryParams(nextProps.query, this.props.query)) {\r\n this.setTableQueryParams(nextProps.query ?? {})\r\n return true\r\n }\r\n // Check if data or loading changed\r\n if (JSON.stringify(nextProps.data) !== JSON.stringify(this.props.data) || nextProps.loading !== this.props.loading) {\r\n return true\r\n }\r\n return false\r\n } else {\r\n return true\r\n }\r\n }\r\n\r\n render() {\r\n const rootClasses = [dinoTableClasses.root, this.mergeConfig.wrapProps?.className]\r\n return this.renderWrapContext(\r\n <TableStyled {...this.mergeConfig.wrapProps} className={rootClasses.filter((x) => !!x).join(' ')}>\r\n <DataGrid loading={this.props.loading} {...this.getDataGridProps()} />\r\n </TableStyled>\r\n )\r\n }\r\n\r\n renderWrapContext = (children: ReactNode) => {\r\n const WrapComponent = params.disableGlobalModalProvider ? Fragment : GlobalModal\r\n return (\r\n <WrapComponent>\r\n {mapGlobalModalContext((context) => (\r\n <TableBaseContext.Provider value={{ showModal: context.show, closeModal: context.close }}>{children}</TableBaseContext.Provider>\r\n ))}\r\n </WrapComponent>\r\n )\r\n }\r\n\r\n getDataGridProps = (): DataGridProps<T> => {\r\n const initialState = TableHelper.mapInitialState(this.props.query, {\r\n columns: { columnVisibilityModel: params.columnVisibilityModel as GridColumnVisibilityModel }\r\n })\r\n const obj: DataGridProps<T> = {\r\n getRowId: params.getRowId,\r\n initialState,\r\n columns: this.columns,\r\n rows: this.props.data?.items ?? [],\r\n checkboxSelection: true,\r\n pagination: true,\r\n density: this.props.slots?.density ?? 'standard',\r\n filterDebounceMs: 800,\r\n sx: { border: 0 },\r\n slots: { toolbar: this.mergeConfig.toolbar },\r\n rowSelectionModel: this.rowSelecteds,\r\n onRowSelectionModelChange: this.handleRowSelectionChange\r\n }\r\n if (params.featureMode === 'server') {\r\n const objServer: Partial<DataGridProps<T>> = {\r\n filterMode: 'server',\r\n sortingMode: 'server',\r\n paginationMode: 'server',\r\n onPaginationModelChange: this.onPaginationModelChange,\r\n onFilterModelChange: this.onFilterModelChange,\r\n onSortModelChange: this.onSortModelChange,\r\n rowCount: this.props.data?.rowTotal ?? 0,\r\n paginationModel: this.tableQueryParams.pagination,\r\n filterModel: this.tableQueryParams.filter as GridFilterModel,\r\n sortModel: TableHelper.mapSortModel(this.tableQueryParams.sort),\r\n loading: this.mergeConfig.loading\r\n }\r\n Object.assign(obj, objServer)\r\n }\r\n return mergeObjects(obj, this.mergeConfig.dataGridProps)\r\n }\r\n\r\n initialColumns = (): GridColDef<T>[] => {\r\n const { ActionRow, disableActionRow } = this.mergeConfig\r\n const list: GridColDef<T>[] = []\r\n if (!!ActionRow && disableActionRow !== true) {\r\n list.push({\r\n field: 'Actions',\r\n minWidth: 100,\r\n headerAlign: 'right',\r\n align: 'right',\r\n filterable: false,\r\n sortable: false,\r\n disableExport: true,\r\n renderCell: (value) => <ActionRow value={value.row} />,\r\n ...params.actionRow\r\n })\r\n }\r\n return generateColumns(list)\r\n }\r\n\r\n onPaginationModelChange = (model: GridPaginationModel, details: GridCallbackDetails<'pagination'>) => {\r\n if (this.mergeConfig.loading) return\r\n this.setTableQueryParams({ pagination: model, detail: 'pagination' })\r\n this.handleChange()\r\n }\r\n\r\n onFilterModelChange = (model: GridFilterModel, details: GridCallbackDetails<'filter'>) => {\r\n if (this.mergeConfig.loading) return\r\n const { pagination } = this.tableQueryParams\r\n this.setTableQueryParams({\r\n filter: model as ICustomGridFilterModel<T>,\r\n pagination: { page: 0, pageSize: pagination?.pageSize ?? 25 },\r\n detail: TableHelper.detectSearchType(model)\r\n })\r\n this.handleChange()\r\n }\r\n\r\n onSortModelChange = (model: GridSortModel, details: GridCallbackDetails<any>) => {\r\n if (this.mergeConfig.loading) return\r\n let sortValue = model as ICustomGridSortModel<T>\r\n const { sort } = this.tableQueryParams\r\n if (!!sort?.length && !sortValue.length) {\r\n if (sort?.[0]?.field === this.defaultTableQueryParams.sort?.[0]?.field) {\r\n sortValue = [{ field: sort[0]?.field, sort: sort[0]?.sort === 'desc' ? 'asc' : 'desc' }]\r\n } else {\r\n sortValue = this.defaultTableQueryParams.sort ?? []\r\n }\r\n }\r\n this.setTableQueryParams({ sort: sortValue, detail: 'sort' })\r\n this.handleChange()\r\n }\r\n\r\n handleChange = () => {\r\n if (this.changeTimeout) clearTimeout(this.changeTimeout)\r\n this.changeTimeout = setTimeout(() => {\r\n this.props.onChange && this.props.onChange(this.tableQueryParams)\r\n }, 300)\r\n }\r\n\r\n handleRowSelectionChange = (value: GridRowSelectionModel, details: GridCallbackDetails) => {\r\n if (this.mergeConfig.maxSelcion && value.length > this.mergeConfig.maxSelcion) {\r\n this.rowSelecteds = value.slice(0, this.mergeConfig.maxSelcion)\r\n } else {\r\n this.rowSelecteds = value\r\n }\r\n this.props.onRowSelectionChange && this.props.onRowSelectionChange(this.rowSelecteds, details)\r\n this.forceUpdate()\r\n }\r\n }\r\n\r\n return Table\r\n}\r\n\r\nexport default CreateTable\r\n"],"names":["CreateTable","params","Table","props","_this","_classCallCheck","_callSuper","_defineProperty","value","tableQueryParams","mergeObjects","children","WrapComponent","disableGlobalModalProvider","Fragment","GlobalModal","_jsx","mapGlobalModalContext","context","TableBaseContext","Provider","showModal","show","closeModal","close","_this$props$data$item","_this$props$data","_this$props$slots$den","_this$props$slots","initialState","TableHelper","mapInitialState","query","columns","columnVisibilityModel","obj","getRowId","rows","data","items","checkboxSelection","pagination","density","slots","filterDebounceMs","sx","border","toolbar","mergeConfig","rowSelectionModel","rowSelecteds","onRowSelectionModelChange","handleRowSelectionChange","featureMode","_this$props$data$rowT","_this$props$data2","objServer","filterMode","sortingMode","paginationMode","onPaginationModelChange","onFilterModelChange","onSortModelChange","rowCount","rowTotal","paginationModel","filterModel","filter","sortModel","mapSortModel","sort","loading","Object","assign","dataGridProps","extendColDefs","_this$mergeConfig","ActionRow","disableActionRow","list","push","_objectSpread","field","minWidth","headerAlign","align","filterable","sortable","disableExport","renderCell","row","actionRow","keys","map","key","filterOperators","customFilterOperators","length","apply","_toConsumableArray","model","details","setTableQueryParams","detail","handleChange","_pagination$pageSize","page","pageSize","detectSearchType","_sort$","_this$defaultTableQue","_sort$2","_sort$3","_this$defaultTableQue2","sortValue","defaultTableQueryParams","changeTimeout","clearTimeout","setTimeout","onChange","maxSelcion","slice","onRowSelectionChange","forceUpdate","initialColumns","_inherits","Component","_createClass","get","_this$props$slots2","_this$props$slots$too","_this$props$slots3","_this$props$slots4","_this$props$slots$max","_this$props$slots5","_this$props$slots6","_this$props$slots7","_ref","_this$tableQueryParam","toolbarPannelProps","toolbarProps","this","ToolbarPannel","maxSelection","wrapProps","undefined","nextProps","_nextProps$query","equalTableQueryParams","JSON","stringify","_this$mergeConfig$wra","rootClasses","dinoTableClasses","root","className","renderWrapContext","TableStyled","x","join","DataGrid","getDataGridProps"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createClass as t,classCallCheck as
|
|
1
|
+
import{createClass as t,classCallCheck as r,defineProperty as e,objectSpread2 as i}from"../../_virtual/_rollupPluginBabelHelpers.js";import{encodeBase64 as l,tryParseObject as a,decodeBase64 as n}from"../utils/helpers.js";import"../utils/dayjs-config.js";import{QueryParam as u}from"../utils/query-param.js";var s=new(t(function t(){var s=this;r(this,t),e(this,"extractTableQueryParams",function(t){return t?{pagination:t.pagination,filter:t.filter,sort:t.sort,loading:t.loading}:{}}),e(this,"isEmpty",function(t,r){var e,i=s.extractTableQueryParams(t),l=!i.filter||i.filter.items.filter(function(t){return!!t.value}).length<1,a=!(null!==(e=t.filter)&&void 0!==e&&e.quickFilterValues)||t.filter.quickFilterValues.length<1;return l||a}),e(this,"equalTableQueryParams",function(t,r){return JSON.stringify(s.extractTableQueryParams(t))===JSON.stringify(s.extractTableQueryParams(r))}),e(this,"mapInitialState",function(t,r){return t?i({pagination:{paginationModel:t.pagination},filter:{filterModel:t.filter},sorting:{sortModel:s.mapSortModel(t.sort)}},r):null!=r?r:{}}),e(this,"mapSortModel",function(t){return null==t?void 0:t.map(function(t){return{field:t.field.toString(),sort:t.sort}})}),e(this,"detectSearchType",function(t){var r=t.quickFilterValues&&t.quickFilterValues.length>0,e=t.items&&t.items.length>0;return r&&!e?"quickSearch":e?"filter":void 0}),e(this,"extractToUrlQuery",function(t){var r,e=t.filter,i={filter:e,sort:t.sort,pagination:t.pagination},l=!(null!=e&&null!==(r=e.quickFilterValues)&&void 0!==r&&r.filter(function(t){return!!t}).length);return null!=e&&e.items.length||!l||(i.filter=void 0),i}),e(this,"equals",function(t,r){return JSON.stringify(s.extractToUrlQuery(t))===JSON.stringify(s.extractToUrlQuery(r))}),e(this,"setUrlQuery",function(t,r){try{if(s.equals(t,r))u.deletes("table");else{var e=s.extractToUrlQuery(t),i={table:l(JSON.stringify(e))};u.patch(i)}}catch(t){console.log("Set URL Query error:",t)}}),e(this,"getUrlQuery",function(t){var r,e=u.getAll();if(null==e||!e.table)return t;var i=a(n(null!==(r=e.table)&&void 0!==r?r:""),{});return Object.keys(i).length<1?t:i})}));export{s as default};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../src/table/helpers.ts"],"sourcesContent":["import { GridFilterModel, GridSortItem, GridSortModel } from '@mui/x-data-grid'\r\nimport { GridInitialStateCommunity } from '@mui/x-data-grid/models/gridStateCommunity'\r\nimport { ICustomGridSortModel, ITableQueryParams, ITableQueryDetail } from './types'\r\nimport { decodeBase64, encodeBase64, QueryParam, tryParseObject } from '../utils'\r\n\r\nexport
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../src/table/helpers.ts"],"sourcesContent":["import { GridFilterModel, GridSortItem, GridSortModel } from '@mui/x-data-grid'\r\nimport { GridInitialStateCommunity } from '@mui/x-data-grid/models/gridStateCommunity'\r\nimport { ICustomGridSortModel, ITableQueryParams, ITableQueryDetail } from './types'\r\nimport { decodeBase64, encodeBase64, QueryParam, tryParseObject } from '../utils'\r\n\r\nexport interface ITableQueryParamModel {\r\n table?: string\r\n}\r\n\r\nclass TableHelperBase {\r\n private extractTableQueryParams = <T>(data?: ITableQueryParams<T>): ITableQueryParams<T> => {\r\n if (!data) return {}\r\n const { pagination, filter, sort, loading } = data\r\n return { pagination, filter, sort, loading }\r\n }\r\n\r\n isEmpty = <T>(value: ITableQueryParams<T>, defaultValue?: ITableQueryParams<T>): boolean => {\r\n const obj = this.extractTableQueryParams<T>(value)\r\n const check1 = !obj.filter || obj.filter.items.filter((x) => !!x.value).length < 1\r\n const check2 = !value.filter?.quickFilterValues || value.filter.quickFilterValues.length < 1\r\n // const check3 =\r\n return check1 || check2\r\n }\r\n\r\n equalTableQueryParams = <T>(ti1?: ITableQueryParams<T>, ti2?: ITableQueryParams<T>): boolean => {\r\n return JSON.stringify(this.extractTableQueryParams<T>(ti1)) === JSON.stringify(this.extractTableQueryParams<T>(ti2))\r\n }\r\n\r\n mapInitialState = <T>(value?: ITableQueryParams<T>, initialState?: GridInitialStateCommunity): GridInitialStateCommunity => {\r\n if (!value) return initialState ?? {}\r\n return {\r\n pagination: { paginationModel: value.pagination },\r\n filter: { filterModel: value.filter as GridFilterModel },\r\n sorting: { sortModel: this.mapSortModel(value.sort) },\r\n ...initialState\r\n }\r\n }\r\n\r\n mapSortModel = <T>(value?: ICustomGridSortModel<T>): GridSortModel | undefined => {\r\n return value?.map<GridSortItem>((x) => ({ field: x.field.toString(), sort: x.sort }))\r\n }\r\n\r\n detectSearchType = (data: GridFilterModel): ITableQueryDetail => {\r\n const hasQuickSearch = data.quickFilterValues && data.quickFilterValues.length > 0\r\n const hasFilter = data.items && data.items.length > 0\r\n if (hasQuickSearch && !hasFilter) return 'quickSearch'\r\n if (hasFilter) return 'filter'\r\n }\r\n\r\n //#region Query Params\r\n private extractToUrlQuery = <TModel>(tableInfo: Partial<ITableQueryParams<TModel>>): Partial<ITableQueryParams<TModel>> => {\r\n const { filter, sort, pagination } = tableInfo\r\n const obj = { filter, sort, pagination }\r\n const isQuickSearchEmpty = !filter?.quickFilterValues?.filter((x) => !!x).length\r\n if (!filter?.items.length && isQuickSearchEmpty) {\r\n obj.filter = undefined\r\n }\r\n return obj\r\n }\r\n\r\n private equals = <TModel>(tableInfo: Partial<ITableQueryParams<TModel>>, tableInfoOld: Partial<ITableQueryParams<TModel>>) => {\r\n return JSON.stringify(this.extractToUrlQuery(tableInfo)) === JSON.stringify(this.extractToUrlQuery(tableInfoOld))\r\n }\r\n\r\n setUrlQuery = <TModel>(tableInfo: Partial<ITableQueryParams<TModel>>, defaultValue: ITableQueryParams<TModel>) => {\r\n try {\r\n if (!this.equals(tableInfo, defaultValue)) {\r\n const data = this.extractToUrlQuery(tableInfo)\r\n const tqp: ITableQueryParamModel = { table: encodeBase64(JSON.stringify(data)) }\r\n QueryParam.patch(tqp)\r\n } else {\r\n QueryParam.deletes<ITableQueryParamModel>('table')\r\n }\r\n } catch (error) {\r\n console.log('Set URL Query error:', error)\r\n }\r\n }\r\n\r\n getUrlQuery = <TModel>(defaultValue: ITableQueryParams<TModel>): ITableQueryParams<TModel> => {\r\n const temp = QueryParam.getAll() as ITableQueryParamModel\r\n if (!temp?.table) return defaultValue\r\n const data = tryParseObject<ITableQueryParams<TModel>>(decodeBase64(temp.table ?? ''), {})\r\n if (Object.keys(data).length < 1) return defaultValue\r\n return data\r\n }\r\n //#endregion\r\n}\r\n\r\nconst TableHelper = new TableHelperBase()\r\nexport default TableHelper\r\n"],"names":["TableHelper","_createClass","TableHelperBase","_this","this","_classCallCheck","_defineProperty","data","pagination","filter","sort","loading","value","defaultValue","_value$filter","obj","extractTableQueryParams","check1","items","x","length","check2","quickFilterValues","ti1","ti2","JSON","stringify","initialState","_objectSpread","paginationModel","filterModel","sorting","sortModel","mapSortModel","map","field","toString","hasQuickSearch","hasFilter","tableInfo","_filter$quickFilterVa","isQuickSearchEmpty","undefined","tableInfoOld","extractToUrlQuery","equals","QueryParam","deletes","tqp","table","encodeBase64","patch","error","console","log","_temp$table","temp","getAll","tryParseObject","decodeBase64","Object","keys"],"mappings":"oTAGiF,IAqF3EA,EAAc,IA/ECC,EAAA,SAAAC,IAAA,IAAAC,EAAAC,KAAAC,OAAAH,GAAAI,EAAAF,KAAA,0BACe,SAAIG,GACpC,OAAKA,EAEE,CAAEC,WADqCD,EAAtCC,WACaC,OADyBF,EAA1BE,OACSC,KADiBH,EAAlBG,KACOC,QADWJ,EAAZI,SADhB,CAAE,IAGrBL,EAESF,KAAA,UAAA,SAAIQ,EAA6BC,GAAgD,IAAAC,EACnFC,EAAMZ,EAAKa,wBAA2BJ,GACtCK,GAAUF,EAAIN,QAAUM,EAAIN,OAAOS,MAAMT,OAAO,SAACU,GAAC,QAAOA,EAAEP,QAAOQ,OAAS,EAC3EC,IAAsB,QAAbP,EAACF,EAAMH,cAAM,IAAAK,GAAZA,EAAcQ,oBAAqBV,EAAMH,OAAOa,kBAAkBF,OAAS,EAE3F,OAAOH,GAAUI,IAClBf,EAEuBF,KAAA,wBAAA,SAAImB,EAA4BC,GACtD,OAAOC,KAAKC,UAAUvB,EAAKa,wBAA2BO,MAAUE,KAAKC,UAAUvB,EAAKa,wBAA2BQ,MAChHlB,EAEiBF,KAAA,kBAAA,SAAIQ,EAA8Be,GAClD,OAAKf,EACLgB,EAAA,CACEpB,WAAY,CAAEqB,gBAAiBjB,EAAMJ,YACrCC,OAAQ,CAAEqB,YAAalB,EAAMH,QAC7BsB,QAAS,CAAEC,UAAW7B,EAAK8B,aAAarB,EAAMF,QAC3CiB,GALcA,QAAAA,EAAgB,CAAE,IAOtCrB,EAAAF,KAAA,eAEc,SAAIQ,GACjB,OAAOA,aAAK,EAALA,EAAOsB,IAAkB,SAACf,GAAC,MAAM,CAAEgB,MAAOhB,EAAEgB,MAAMC,WAAY1B,KAAMS,EAAET,KAAM,KACpFJ,EAAAF,KAAA,mBAEkB,SAACG,GAClB,IAAM8B,EAAiB9B,EAAKe,mBAAqBf,EAAKe,kBAAkBF,OAAS,EAC3EkB,EAAY/B,EAAKW,OAASX,EAAKW,MAAME,OAAS,EACpD,OAAIiB,IAAmBC,EAAkB,cACrCA,EAAkB,cAAtB,IAGFhC,EAAAF,KAAA,oBAC4B,SAASmC,GAAqF,IAAAC,EAChH/B,EAA6B8B,EAA7B9B,OACFM,EAAM,CAAEN,OAAAA,EAAQC,KADe6B,EAArB7B,KACYF,WADS+B,EAAf/B,YAEhBiC,IAAsBhC,SAAyB,QAAnB+B,EAAN/B,EAAQa,yBAARkB,IAAyBA,GAAzBA,EAA2B/B,OAAO,SAACU,GAAC,QAAOA,CAAC,GAAEC,QAI1E,OAHKX,SAAAA,EAAQS,MAAME,SAAUqB,IAC3B1B,EAAIN,YAASiC,GAER3B,IACRT,EAEgBF,KAAA,SAAA,SAASmC,EAA+CI,GACvE,OAAOlB,KAAKC,UAAUvB,EAAKyC,kBAAkBL,MAAgBd,KAAKC,UAAUvB,EAAKyC,kBAAkBD,MACpGrC,EAEaF,KAAA,cAAA,SAASmC,EAA+C1B,GACpE,IACE,GAAKV,EAAK0C,OAAON,EAAW1B,GAK1BiC,EAAWC,QAA+B,aALD,CACzC,IAAMxC,EAAOJ,EAAKyC,kBAAkBL,GAC9BS,EAA6B,CAAEC,MAAOC,EAAazB,KAAKC,UAAUnB,KACxEuC,EAAWK,MAAMH,EAClB,CAGF,CAAC,MAAOI,GACPC,QAAQC,IAAI,uBAAwBF,EACrC,IACF9C,EAAAF,KAAA,cAEa,SAASS,GAAsE,IAAA0C,EACrFC,EAAOV,EAAWW,SACxB,GAAKD,UAAAA,EAAMP,MAAO,OAAOpC,EACzB,IAAMN,EAAOmD,EAA0CC,EAAuBJ,QAAXA,EAACC,EAAKP,iBAAKM,EAAAA,EAAI,IAAK,CAAA,GACvF,OAAIK,OAAOC,KAAKtD,GAAMa,OAAS,EAAUP,EAClCN,GACR"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{objectWithoutProperties as e,objectSpread2 as i,defineProperty as r}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as t}from"react/jsx-runtime";import{styled as o,Box as a}from"@mui/material";var l=["children"],n={root:"DinoTable-root",whiteSpacePre:"DinoTable-white-space-pre-wrap"},p=o(function(r){var o=r.children,n=e(r,l);return t(a,i(i({},n),{},{children:t("div",{children:o})}))})(r(r({flex:1,position:"relative","& > div":{position:"absolute",top:0,left:0,width:"100%",height:"100%",overflowY:"auto"},".MuiDataGrid-root":{"--unstable_DataGrid-radius":0,overflow:"hidden"}},".MuiDataGrid-cell.".concat(n.whiteSpacePre," .MuiDataGrid-cellContent"),{whiteSpace:"pre"}),".MuiTablePagination-root p",{marginBottom:0}));export{p as TableStyled,n as dinoTableClasses};
|
|
2
|
+
//# sourceMappingURL=styled.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styled.js","sources":["../../../src/table/styled.tsx"],"sourcesContent":["import { Box, BoxProps, styled } from '@mui/material'\r\n\r\nexport const dinoTableClasses = {\r\n root: 'DinoTable-root',\r\n whiteSpacePre: 'DinoTable-white-space-pre-wrap'\r\n}\r\n\r\nexport const TableStyled = styled(({ children, ...p }: BoxProps) => (\r\n <Box {...p}>\r\n <div>{children}</div>\r\n </Box>\r\n))({\r\n flex: 1,\r\n position: 'relative',\r\n '& > div': {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n overflowY: 'auto'\r\n },\r\n '.MuiDataGrid-root': {\r\n '--unstable_DataGrid-radius': 0,\r\n overflow: 'hidden'\r\n },\r\n [`.MuiDataGrid-cell.${dinoTableClasses.whiteSpacePre} .MuiDataGrid-cellContent`]: {\r\n whiteSpace: 'pre'\r\n },\r\n [`.MuiTablePagination-root p`]: {\r\n marginBottom: 0\r\n }\r\n})\r\n"],"names":["dinoTableClasses","root","whiteSpacePre","TableStyled","styled","_ref","children","p","_objectWithoutProperties","_excluded","_jsx","Box","_objectSpread","_defineProperty","flex","position","top","left","width","height","overflowY","overflow","concat","whiteSpace","marginBottom"],"mappings":"wOAEaA,EAAmB,CAC9BC,KAAM,iBACNC,cAAe,kCAGJC,EAAcC,EAAO,SAAAC,GAAA,IAAGC,EAAQD,EAARC,SAAaC,EAACC,EAAAH,EAAAI,GAAA,OACjDC,EAACC,EAAGC,EAAAA,KAAKL,GAAC,GAAA,CAAAD,SACRI,EAAM,MAAA,CAAAJ,SAAAA,MACF,EAHmBF,CAIzBS,EAAAA,EAAA,CACAC,KAAM,EACNC,SAAU,WACV,UAAW,CACTA,SAAU,WACVC,IAAK,EACLC,KAAM,EACNC,MAAO,OACPC,OAAQ,OACRC,UAAW,QAEb,oBAAqB,CACnB,6BAA8B,EAC9BC,SAAU,WACX,qBAAAC,OACqBtB,EAAiBE,cAA2C,6BAAA,CAChFqB,WAAY,QAEkB,6BAAA,CAC9BC,aAAc"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as
|
|
1
|
+
import{defineProperty as e,inherits as t,createClass as r,createForOfIteratorHelper as i,objectSpread2 as o,classCallCheck as n,callSuper as a}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsxs as l,Fragment as s,jsx as p}from"react/jsx-runtime";import{Component as c}from"react";import{GridToolbarColumnsButton as d,GridToolbarFilterButton as u,GridToolbarDensitySelector as m,GridToolbarQuickFilter as h}from"@mui/x-data-grid";import{styled as b,Box as f,GlobalStyles as v,Typography as x}from"@mui/material";import{BtnFormCreate as g}from"./ui.buttons.js";import{CustomExportButton as y}from"./custom.export-button.js";import{Breadcrumbs as T}from"../components/breadcrumbs.js";import{HelpTooltip as w}from"../components/help-tooltip.js";var P=function(){function b(){var t;n(this,b);for(var r=arguments.length,i=new Array(r),c=0;c<r;c++)i[c]=arguments[c];return t=a(this,b,[].concat(i)),e(t,"_popperObserver",null),e(t,"_elementObserver",null),e(t,"_observedPopper",null),e(t,"renderTitle",function(){var e,r=t.props,i=r.title,n=r.afterTitle,a=r.breadcrumbs,c=r.icon,d="".concat(_.titleWrap).concat(null!==(e=t.props.titleProps)&&void 0!==e&&e.className?" ".concat(t.props.titleProps.className):"");if(!(!!i||!!a||!!n))return p(s,{});var u=i;return"string"==typeof i&&(u=p(x,{noWrap:!0,variant:"subtitle1",className:_.titleText,children:i})),a&&(u=p(T,{value:a})),l(f,o(o({},t.props.titleProps),{},{className:d,children:[c&&p("div",{className:_.icon,children:c}),u,n]}))}),e(t,"renderEndAdornment",function(){return!t.props.searchInclude||t.props.searchInclude.length<=0?p(s,{}):p(w,{title:"The search includes",small:!0,children:p("ul",{className:_.searchHelp,children:t.props.searchInclude.map(function(e,t){return p("li",{children:p(x,{variant:"body2",children:e})},t)})})})}),t}return t(b,c),r(b,[{key:"componentDidMount",value:function(){var e=this;this._popperObserver=new MutationObserver(function(){var t=document.querySelector(".MuiDataGrid-panel");if(t&&window.matchMedia("(max-width:768px)").matches&&e._observedPopper!==t){e._observedPopper=t;var r=function(){var e=(t.style.transform||"").match(/translate3d\([^,]+,\s*([^,]+),\s*[^\)]+\)/),r=e?e[1].trim():"0px";t.style.transform="translate3d(8px, ".concat(r,", 0px)")};r(),e._elementObserver&&e._elementObserver.disconnect(),e._elementObserver=new MutationObserver(function(e){var o,n=i(e);try{for(n.s();!(o=n.n()).done;){if("style"===o.value.attributeName)(t.style.transform||"").startsWith("translate3d(8px")||r()}}catch(e){n.e(e)}finally{n.f()}}),e._elementObserver.observe(t,{attributes:!0,attributeFilter:["style"]})}}),this._popperObserver.observe(document.body,{childList:!0,subtree:!0})}},{key:"componentWillUnmount",value:function(){this._popperObserver&&(this._popperObserver.disconnect(),this._popperObserver=null),this._elementObserver&&(this._elementObserver.disconnect(),this._elementObserver=null),this._observedPopper=null}},{key:"render",value:function(){var e,t,r,i;return l(s,{children:[p(v,{styles:{"@media (max-width:768px)":{".MuiDataGrid-panel":{left:"8px !important",overflow:"hidden",maxWidth:"calc(100svw - 16px)",width:"100%",".MuiPaper-root, .MuiDataGrid-paper":{margin:"0 8px"},".MuiDataGrid-panelContent":{overflow:"auto",".MuiFormControl-root":{width:"auto"},".MuiDataGrid-filterFormValueInput":{width:"100px"}}}}}}),l(O,{className:_.root,sx:this.props.sx,children:[this.renderTitle(),this.props.aboveAction,l(f,o(o({className:_.actionsRow},this.props.actionWrapProps),{},{children:[l(f,{className:_.actionsLeft,children:[l(f,{className:_.gridToolbar,children:[!1!==(null===(e=this.props.visibilityToolbar)||void 0===e?void 0:e.columns)&&p(d,{}),!1!==(null===(t=this.props.visibilityToolbar)||void 0===t?void 0:t.filters)&&p(u,{}),!1!==(null===(r=this.props.visibilityToolbar)||void 0===r?void 0:r.density)&&p(m,{}),!1!==(null===(i=this.props.visibilityToolbar)||void 0===i?void 0:i.export)&&p(y,{csvOptions:this.props.exportCsvOptions})]}),this.props.formCreate&&p(g,{children:this.props.formCreate}),this.props.afterAction]}),p(f,{className:_.actionsRight,children:l(f,{className:_.quickFilterWrap,children:[p(h,{fullWidth:!0,variant:"standard",size:"small",debounceMs:800,quickFilterParser:function(e){return[e]}}),this.renderEndAdornment()]})})]})),this.props.belowAction]})]})}}])}(),_={root:"Dino-ToolbarPannel-root",actionsRow:"Dino-ToolbarPannel-actionsRow",actionsLeft:"Dino-ToolbarPannel-actionsLeft",actionsRight:"Dino-ToolbarPannel-actionsRight",quickFilterWrap:"Dino-ToolbarPannel-quickFilterWrap",gridToolbar:"Dino-ToolbarPannel-gridToolbar",titleWrap:"Dino-ToolbarPannel-titleWrap",titleText:"Dino-ToolbarPannel-titleText",searchHelp:"Dino-ToolbarPannel-searchHelp",icon:"Dino-ToolbarPannel-icon"},O=b(f)(function(t){var r=t.theme;return e(e(e(e(e(e(e(e(e(e({padding:r.spacing(1,2,0)},".".concat(_.actionsRow),{display:"flex",flexWrap:"wrap"}),".".concat(_.actionsLeft),{flex:1,display:"flex",alignItems:"center",flexWrap:"wrap"}),".".concat(_.actionsRight),e({display:"flex",gap:"8px",alignItems:"center",width:"auto"},r.breakpoints.down("md"),{width:"100%"})),".".concat(_.quickFilterWrap),{display:"flex",alignItems:"center"}),".".concat(_.gridToolbar),{padding:0}),".".concat(_.titleWrap),{height:"var(--height-table-topbar, 48px)",display:"flex",alignItems:"center"}),".".concat(_.titleText),{fontWeight:700,flex:1}),".".concat(_.icon),{marginRight:8,display:"flex",alignItems:"center",justifyContent:"center",flex:"0 0 auto"}),".".concat(_.searchHelp),{margin:"0 0 0 18px",padding:0,li:{position:"relative"},"li::after":{content:'"►"',display:"inline-block",top:"50%",transform:"translateY(-50%)",position:"absolute",left:"-18px"}}),r.breakpoints.down("md"),{padding:r.spacing(1,1,0)})});export{P as default};
|
|
2
2
|
//# sourceMappingURL=toolbar-pannel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolbar-pannel.js","sources":["../../../src/table/toolbar-pannel.tsx"],"sourcesContent":["import React, { Component } from 'react'\r\nimport { GridToolbarColumnsButton, GridToolbarDensitySelector } from '@mui/x-data-grid'\r\nimport { GridToolbarExport, GridToolbarFilterButton, GridToolbarQuickFilter } from '@mui/x-data-grid'\r\nimport { Box, BoxProps, styled, Typography } from '@mui/material'\r\nimport { BtnFormCreate } from './ui.buttons'\r\nimport { Breadcrumbs, IBreadcrumbConfig, HelpTooltip } from '../components'\r\nimport { IExportCsvOptionsModel } from './csv-export-helper'\r\nimport { CustomExportButton } from './custom.export-button'\r\n\r\nexport interface IToolbarPannelToolbarConfig {\r\n columns?: boolean\r\n filters?: boolean\r\n density?: boolean\r\n export?: boolean\r\n}\r\n\r\nexport interface IToolbarPannelProps {\r\n title?: React.ReactNode\r\n titleProps?: BoxProps\r\n icon?: React.ReactNode\r\n afterTitle?: React.ReactNode\r\n searchInclude?: string[]\r\n visibilityToolbar?: IToolbarPannelToolbarConfig\r\n formCreate?: React.ReactNode\r\n breadcrumbs?: IBreadcrumbConfig[]\r\n afterAction?: React.ReactNode\r\n belowAction?: React.ReactNode\r\n aboveAction?: React.ReactNode\r\n actionWrapProps?: BoxProps\r\n sx?: BoxProps['sx']\r\n exportCsvOptions?: IExportCsvOptionsModel\r\n}\r\n\r\nclass ToolbarPannel extends Component<React.PropsWithChildren<IToolbarPannelProps>> {\r\n render() {\r\n return (\r\n <ToolbarPannelStyled className={toolbarPannelClasses.root} sx={this.props.sx}>\r\n {this.renderTitle()}\r\n {this.props.aboveAction}\r\n <Box className={toolbarPannelClasses.actionsRow} {...this.props.actionWrapProps}>\r\n <Box className={toolbarPannelClasses.actionsLeft}>\r\n <Box className={toolbarPannelClasses.gridToolbar}>\r\n {this.props.visibilityToolbar?.columns !== false && <GridToolbarColumnsButton />}\r\n {this.props.visibilityToolbar?.filters !== false && <GridToolbarFilterButton />}\r\n {this.props.visibilityToolbar?.density !== false && <GridToolbarDensitySelector />}\r\n {this.props.visibilityToolbar?.export !== false && <CustomExportButton csvOptions={this.props.exportCsvOptions} />}\r\n </Box>\r\n {this.props.formCreate && <BtnFormCreate>{this.props.formCreate}</BtnFormCreate>}\r\n {this.props.afterAction}\r\n </Box>\r\n <Box className={toolbarPannelClasses.actionsRight}>\r\n <Box className={toolbarPannelClasses.quickFilterWrap}>\r\n <GridToolbarQuickFilter fullWidth variant='standard' size='small' debounceMs={800} quickFilterParser={(x: any) => [x]} />\r\n {this.renderEndAdornment()}\r\n </Box>\r\n </Box>\r\n </Box>\r\n {this.props.belowAction}\r\n </ToolbarPannelStyled>\r\n )\r\n }\r\n\r\n renderTitle = () => {\r\n const { title, afterTitle, breadcrumbs, icon } = this.props\r\n const titleClassName = `${toolbarPannelClasses.titleWrap}${this.props.titleProps?.className ? ` ${this.props.titleProps.className}` : ''}`\r\n\r\n const isVisible = !!title || !!breadcrumbs || !!afterTitle\r\n if (!isVisible) return <></>\r\n\r\n let titleElm = title\r\n if (typeof title === 'string') {\r\n titleElm = (\r\n <Typography noWrap variant='subtitle1' className={toolbarPannelClasses.titleText}>\r\n {title}\r\n </Typography>\r\n )\r\n }\r\n if (breadcrumbs) titleElm = <Breadcrumbs value={breadcrumbs} />\r\n\r\n return (\r\n <Box {...this.props.titleProps} className={titleClassName}>\r\n {icon && <div className={toolbarPannelClasses.icon}>{icon}</div>}\r\n {titleElm}\r\n {afterTitle}\r\n </Box>\r\n )\r\n }\r\n\r\n renderEndAdornment = () => {\r\n if (!this.props.searchInclude || this.props.searchInclude.length <= 0) return <></>\r\n return (\r\n <HelpTooltip title='The search includes' small>\r\n <ul className={toolbarPannelClasses.searchHelp}>\r\n {this.props.searchInclude.map((item, index) => (\r\n <li key={index}>\r\n <Typography variant='body2'>{item}</Typography>\r\n </li>\r\n ))}\r\n </ul>\r\n </HelpTooltip>\r\n )\r\n }\r\n}\r\nexport default ToolbarPannel\r\n\r\nconst toolbarPannelClasses = {\r\n root: 'Dino-ToolbarPannel-root',\r\n actionsRow: 'Dino-ToolbarPannel-actionsRow',\r\n actionsLeft: 'Dino-ToolbarPannel-actionsLeft',\r\n actionsRight: 'Dino-ToolbarPannel-actionsRight',\r\n quickFilterWrap: 'Dino-ToolbarPannel-quickFilterWrap',\r\n gridToolbar: 'Dino-ToolbarPannel-gridToolbar',\r\n titleWrap: 'Dino-ToolbarPannel-titleWrap',\r\n titleText: 'Dino-ToolbarPannel-titleText',\r\n searchHelp: 'Dino-ToolbarPannel-searchHelp',\r\n icon: 'Dino-ToolbarPannel-icon'\r\n}\r\n\r\nconst ToolbarPannelStyled = styled(Box)(({ theme }) => ({\r\n padding: theme.spacing(1, 2, 0),\r\n [`.${toolbarPannelClasses.actionsRow}`]: { display: 'flex', flexWrap: 'wrap' },\r\n [`.${toolbarPannelClasses.actionsLeft}`]: { flex: 1, display: 'flex', alignItems: 'center', flexWrap: 'wrap' },\r\n [`.${toolbarPannelClasses.actionsRight}`]: {\r\n display: 'flex',\r\n gap: '8px',\r\n alignItems: 'center',\r\n width: 'auto',\r\n [theme.breakpoints.down('md')]: { width: '100%' }\r\n },\r\n [`.${toolbarPannelClasses.quickFilterWrap}`]: { display: 'flex', alignItems: 'center' },\r\n [`.${toolbarPannelClasses.gridToolbar}`]: { padding: 0 },\r\n [`.${toolbarPannelClasses.titleWrap}`]: { height: 'var(--height-table-topbar, 48px)', display: 'flex', alignItems: 'center' },\r\n [`.${toolbarPannelClasses.titleText}`]: { fontWeight: 700, flex: 1 },\r\n [`.${toolbarPannelClasses.icon}`]: {\r\n marginRight: 8,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flex: '0 0 auto'\r\n },\r\n [`.${toolbarPannelClasses.searchHelp}`]: {\r\n margin: '0 0 0 18px',\r\n padding: 0,\r\n li: { position: 'relative' },\r\n 'li::after': {\r\n content: '\"►\"',\r\n display: 'inline-block',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n position: 'absolute',\r\n left: '-18px'\r\n }\r\n },\r\n [theme.breakpoints.down('md')]: { padding: theme.spacing(1, 1, 0) }\r\n}))\r\n"],"names":["ToolbarPannel","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","_this$props$titleProp","_this$props","props","title","afterTitle","breadcrumbs","icon","titleClassName","toolbarPannelClasses","titleWrap","titleProps","className","_jsx","titleElm","Typography","noWrap","variant","titleText","Breadcrumbs","value","_jsxs","Box","_objectSpread","children","searchInclude","HelpTooltip","small","searchHelp","map","item","index","_inherits","Component","_createClass","key","_this$props$visibilit","_this$props$visibilit2","_this$props$visibilit3","_this$props$visibilit4","ToolbarPannelStyled","root","sx","renderTitle","aboveAction","actionsRow","actionWrapProps","actionsLeft","gridToolbar","visibilityToolbar","columns","GridToolbarColumnsButton","filters","GridToolbarFilterButton","density","GridToolbarDensitySelector","CustomExportButton","csvOptions","exportCsvOptions","formCreate","BtnFormCreate","afterAction","actionsRight","quickFilterWrap","GridToolbarQuickFilter","fullWidth","size","debounceMs","quickFilterParser","x","renderEndAdornment","belowAction","styled","_ref","theme","padding","spacing","display","flexWrap","flex","alignItems","gap","width","breakpoints","down","height","fontWeight","marginRight","justifyContent","margin","li","position","content","top","transform","left"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"toolbar-pannel.js","sources":["../../../src/table/toolbar-pannel.tsx"],"sourcesContent":["import React, { Component } from 'react'\r\nimport { GridToolbarColumnsButton, GridToolbarDensitySelector } from '@mui/x-data-grid'\r\nimport { GridToolbarFilterButton, GridToolbarQuickFilter } from '@mui/x-data-grid'\r\nimport { Box, BoxProps, GlobalStyles, styled, Typography } from '@mui/material'\r\nimport { BtnFormCreate } from './ui.buttons'\r\nimport { Breadcrumbs, IBreadcrumbConfig, HelpTooltip } from '../components'\r\nimport { IExportCsvOptionsModel } from './csv-export-helper'\r\nimport { CustomExportButton } from './custom.export-button'\r\n\r\nexport interface IToolbarPannelToolbarConfig {\r\n columns?: boolean\r\n filters?: boolean\r\n density?: boolean\r\n export?: boolean\r\n}\r\n\r\nexport interface IToolbarPannelProps {\r\n title?: React.ReactNode\r\n titleProps?: BoxProps\r\n icon?: React.ReactNode\r\n afterTitle?: React.ReactNode\r\n searchInclude?: string[]\r\n visibilityToolbar?: IToolbarPannelToolbarConfig\r\n formCreate?: React.ReactNode\r\n breadcrumbs?: IBreadcrumbConfig[]\r\n afterAction?: React.ReactNode\r\n belowAction?: React.ReactNode\r\n aboveAction?: React.ReactNode\r\n actionWrapProps?: BoxProps\r\n sx?: BoxProps['sx']\r\n exportCsvOptions?: IExportCsvOptionsModel\r\n}\r\n\r\nclass ToolbarPannel extends Component<React.PropsWithChildren<IToolbarPannelProps>> {\r\n private _popperObserver: MutationObserver | null = null\r\n private _elementObserver: MutationObserver | null = null\r\n private _observedPopper: HTMLElement | null = null\r\n\r\n componentDidMount() {\r\n // observe DOM for filter popper being added; when found, observe + fix transform on mobile\r\n this._popperObserver = new MutationObserver(() => {\r\n // selector based on class visible in DevTools (no MuiPopper-root prefix)\r\n const popper = document.querySelector('.MuiDataGrid-panel') as HTMLElement | null\r\n if (!popper) return\r\n if (!window.matchMedia('(max-width:768px)').matches) return\r\n if (this._observedPopper === popper) return\r\n\r\n this._observedPopper = popper\r\n\r\n const applyFix = () => {\r\n // extract Y from current transform, keep it; force X = 8px\r\n const raw = popper.style.transform || ''\r\n const m = raw.match(/translate3d\\([^,]+,\\s*([^,]+),\\s*[^\\)]+\\)/)\r\n const y = m ? m[1].trim() : '0px'\r\n popper.style.transform = `translate3d(8px, ${y}, 0px)`\r\n }\r\n\r\n applyFix()\r\n\r\n // re-apply every time Popper writes a new inline transform\r\n if (this._elementObserver) this._elementObserver.disconnect()\r\n this._elementObserver = new MutationObserver((muts) => {\r\n for (const mut of muts) {\r\n if (mut.attributeName === 'style') {\r\n // guard: avoid infinite loop — only re-apply if X is not already 8px\r\n const cur = popper.style.transform || ''\r\n if (!cur.startsWith('translate3d(8px')) applyFix()\r\n }\r\n }\r\n })\r\n this._elementObserver.observe(popper, { attributes: true, attributeFilter: ['style'] })\r\n })\r\n\r\n this._popperObserver.observe(document.body, { childList: true, subtree: true })\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this._popperObserver) {\r\n this._popperObserver.disconnect()\r\n this._popperObserver = null\r\n }\r\n if (this._elementObserver) {\r\n this._elementObserver.disconnect()\r\n this._elementObserver = null\r\n }\r\n this._observedPopper = null\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n <GlobalStyles\r\n styles={{\r\n '@media (max-width:768px)': {\r\n '.MuiDataGrid-panel': {\r\n left: '8px !important',\r\n overflow: 'hidden',\r\n maxWidth: 'calc(100svw - 16px)',\r\n width: '100%',\r\n '.MuiPaper-root, .MuiDataGrid-paper': { margin: '0 8px' },\r\n '.MuiDataGrid-panelContent': {\r\n overflow: 'auto',\r\n '.MuiFormControl-root': { width: 'auto' },\r\n '.MuiDataGrid-filterFormValueInput': { width: '100px' }\r\n }\r\n }\r\n }\r\n }}\r\n />\r\n <ToolbarPannelStyled className={toolbarPannelClasses.root} sx={this.props.sx}>\r\n {this.renderTitle()}\r\n {this.props.aboveAction}\r\n <Box className={toolbarPannelClasses.actionsRow} {...this.props.actionWrapProps}>\r\n <Box className={toolbarPannelClasses.actionsLeft}>\r\n <Box className={toolbarPannelClasses.gridToolbar}>\r\n {this.props.visibilityToolbar?.columns !== false && <GridToolbarColumnsButton />}\r\n {this.props.visibilityToolbar?.filters !== false && <GridToolbarFilterButton />}\r\n {this.props.visibilityToolbar?.density !== false && <GridToolbarDensitySelector />}\r\n {this.props.visibilityToolbar?.export !== false && <CustomExportButton csvOptions={this.props.exportCsvOptions} />}\r\n </Box>\r\n {this.props.formCreate && <BtnFormCreate>{this.props.formCreate}</BtnFormCreate>}\r\n {this.props.afterAction}\r\n </Box>\r\n <Box className={toolbarPannelClasses.actionsRight}>\r\n <Box className={toolbarPannelClasses.quickFilterWrap}>\r\n <GridToolbarQuickFilter fullWidth variant='standard' size='small' debounceMs={800} quickFilterParser={(x: any) => [x]} />\r\n {this.renderEndAdornment()}\r\n </Box>\r\n </Box>\r\n </Box>\r\n {this.props.belowAction}\r\n </ToolbarPannelStyled>\r\n </>\r\n )\r\n }\r\n\r\n renderTitle = () => {\r\n const { title, afterTitle, breadcrumbs, icon } = this.props\r\n const titleClassName = `${toolbarPannelClasses.titleWrap}${this.props.titleProps?.className ? ` ${this.props.titleProps.className}` : ''}`\r\n\r\n const isVisible = !!title || !!breadcrumbs || !!afterTitle\r\n if (!isVisible) return <></>\r\n\r\n let titleElm = title\r\n if (typeof title === 'string') {\r\n titleElm = (\r\n <Typography noWrap variant='subtitle1' className={toolbarPannelClasses.titleText}>\r\n {title}\r\n </Typography>\r\n )\r\n }\r\n if (breadcrumbs) titleElm = <Breadcrumbs value={breadcrumbs} />\r\n\r\n return (\r\n <Box {...this.props.titleProps} className={titleClassName}>\r\n {icon && <div className={toolbarPannelClasses.icon}>{icon}</div>}\r\n {titleElm}\r\n {afterTitle}\r\n </Box>\r\n )\r\n }\r\n\r\n renderEndAdornment = () => {\r\n if (!this.props.searchInclude || this.props.searchInclude.length <= 0) return <></>\r\n return (\r\n <HelpTooltip title='The search includes' small>\r\n <ul className={toolbarPannelClasses.searchHelp}>\r\n {this.props.searchInclude.map((item, index) => (\r\n <li key={index}>\r\n <Typography variant='body2'>{item}</Typography>\r\n </li>\r\n ))}\r\n </ul>\r\n </HelpTooltip>\r\n )\r\n }\r\n}\r\nexport default ToolbarPannel\r\n\r\nconst toolbarPannelClasses = {\r\n root: 'Dino-ToolbarPannel-root',\r\n actionsRow: 'Dino-ToolbarPannel-actionsRow',\r\n actionsLeft: 'Dino-ToolbarPannel-actionsLeft',\r\n actionsRight: 'Dino-ToolbarPannel-actionsRight',\r\n quickFilterWrap: 'Dino-ToolbarPannel-quickFilterWrap',\r\n gridToolbar: 'Dino-ToolbarPannel-gridToolbar',\r\n titleWrap: 'Dino-ToolbarPannel-titleWrap',\r\n titleText: 'Dino-ToolbarPannel-titleText',\r\n searchHelp: 'Dino-ToolbarPannel-searchHelp',\r\n icon: 'Dino-ToolbarPannel-icon'\r\n}\r\n\r\nconst ToolbarPannelStyled = styled(Box)(({ theme }) => ({\r\n padding: theme.spacing(1, 2, 0),\r\n [`.${toolbarPannelClasses.actionsRow}`]: { display: 'flex', flexWrap: 'wrap' },\r\n [`.${toolbarPannelClasses.actionsLeft}`]: { flex: 1, display: 'flex', alignItems: 'center', flexWrap: 'wrap' },\r\n [`.${toolbarPannelClasses.actionsRight}`]: {\r\n display: 'flex',\r\n gap: '8px',\r\n alignItems: 'center',\r\n width: 'auto',\r\n [theme.breakpoints.down('md')]: { width: '100%' }\r\n },\r\n [`.${toolbarPannelClasses.quickFilterWrap}`]: { display: 'flex', alignItems: 'center' },\r\n [`.${toolbarPannelClasses.gridToolbar}`]: { padding: 0 },\r\n [`.${toolbarPannelClasses.titleWrap}`]: { height: 'var(--height-table-topbar, 48px)', display: 'flex', alignItems: 'center' },\r\n [`.${toolbarPannelClasses.titleText}`]: { fontWeight: 700, flex: 1 },\r\n [`.${toolbarPannelClasses.icon}`]: {\r\n marginRight: 8,\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n flex: '0 0 auto'\r\n },\r\n [`.${toolbarPannelClasses.searchHelp}`]: {\r\n margin: '0 0 0 18px',\r\n padding: 0,\r\n li: { position: 'relative' },\r\n 'li::after': {\r\n content: '\"►\"',\r\n display: 'inline-block',\r\n top: '50%',\r\n transform: 'translateY(-50%)',\r\n position: 'absolute',\r\n left: '-18px'\r\n }\r\n },\r\n [theme.breakpoints.down('md')]: { padding: theme.spacing(1, 1, 0) }\r\n}))\r\n"],"names":["ToolbarPannel","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","_this$props$titleProp","_this$props","props","title","afterTitle","breadcrumbs","icon","titleClassName","toolbarPannelClasses","titleWrap","titleProps","className","_jsx","titleElm","Typography","noWrap","variant","titleText","Breadcrumbs","value","_jsxs","Box","_objectSpread","children","searchInclude","HelpTooltip","small","searchHelp","map","item","index","_inherits","Component","_createClass","key","_this2","_popperObserver","MutationObserver","popper","document","querySelector","window","matchMedia","matches","_observedPopper","applyFix","m","style","transform","match","y","trim","_elementObserver","disconnect","muts","_step","_iterator","_createForOfIteratorHelper","s","n","done","attributeName","startsWith","err","e","f","observe","attributes","attributeFilter","body","childList","subtree","_this$props$visibilit","_this$props$visibilit2","_this$props$visibilit3","_this$props$visibilit4","_Fragment","GlobalStyles","styles","left","overflow","maxWidth","width","margin","ToolbarPannelStyled","root","sx","renderTitle","aboveAction","actionsRow","actionWrapProps","actionsLeft","gridToolbar","visibilityToolbar","columns","GridToolbarColumnsButton","filters","GridToolbarFilterButton","density","GridToolbarDensitySelector","CustomExportButton","csvOptions","exportCsvOptions","formCreate","BtnFormCreate","afterAction","actionsRight","quickFilterWrap","GridToolbarQuickFilter","fullWidth","size","debounceMs","quickFilterParser","x","renderEndAdornment","belowAction","styled","_ref","theme","padding","spacing","display","flexWrap","flex","alignItems","gap","breakpoints","down","height","fontWeight","marginRight","justifyContent","li","position","content","top"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{slicedToArray as r,asyncToGenerator as t,typeof as n,regenerator as e,objectSpread2 as o,toArray as a,arrayLikeToArray as
|
|
1
|
+
import{slicedToArray as r,asyncToGenerator as t,typeof as n,regenerator as e,objectSpread2 as o,toArray as a,arrayLikeToArray as i}from"../../_virtual/_rollupPluginBabelHelpers.js";import c from"dayjs";var u=function(r){return new Promise(function(t){return setTimeout(t,r)})},f=function(){var n=t(e().m(function t(n,o){var a,i,c;return e().w(function(t){for(;;)switch(t.n){case 0:return t.n=1,Promise.all([n(),u(o)]);case 1:return a=t.v,i=r(a,1),c=i[0],t.a(2,c)}},t)}));return function(r,t){return n.apply(this,arguments)}}(),s=function(r){return/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(r)},l=function(r){return/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(r)},d=function(r){return/^(\+?\d{1,4}[\s-]?)?((\(\d{1,4}\))|\d{1,4})[\s-]?\d{1,4}[\s-]?\d{1,9}$/.test((null!=r?r:"").trim())},y=function(r){return/^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i.test(r)},v=function(r,t){setTimeout(function(){window.scrollTo(o({top:0,left:0,behavior:"smooth"},r))},t||50)},h=function(){for(var r=arguments.length,t=new Array(r),n=0;n<r;n++)t[n]=arguments[n];return t.join(" ")},p=function(r){return r&&"object"===n(r)&&!Array.isArray(r)},A=function(){for(var r=arguments.length,t=new Array(r),n=0;n<r;n++)t[n]=arguments[n];return t.reduce(function(r,t){return t?(Object.keys(t).forEach(function(n){p(r[n])&&p(t[n])?r[n]=A(r[n],t[n]):r[n]=t[n]}),r):r},{})},m=function(t){try{return t?Object.entries(t).reduce(function(t,n){var e=r(n,2),o=e[0],a=e[1];return void 0!==a&&(t[o]=a),t},{}):{}}catch(r){return{}}},g=function(t){if("object"!==n(t)||null===t)return t;var e=Array.isArray(t)?[]:{};return Object.entries(t).forEach(function(t){var o=r(t,2),a=o[0],i=o[1];if(null==i||"string"==typeof i&&""===i.trim()||"number"==typeof i&&isNaN(i)||Array.isArray(i)&&0===i.length||"object"===n(i)&&!Array.isArray(i)&&0===Object.keys(g(i)).length);else if("object"!==n(i)||Array.isArray(i))e[a]=i;else{var c=g(i);Object.keys(c).length>0&&(e[a]=c)}}),e},b=function(r){try{var t=(new TextEncoder).encode(r),n="";return t.forEach(function(r){n+=String.fromCharCode(r)}),btoa(n)}catch(r){return console.error("Error encoding to base64",r),""}},w=function(r){try{for(var t=atob(r),n=new Uint8Array(t.length),e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return(new TextDecoder).decode(n)}catch(r){return void console.error("Error decoding base64",r)}},j=function(r,t){try{return r?JSON.parse(r):t}catch(r){return t}},F=function(r){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];try{if(!r)return[];var n=JSON.parse(r);return Array.isArray(n)?n:[]}catch(r){return t}},M=function(r,t){try{return r?parseInt(r):t}catch(r){return t}},S=function(r){return new Promise(function(t,n){var e=new FileReader;e.onload=function(){try{var r=e.result.split(/\r?\n/).filter(Boolean);if(r.length<1)return t([]);var n=r[0].split(",").map(function(r){return r.trim()}),o=r.slice(1).map(function(r){var t=r.split(",").map(function(r){return r.trim()}),e={};return n.forEach(function(r,n){var o;e[r]=null!==(o=t[n])&&void 0!==o?o:""}),e});t(o)}catch(r){t([])}},e.onerror=function(){n(new Error("Error reading file"))},e.readAsText(r)})},Y=function(r){return r<1024?r.toFixed(2)+" Kb":r<1048576?(r/1024).toFixed(2)+" Mb":r<1073741824?(r/1048576).toFixed(2)+" Gb":(r/1073741824).toFixed(2)+" Tb"},E=function(r){var t=null==r,n="string"==typeof r&&isNaN(Number(r));if(t||n)return"00:00:00";var e=Math.round(r),o=Math.floor(e/3600),a=Math.floor(e%3600/60),i=e%60,c=String(o).padStart(2,"0"),u=String(a).padStart(2,"0"),f=String(i).padStart(2,"0");return"".concat(c,":").concat(u,":").concat(f)},T=function(t){var n,e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"$ ",o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"";try{n=parseFloat(t),isNaN(n)&&(n=0)}catch(r){n=0}var a=n.toFixed(2).split("."),i=r(a,2),c=i[0],u=i[1],f=c.replace(/\B(?=(\d{3})+(?!\d))/g," "),s=f;return"00"!==u&&(s="".concat(f,".").concat(u)),"".concat(e).concat(s).concat(o)},x=function(r){return r.toLocaleString("en-US")},N=function(){var r=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";if(!r)return r;var t=Array.from(r),n=a(t),e=n[0],o=i(n).slice(1);return"".concat(e.toUpperCase()).concat(o.join(""))},O={style1:"DD/MM/YYYY HH:mm",style2:"MMMM D, YYYY",style3:"MM-DD-YYYY"},D=function(r){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"style1";try{var n;if(!r)throw new Error;var e=null!==(n=O[t])&&void 0!==n?n:t;return c(r).format(e)}catch(r){return"unknown"}};export{m as cleanObject,w as decodeBase64,g as deepRemoveEmptyFields,b as encodeBase64,f as fetchDelay,N as formatCapitalizeFirstText,T as formatCurrency,D as formatDatetime,O as formatDatetimeStyles,E as formatDuration,Y as formatFileSize,x as formatNumberWithCommas,s as isGuid,l as isValidEmail,d as isValidPhoneNumber,y as isValidURL,h as mergeClasses,A as mergeObjects,u as sleep,F as tryParseArray,S as tryParseCsvFileToArray,M as tryParseIntRequired,j as tryParseObject,v as windowScrollToTop};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.js","sources":["../../../src/utils/helpers.ts"],"sourcesContent":["import dayjs from 'dayjs'\r\n\r\nexport const sleep = (sec: number) => new Promise((res) => setTimeout(res, sec))\r\n\r\nexport const fetchDelay = async function <TModel>(action: () => Promise<TModel>, sec: number) {\r\n const [res] = await Promise.all([action(), sleep(sec)])\r\n return res\r\n}\r\n\r\nexport const isGuid = (value: string): boolean => {\r\n const guidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/\r\n return guidRegex.test(value)\r\n}\r\n\r\nexport const isValidEmail = (value: string) => {\r\n const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\r\n return regex.test(value)\r\n}\r\n\r\nexport const isValidPhoneNumber = (phoneNumber?: string): boolean => {\r\n const phoneRegex = /^(\\+?\\d{1,4}[\\s-]?)?((\\(\\d{1,4}\\))|\\d{1,4})[\\s-]?\\d{1,4}[\\s-]?\\d{1,9}$/\r\n return phoneRegex.test((phoneNumber ?? '').trim())\r\n}\r\n\r\nexport const isValidURL = (url: string): boolean => {\r\n const regex = /^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/i\r\n return regex.test(url)\r\n}\r\n\r\nexport const windowScrollToTop = (options?: ScrollToOptions, delay?: number) => {\r\n setTimeout(() => {\r\n window.scrollTo({ top: 0, left: 0, behavior: 'smooth', ...options })\r\n }, delay || 50)\r\n}\r\n\r\nexport const mergeClasses = (...classes: string[]) => {\r\n return classes.join(' ')\r\n}\r\n\r\n//#region Object\r\n/**\r\n * Simple object check.\r\n * @param item\r\n * @returns {boolean}\r\n */\r\nconst isObject = (obj: any) => {\r\n return obj && typeof obj === 'object' && !Array.isArray(obj)\r\n}\r\n\r\ntype DeepPartial<T> = { [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P] } | undefined\r\n\r\nexport const mergeObjects = <T>(...objects: DeepPartial<T>[]): T => {\r\n return objects.reduce((prev, obj) => {\r\n if (!obj) return prev\r\n Object.keys(obj).forEach((key) => {\r\n if (isObject((prev as any)[key]) && isObject((obj as any)[key])) {\r\n ;(prev as any)[key] = mergeObjects((prev as any)[key], (obj as any)[key])\r\n } else {\r\n ;(prev as any)[key] = (obj as any)[key]\r\n }\r\n })\r\n return prev\r\n }, {} as T) as any\r\n}\r\n\r\nexport const cleanObject = <T extends object>(obj: T): Partial<T> => {\r\n try {\r\n if (!obj) return {}\r\n return Object.entries(obj).reduce((acc, [key, value]) => {\r\n if (value !== undefined) {\r\n ;(acc as any)[key] = value\r\n }\r\n return acc\r\n }, {} as Partial<T>)\r\n } catch (error) {\r\n return {}\r\n }\r\n}\r\n\r\nexport const deepRemoveEmptyFields = <T extends object>(obj: T): T => {\r\n if (typeof obj !== 'object' || obj === null) return obj\r\n const result: any = Array.isArray(obj) ? [] : {}\r\n Object.entries(obj).forEach(([key, value]) => {\r\n if (\r\n value === undefined ||\r\n value === null ||\r\n (typeof value === 'string' && value.trim() === '') ||\r\n (typeof value === 'number' && isNaN(value)) ||\r\n (Array.isArray(value) && value.length === 0) ||\r\n (typeof value === 'object' && !Array.isArray(value) && Object.keys(deepRemoveEmptyFields(value)).length === 0)\r\n ) {\r\n // skip\r\n } else if (typeof value === 'object' && !Array.isArray(value)) {\r\n const cleaned = deepRemoveEmptyFields(value)\r\n if (Object.keys(cleaned).length > 0) result[key] = cleaned\r\n } else {\r\n result[key] = value\r\n }\r\n })\r\n return result\r\n}\r\n//#endregion\r\n\r\nexport const encodeBase64 = (input: string): string => {\r\n try {\r\n const utf8Bytes = new TextEncoder().encode(input)\r\n let binaryString = ''\r\n utf8Bytes.forEach((byte) => {\r\n binaryString += String.fromCharCode(byte)\r\n })\r\n return btoa(binaryString)\r\n } catch (error) {\r\n console.error('Error encoding to base64', error)\r\n return ''\r\n }\r\n}\r\n\r\nexport const decodeBase64 = (encoded: string): string | undefined => {\r\n try {\r\n const binaryString = atob(encoded)\r\n const utf8Bytes = new Uint8Array(binaryString.length)\r\n for (let i = 0; i < binaryString.length; i++) {\r\n utf8Bytes[i] = binaryString.charCodeAt(i)\r\n }\r\n return new TextDecoder().decode(utf8Bytes)\r\n } catch (error) {\r\n console.error('Error decoding base64', error)\r\n return\r\n }\r\n}\r\n\r\n//#region Try Parse\r\nexport const tryParseObject = function <T>(value: any, defaultValue: T): T {\r\n try {\r\n if (!value) return defaultValue\r\n return JSON.parse(value)\r\n } catch (error) {\r\n console.log('Try Parse Object error:', error)\r\n return defaultValue\r\n }\r\n}\r\n\r\nexport const tryParseArray = function <T>(value: any, defaultValue: T[] = []): T[] {\r\n try {\r\n if (!value) return []\r\n const parseValue = JSON.parse(value)\r\n return Array.isArray(parseValue) ? parseValue : []\r\n } catch {\r\n return defaultValue\r\n }\r\n}\r\n\r\nexport const tryParseIntRequired = function (value: any, defaultValue: number): number {\r\n try {\r\n if (!value) return defaultValue\r\n return parseInt(value)\r\n } catch {\r\n return defaultValue\r\n }\r\n}\r\n\r\nexport const tryParseCsvFileToArray = (file: File): Promise<Record<string, string>[]> => {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n\r\n reader.onload = () => {\r\n try {\r\n const text = reader.result as string\r\n const rows = text.split(/\\r?\\n/).filter(Boolean)\r\n\r\n if (rows.length < 1) return resolve([])\r\n\r\n const headers = rows[0].split(',').map((h) => h.trim())\r\n\r\n const data = rows.slice(1).map((row) => {\r\n const values = row.split(',').map((v) => v.trim())\r\n const item: Record<string, string> = {}\r\n\r\n headers.forEach((header, index) => {\r\n item[header] = values[index] ?? ''\r\n })\r\n\r\n return item\r\n })\r\n\r\n resolve(data)\r\n } catch (error) {\r\n resolve([])\r\n }\r\n }\r\n\r\n reader.onerror = () => {\r\n reject(new Error('Error reading file'))\r\n }\r\n\r\n reader.readAsText(file)\r\n })\r\n}\r\n//#endregion\r\n\r\n//#region Format\r\nexport const formatFileSize = (sizeInKb: number) => {\r\n if (sizeInKb < 1024) {\r\n return sizeInKb.toFixed(2) + ' Kb'\r\n } else if (sizeInKb < 1024 * 1024) {\r\n return (sizeInKb / 1024).toFixed(2) + ' Mb'\r\n } else if (sizeInKb < 1024 * 1024 * 1024) {\r\n return (sizeInKb / (1024 * 1024)).toFixed(2) + ' Gb'\r\n } else {\r\n return (sizeInKb / (1024 * 1024 * 1024)).toFixed(2) + ' Tb'\r\n }\r\n}\r\n\r\nexport const formatDuration = (duration?: number): string => {\r\n const isNotValidDuration = duration === undefined || duration === null\r\n const isNotNumber = typeof duration === 'string' && isNaN(Number(duration))\r\n if (isNotValidDuration || isNotNumber) return '00:00:00'\r\n\r\n // Round the duration to the nearest second\r\n const totalSeconds = Math.round(duration)\r\n\r\n // Calculate hours, minutes, and seconds\r\n const hours = Math.floor(totalSeconds / 3600)\r\n const minutes = Math.floor((totalSeconds % 3600) / 60)\r\n const seconds = totalSeconds % 60\r\n\r\n // Format each component to ensure it has two digits\r\n const hoursString = String(hours).padStart(2, '0')\r\n const minutesString = String(minutes).padStart(2, '0')\r\n const secondsString = String(seconds).padStart(2, '0')\r\n\r\n // Combine the components into a single string\r\n return `${hoursString}:${minutesString}:${secondsString}`\r\n}\r\n\r\nexport const formatCurrency = (value?: any, prefix = '$ ', suffix = ''): string => {\r\n let parsedValue\r\n try {\r\n parsedValue = parseFloat(value)\r\n if (isNaN(parsedValue)) parsedValue = 0\r\n } catch (e) {\r\n parsedValue = 0\r\n }\r\n const roundedValue = parsedValue.toFixed(2)\r\n const [integerPart, decimalPart] = roundedValue.split('.')\r\n const formattedIntegerPart = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ' ')\r\n\r\n let formattedValue = formattedIntegerPart\r\n if (decimalPart !== '00') {\r\n formattedValue = `${formattedIntegerPart}.${decimalPart}`\r\n }\r\n return `${prefix}${formattedValue}${suffix}`\r\n}\r\n\r\nexport const formatNumberWithCommas = (number: number): string => {\r\n return number.toLocaleString('en-US')\r\n}\r\n\r\nexport const formatCapitalizeFirstText = (value: string = '') => {\r\n if (!value) return value\r\n const [first, ...data] = Array.from(value)\r\n return `${first.toUpperCase()}${data.join('')}`\r\n}\r\n\r\nexport type FormatDatetimeStyle = 'style1' | 'style2' | 'style3'\r\n\r\nexport const formatDatetimeStyles: Record<FormatDatetimeStyle, string> = {\r\n style1: 'DD/MM/YYYY HH:mm',\r\n style2: 'MMMM D, YYYY',\r\n style3: 'MM-DD-YYYY'\r\n}\r\n\r\n/**\r\n * Formats a datetime string using one of the predefined styles or a custom format string.\r\n *\r\n * Available format styles:\r\n * - style1: DD/MM/YYYY HH:mm → e.g., '25/04/2025 14:30'\r\n * - style2: MMMM D, YYYY → e.g., 'April 25, 2025'\r\n * - style3: MM-DD-YYYY → e.g., '04-25-2025'\r\n * - Or any custom dayjs format string → e.g., 'YYYY-MM-DD', 'HH:mm:ss'\r\n *\r\n * @param value - A datetime string (ISO format or any format parsable by dayjs).\r\n * @param format - Format style key ('style1', 'style2', 'style3') or custom dayjs format string. Defaults to 'style1'.\r\n * @returns A formatted datetime string, or 'unknown' if the input is invalid or unparsable.\r\n */\r\nexport const formatDatetime = (value: string, format: FormatDatetimeStyle | (string & {}) = 'style1'): string => {\r\n try {\r\n if (!value) throw new Error()\r\n const finalFormat = formatDatetimeStyles[format as FormatDatetimeStyle] ?? format\r\n return dayjs(value).format(finalFormat)\r\n } catch (error) {\r\n return 'unknown'\r\n }\r\n}\r\n//#endregion\r\n"],"names":["sleep","sec","Promise","res","setTimeout","fetchDelay","_ref","_asyncToGenerator","_regenerator","m","_callee","action","_yield$Promise$all","_yield$Promise$all2","w","_context","n","all","v","_slicedToArray","a","_x","_x2","apply","this","arguments","isGuid","value","test","isValidEmail","isValidPhoneNumber","phoneNumber","trim","isValidURL","url","windowScrollToTop","options","delay","window","scrollTo","_objectSpread","top","left","behavior","mergeClasses","_len","length","classes","Array","_key","join","isObject","obj","_typeof","isArray","mergeObjects","_len2","objects","_key2","reduce","prev","Object","keys","forEach","key","cleanObject","entries","acc","_ref2","_ref3","undefined","error","deepRemoveEmptyFields","result","_ref4","_ref5","isNaN","cleaned","encodeBase64","input","utf8Bytes","TextEncoder","encode","binaryString","byte","String","fromCharCode","btoa","console","decodeBase64","encoded","atob","Uint8Array","i","charCodeAt","TextDecoder","decode","tryParseObject","defaultValue","JSON","parse","log","tryParseArray","parseValue","_unused","tryParseIntRequired","parseInt","_unused2","tryParseCsvFileToArray","file","resolve","reject","reader","FileReader","onload","rows","split","filter","Boolean","headers","map","h","data","slice","row","values","item","header","index","_values$index","onerror","Error","readAsText","formatFileSize","sizeInKb","toFixed","formatDuration","duration","isNotValidDuration","isNotNumber","Number","totalSeconds","Math","round","hours","floor","minutes","seconds","hoursString","padStart","minutesString","secondsString","concat","formatCurrency","parsedValue","prefix","suffix","parseFloat","e","_roundedValue$split","_roundedValue$split2","integerPart","decimalPart","formattedIntegerPart","replace","formattedValue","formatNumberWithCommas","number","toLocaleString","formatCapitalizeFirstText","_Array$from","from","_Array$from2","_toArray","first","_arrayLikeToArray","toUpperCase","formatDatetimeStyles","style1","style2","style3","formatDatetime","format","_formatDatetimeStyles","finalFormat","dayjs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"helpers.js","sources":["../../../src/utils/helpers.ts"],"sourcesContent":["import dayjs from 'dayjs'\r\n\r\nexport const sleep = (sec: number) => new Promise((res) => setTimeout(res, sec))\r\n\r\nexport const fetchDelay = async function <TModel>(action: () => Promise<TModel>, sec: number) {\r\n const [res] = await Promise.all([action(), sleep(sec)])\r\n return res\r\n}\r\n\r\nexport const isGuid = (value: string): boolean => {\r\n const guidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/\r\n return guidRegex.test(value)\r\n}\r\n\r\nexport const isValidEmail = (value: string) => {\r\n const regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/\r\n return regex.test(value)\r\n}\r\n\r\nexport const isValidPhoneNumber = (phoneNumber?: string): boolean => {\r\n const phoneRegex = /^(\\+?\\d{1,4}[\\s-]?)?((\\(\\d{1,4}\\))|\\d{1,4})[\\s-]?\\d{1,4}[\\s-]?\\d{1,9}$/\r\n return phoneRegex.test((phoneNumber ?? '').trim())\r\n}\r\n\r\nexport const isValidURL = (url: string): boolean => {\r\n const regex = /^(https?|ftp):\\/\\/[^\\s/$.?#].[^\\s]*$/i\r\n return regex.test(url)\r\n}\r\n\r\nexport const windowScrollToTop = (options?: ScrollToOptions, delay?: number) => {\r\n setTimeout(() => {\r\n window.scrollTo({ top: 0, left: 0, behavior: 'smooth', ...options })\r\n }, delay || 50)\r\n}\r\n\r\nexport const mergeClasses = (...classes: string[]) => {\r\n return classes.join(' ')\r\n}\r\n\r\n//#region Object\r\n/**\r\n * Simple object check.\r\n * @param item\r\n * @returns {boolean}\r\n */\r\nconst isObject = (obj: any) => {\r\n return obj && typeof obj === 'object' && !Array.isArray(obj)\r\n}\r\n\r\ntype DeepPartial<T> = { [P in keyof T]?: T[P] extends object ? DeepPartial<T[P]> : T[P] } | undefined\r\n\r\nexport const mergeObjects = <T>(...objects: DeepPartial<T>[]): T => {\r\n return objects.reduce((prev, obj) => {\r\n if (!obj) return prev\r\n Object.keys(obj).forEach((key) => {\r\n if (isObject((prev as any)[key]) && isObject((obj as any)[key])) {\r\n ;(prev as any)[key] = mergeObjects((prev as any)[key], (obj as any)[key])\r\n } else {\r\n ;(prev as any)[key] = (obj as any)[key]\r\n }\r\n })\r\n return prev\r\n }, {} as T) as any\r\n}\r\n\r\nexport const cleanObject = <T extends object>(obj: T): Partial<T> => {\r\n try {\r\n if (!obj) return {}\r\n return Object.entries(obj).reduce((acc, [key, value]) => {\r\n if (value !== undefined) {\r\n ;(acc as any)[key] = value\r\n }\r\n return acc\r\n }, {} as Partial<T>)\r\n } catch (error) {\r\n return {}\r\n }\r\n}\r\n\r\nexport const deepRemoveEmptyFields = <T extends object>(obj: T): T => {\r\n if (typeof obj !== 'object' || obj === null) return obj\r\n const result: any = Array.isArray(obj) ? [] : {}\r\n Object.entries(obj).forEach(([key, value]) => {\r\n if (\r\n value === undefined ||\r\n value === null ||\r\n (typeof value === 'string' && value.trim() === '') ||\r\n (typeof value === 'number' && isNaN(value)) ||\r\n (Array.isArray(value) && value.length === 0) ||\r\n (typeof value === 'object' && !Array.isArray(value) && Object.keys(deepRemoveEmptyFields(value)).length === 0)\r\n ) {\r\n // skip\r\n } else if (typeof value === 'object' && !Array.isArray(value)) {\r\n const cleaned = deepRemoveEmptyFields(value)\r\n if (Object.keys(cleaned).length > 0) result[key] = cleaned\r\n } else {\r\n result[key] = value\r\n }\r\n })\r\n return result\r\n}\r\n//#endregion\r\n\r\nexport const encodeBase64 = (input: string): string => {\r\n try {\r\n const utf8Bytes = new TextEncoder().encode(input)\r\n let binaryString = ''\r\n utf8Bytes.forEach((byte) => {\r\n binaryString += String.fromCharCode(byte)\r\n })\r\n return btoa(binaryString)\r\n } catch (error) {\r\n console.error('Error encoding to base64', error)\r\n return ''\r\n }\r\n}\r\n\r\nexport const decodeBase64 = (encoded: string): string | undefined => {\r\n try {\r\n const binaryString = atob(encoded)\r\n const utf8Bytes = new Uint8Array(binaryString.length)\r\n for (let i = 0; i < binaryString.length; i++) {\r\n utf8Bytes[i] = binaryString.charCodeAt(i)\r\n }\r\n return new TextDecoder().decode(utf8Bytes)\r\n } catch (error) {\r\n console.error('Error decoding base64', error)\r\n return\r\n }\r\n}\r\n\r\n//#region Try Parse\r\nexport const tryParseObject = function <T>(value: any, defaultValue: T): T {\r\n try {\r\n if (!value) return defaultValue\r\n return JSON.parse(value)\r\n } catch {\r\n return defaultValue\r\n }\r\n}\r\n\r\nexport const tryParseArray = function <T>(value: any, defaultValue: T[] = []): T[] {\r\n try {\r\n if (!value) return []\r\n const parseValue = JSON.parse(value)\r\n return Array.isArray(parseValue) ? parseValue : []\r\n } catch {\r\n return defaultValue\r\n }\r\n}\r\n\r\nexport const tryParseIntRequired = function (value: any, defaultValue: number): number {\r\n try {\r\n if (!value) return defaultValue\r\n return parseInt(value)\r\n } catch {\r\n return defaultValue\r\n }\r\n}\r\n\r\nexport const tryParseCsvFileToArray = (file: File): Promise<Record<string, string>[]> => {\r\n return new Promise((resolve, reject) => {\r\n const reader = new FileReader()\r\n\r\n reader.onload = () => {\r\n try {\r\n const text = reader.result as string\r\n const rows = text.split(/\\r?\\n/).filter(Boolean)\r\n\r\n if (rows.length < 1) return resolve([])\r\n\r\n const headers = rows[0].split(',').map((h) => h.trim())\r\n\r\n const data = rows.slice(1).map((row) => {\r\n const values = row.split(',').map((v) => v.trim())\r\n const item: Record<string, string> = {}\r\n\r\n headers.forEach((header, index) => {\r\n item[header] = values[index] ?? ''\r\n })\r\n\r\n return item\r\n })\r\n\r\n resolve(data)\r\n } catch (error) {\r\n resolve([])\r\n }\r\n }\r\n\r\n reader.onerror = () => {\r\n reject(new Error('Error reading file'))\r\n }\r\n\r\n reader.readAsText(file)\r\n })\r\n}\r\n//#endregion\r\n\r\n//#region Format\r\nexport const formatFileSize = (sizeInKb: number) => {\r\n if (sizeInKb < 1024) {\r\n return sizeInKb.toFixed(2) + ' Kb'\r\n } else if (sizeInKb < 1024 * 1024) {\r\n return (sizeInKb / 1024).toFixed(2) + ' Mb'\r\n } else if (sizeInKb < 1024 * 1024 * 1024) {\r\n return (sizeInKb / (1024 * 1024)).toFixed(2) + ' Gb'\r\n } else {\r\n return (sizeInKb / (1024 * 1024 * 1024)).toFixed(2) + ' Tb'\r\n }\r\n}\r\n\r\nexport const formatDuration = (duration?: number): string => {\r\n const isNotValidDuration = duration === undefined || duration === null\r\n const isNotNumber = typeof duration === 'string' && isNaN(Number(duration))\r\n if (isNotValidDuration || isNotNumber) return '00:00:00'\r\n\r\n // Round the duration to the nearest second\r\n const totalSeconds = Math.round(duration)\r\n\r\n // Calculate hours, minutes, and seconds\r\n const hours = Math.floor(totalSeconds / 3600)\r\n const minutes = Math.floor((totalSeconds % 3600) / 60)\r\n const seconds = totalSeconds % 60\r\n\r\n // Format each component to ensure it has two digits\r\n const hoursString = String(hours).padStart(2, '0')\r\n const minutesString = String(minutes).padStart(2, '0')\r\n const secondsString = String(seconds).padStart(2, '0')\r\n\r\n // Combine the components into a single string\r\n return `${hoursString}:${minutesString}:${secondsString}`\r\n}\r\n\r\nexport const formatCurrency = (value?: any, prefix = '$ ', suffix = ''): string => {\r\n let parsedValue\r\n try {\r\n parsedValue = parseFloat(value)\r\n if (isNaN(parsedValue)) parsedValue = 0\r\n } catch (e) {\r\n parsedValue = 0\r\n }\r\n const roundedValue = parsedValue.toFixed(2)\r\n const [integerPart, decimalPart] = roundedValue.split('.')\r\n const formattedIntegerPart = integerPart.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ' ')\r\n\r\n let formattedValue = formattedIntegerPart\r\n if (decimalPart !== '00') {\r\n formattedValue = `${formattedIntegerPart}.${decimalPart}`\r\n }\r\n return `${prefix}${formattedValue}${suffix}`\r\n}\r\n\r\nexport const formatNumberWithCommas = (number: number): string => {\r\n return number.toLocaleString('en-US')\r\n}\r\n\r\nexport const formatCapitalizeFirstText = (value: string = '') => {\r\n if (!value) return value\r\n const [first, ...data] = Array.from(value)\r\n return `${first.toUpperCase()}${data.join('')}`\r\n}\r\n\r\nexport type FormatDatetimeStyle = 'style1' | 'style2' | 'style3'\r\n\r\nexport const formatDatetimeStyles: Record<FormatDatetimeStyle, string> = {\r\n style1: 'DD/MM/YYYY HH:mm',\r\n style2: 'MMMM D, YYYY',\r\n style3: 'MM-DD-YYYY'\r\n}\r\n\r\n/**\r\n * Formats a datetime string using one of the predefined styles or a custom format string.\r\n *\r\n * Available format styles:\r\n * - style1: DD/MM/YYYY HH:mm → e.g., '25/04/2025 14:30'\r\n * - style2: MMMM D, YYYY → e.g., 'April 25, 2025'\r\n * - style3: MM-DD-YYYY → e.g., '04-25-2025'\r\n * - Or any custom dayjs format string → e.g., 'YYYY-MM-DD', 'HH:mm:ss'\r\n *\r\n * @param value - A datetime string (ISO format or any format parsable by dayjs).\r\n * @param format - Format style key ('style1', 'style2', 'style3') or custom dayjs format string. Defaults to 'style1'.\r\n * @returns A formatted datetime string, or 'unknown' if the input is invalid or unparsable.\r\n */\r\nexport const formatDatetime = (value: string, format: FormatDatetimeStyle | (string & {}) = 'style1'): string => {\r\n try {\r\n if (!value) throw new Error()\r\n const finalFormat = formatDatetimeStyles[format as FormatDatetimeStyle] ?? format\r\n return dayjs(value).format(finalFormat)\r\n } catch (error) {\r\n return 'unknown'\r\n }\r\n}\r\n//#endregion\r\n"],"names":["sleep","sec","Promise","res","setTimeout","fetchDelay","_ref","_asyncToGenerator","_regenerator","m","_callee","action","_yield$Promise$all","_yield$Promise$all2","w","_context","n","all","v","_slicedToArray","a","_x","_x2","apply","this","arguments","isGuid","value","test","isValidEmail","isValidPhoneNumber","phoneNumber","trim","isValidURL","url","windowScrollToTop","options","delay","window","scrollTo","_objectSpread","top","left","behavior","mergeClasses","_len","length","classes","Array","_key","join","isObject","obj","_typeof","isArray","mergeObjects","_len2","objects","_key2","reduce","prev","Object","keys","forEach","key","cleanObject","entries","acc","_ref2","_ref3","undefined","error","deepRemoveEmptyFields","result","_ref4","_ref5","isNaN","cleaned","encodeBase64","input","utf8Bytes","TextEncoder","encode","binaryString","byte","String","fromCharCode","btoa","console","decodeBase64","encoded","atob","Uint8Array","i","charCodeAt","TextDecoder","decode","tryParseObject","defaultValue","JSON","parse","_unused","tryParseArray","parseValue","_unused2","tryParseIntRequired","parseInt","_unused3","tryParseCsvFileToArray","file","resolve","reject","reader","FileReader","onload","rows","split","filter","Boolean","headers","map","h","data","slice","row","values","item","header","index","_values$index","onerror","Error","readAsText","formatFileSize","sizeInKb","toFixed","formatDuration","duration","isNotValidDuration","isNotNumber","Number","totalSeconds","Math","round","hours","floor","minutes","seconds","hoursString","padStart","minutesString","secondsString","concat","formatCurrency","parsedValue","prefix","suffix","parseFloat","e","_roundedValue$split","_roundedValue$split2","integerPart","decimalPart","formattedIntegerPart","replace","formattedValue","formatNumberWithCommas","number","toLocaleString","formatCapitalizeFirstText","_Array$from","from","_Array$from2","_toArray","first","_arrayLikeToArray","toUpperCase","formatDatetimeStyles","style1","style2","style3","formatDatetime","format","_formatDatetimeStyles","finalFormat","dayjs"],"mappings":"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"}
|
package/dist/table/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{ELogic,EOperator,EOrder}from"../src/table/model-filter.js";import"react/jsx-runtime";import"react";import"@mui/material";import"@mui/icons-material/Edit";import"@mui/icons-material/Delete";import"dayjs";import"../src/utils/dayjs-config.js";import"../src/utils/query-param.js";export{CreateTable}from"../src/table/create.table.js";export{default as DinoTable}from"../src/table/dino.js";export{dinoTableClasses}from"../src/table/
|
|
1
|
+
export{ELogic,EOperator,EOrder}from"../src/table/model-filter.js";import"react/jsx-runtime";import"react";import"@mui/material";import"@mui/icons-material/Edit";import"@mui/icons-material/Delete";import"dayjs";import"../src/utils/dayjs-config.js";import"../src/utils/query-param.js";export{CreateTable}from"../src/table/create.table.js";export{default as DinoTable}from"../src/table/dino.js";export{dinoTableClasses}from"../src/table/styled.js";
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import type { FC, ImgHTMLAttributes, ReactNode } from 'react';
|
|
2
2
|
export interface IImageWithFallbackPropsOwner {
|
|
3
|
+
/** The source URL of the image */
|
|
3
4
|
src?: string;
|
|
5
|
+
/** The alt text for the image */
|
|
4
6
|
alt?: string;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
+
/** The fallback source(s) to use if the main image fails to load */
|
|
8
|
+
fallbackSrc?: string | string[];
|
|
9
|
+
/** The loading indicator to display while the image is loading */
|
|
10
|
+
loading?: ReactNode | ((isLoading: boolean) => ReactNode);
|
|
11
|
+
/** The debounce delay in milliseconds */
|
|
7
12
|
debounceDelay?: number;
|
|
8
13
|
}
|
|
9
14
|
export type IImageProps = Omit<ImgHTMLAttributes<HTMLImageElement>, keyof IImageWithFallbackPropsOwner>;
|
|
@@ -9,11 +9,13 @@ export interface IPaginationQueryParams {
|
|
|
9
9
|
pageSize?: string;
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
* @en Synchronize pagination to URL query parameters.
|
|
13
|
-
*
|
|
12
|
+
* @en Synchronize pagination to URL query parameters. Each field is handled independently:
|
|
13
|
+
* if it differs from default → add to URL; if same or undefined → remove from URL.
|
|
14
|
+
* @vi Dong bo pagination vao URL query parameters. Tung field duoc xu ly doc lap:
|
|
15
|
+
* neu khac default → them vao URL; neu bang hoac undefined → xoa khoi URL.
|
|
14
16
|
*
|
|
15
17
|
* @param pagination - Current pagination to sync
|
|
16
|
-
* @param defaultPagination - Default pagination
|
|
18
|
+
* @param defaultPagination - Default pagination values used as baseline
|
|
17
19
|
*/
|
|
18
20
|
export declare function setPaginationToURL(pagination?: TPagination, defaultPagination?: TPagination): void;
|
|
19
21
|
/**
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { FC } from 'react';
|
|
2
2
|
import type { BoxProps } from '@mui/material';
|
|
3
|
-
import { TRenderableNode } from './types';
|
|
4
|
-
export declare const PanelLoading: FC<BoxProps
|
|
3
|
+
import { DataSurfaceViewMode, TRenderableNode } from './types';
|
|
4
|
+
export declare const PanelLoading: FC<BoxProps & {
|
|
5
|
+
viewMode: DataSurfaceViewMode;
|
|
6
|
+
}>;
|
|
5
7
|
export declare const PanelError: FC<{
|
|
6
8
|
error: string;
|
|
7
9
|
}>;
|
|
@@ -22,7 +22,7 @@ declare class DinoDataViewBase {
|
|
|
22
22
|
seedKey: string;
|
|
23
23
|
} | null;
|
|
24
24
|
getSeedKeyFromURL: <T>(params: import("./query-param-url").IViewDataHandlerParams<T, "defaultSeedKey">) => string;
|
|
25
|
-
syncViewModeToURL: <T>(params: import("./query-param-url").IViewDataHandlerParams<T, "
|
|
25
|
+
syncViewModeToURL: <T>(params: import("./query-param-url").IViewDataHandlerParams<T, "viewMode" | "defaultViewMode">) => void;
|
|
26
26
|
getViewModeFromURL: <T>(params: import("./query-param-url").IViewDataHandlerParams<T, "defaultViewMode">) => import("./view-mode.types").EViewMode | undefined;
|
|
27
27
|
convertFilterToQueryParam: <T>(filterState?: import("./types").IFilterState<T> | undefined) => string;
|
|
28
28
|
formatterDate: (value: any, options?: IFormatterDateOptions) => string;
|
|
@@ -21,6 +21,6 @@ export declare const getQueryFromURL: <T>(params: IViewDataHandlerParams<T, "def
|
|
|
21
21
|
seedKey: string;
|
|
22
22
|
} | null;
|
|
23
23
|
export declare const getSeedKeyFromURL: <T>(params: IViewDataHandlerParams<T, "defaultSeedKey">) => string;
|
|
24
|
-
export declare const syncViewModeToURL: <T>(params: IViewDataHandlerParams<T, "
|
|
24
|
+
export declare const syncViewModeToURL: <T>(params: IViewDataHandlerParams<T, "viewMode" | "defaultViewMode">) => void;
|
|
25
25
|
export declare const getViewModeFromURL: <T>(params: IViewDataHandlerParams<T, "defaultViewMode">) => EViewMode | undefined;
|
|
26
26
|
export declare const convertFilterToQueryParam: <T>(filterState?: IFilterState<T> | undefined) => string;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { BoxProps } from '@mui/material';
|
|
2
|
-
import type { TFieldType } from '../types';
|
|
2
|
+
import type { TFieldType, TFieldValid } from '../types';
|
|
3
3
|
export interface IFieldSummaryConfig<T> {
|
|
4
4
|
field: TFieldType<T>;
|
|
5
5
|
label?: string;
|
|
6
|
+
labelFormatter?: (value: TFieldValid) => string | undefined;
|
|
6
7
|
}
|
|
7
8
|
export type TFieldSummaryConfigs<T> = Partial<Record<TFieldType<T>, Omit<IFieldSummaryConfig<T>, 'field'>>>;
|
|
8
9
|
export interface IFilterSummaryConfig<T> {
|
|
@@ -16,6 +16,7 @@ export interface PopperContentProps extends BoxProps {
|
|
|
16
16
|
onClose?: ButtonProps['onClick'];
|
|
17
17
|
disableGutter?: boolean;
|
|
18
18
|
disableMinMaxWidth?: boolean;
|
|
19
|
+
anchorEl?: HTMLElement | null;
|
|
19
20
|
slots?: {
|
|
20
21
|
afterTitle?: React.ReactNode;
|
|
21
22
|
beforeTitle?: React.ReactNode;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { FC } from 'react';
|
|
2
2
|
import type { ToggleButtonGroupProps } from '@mui/material';
|
|
3
|
-
import type { TLogic } from '../types';
|
|
3
|
+
import type { TDateLogic, TLogic } from '../types';
|
|
4
4
|
interface IFilterMenuNoFieldProps {
|
|
5
5
|
onClose: () => void;
|
|
6
6
|
}
|
|
@@ -19,4 +19,11 @@ export interface FilterLogicToggleProps {
|
|
|
19
19
|
sx?: ToggleButtonGroupProps['sx'];
|
|
20
20
|
}
|
|
21
21
|
export declare const FilterLogicToggle: FC<FilterLogicToggleProps>;
|
|
22
|
+
type TDateSingleLogic = Exclude<TDateLogic, 'range'>;
|
|
23
|
+
export interface DateLogicToggleProps {
|
|
24
|
+
value?: TDateSingleLogic;
|
|
25
|
+
onChange?: (event: React.MouseEvent<HTMLElement>, value: TDateSingleLogic) => void;
|
|
26
|
+
sx?: ToggleButtonGroupProps['sx'];
|
|
27
|
+
}
|
|
28
|
+
export declare const DateLogicToggle: FC<DateLogicToggleProps>;
|
|
22
29
|
export {};
|
|
@@ -4,3 +4,5 @@ export * from './components/hint-icon';
|
|
|
4
4
|
export * from './convert-to-graphql';
|
|
5
5
|
export * from './local-filter-builder';
|
|
6
6
|
export * from './index.dino';
|
|
7
|
+
export type { IFieldSelectOption } from './menu/create-form-field-select';
|
|
8
|
+
export type { IFormFieldDateTimeParam, TDateTimePickerType, TDateTimeMode } from './menu/create-form-field-datetime';
|
|
@@ -3,6 +3,7 @@ import { getFilterFromURL, isEmptyFilterState, isFilterStateEqual, removeNullVal
|
|
|
3
3
|
import createFormFieldString from './menu/create-form-field-string';
|
|
4
4
|
import createFormFieldSelect from './menu/create-form-field-select';
|
|
5
5
|
import createFormFieldSelectMultiple from './menu/create-form-field-select-multiple';
|
|
6
|
+
import createFormFieldDateTime from './menu/create-form-field-datetime';
|
|
6
7
|
export declare class DinoFilterBar {
|
|
7
8
|
createFilterBar: typeof createFilterBar;
|
|
8
9
|
createConvertToGraphQL: <TSource extends Record<string, any>, TTarget extends object>(state: import("./types").TFilterState<TSource>) => import("./convert-to-graphql").TableFileterConverter<TSource, TTarget>;
|
|
@@ -10,6 +11,7 @@ export declare class DinoFilterBar {
|
|
|
10
11
|
createFormFieldString: typeof createFormFieldString;
|
|
11
12
|
createFormFieldSelect: typeof createFormFieldSelect;
|
|
12
13
|
createFormFieldSelectMultiple: typeof createFormFieldSelectMultiple;
|
|
14
|
+
createFormFieldDateTime: typeof createFormFieldDateTime;
|
|
13
15
|
mapLogic: (logic?: import("./types").TLogic | undefined) => "Or" | "And";
|
|
14
16
|
mapDirection: (direction?: import("./types").TDirection | undefined) => "ASC" | "DESC";
|
|
15
17
|
isEmptyFilterState: typeof isEmptyFilterState;
|