dinocollab-core 2.1.52 → 2.1.53
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as e,inherits as t,createClass as i,classCallCheck as a,callSuper as r}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as n,Fragment as l,jsxs as o}from"react/jsx-runtime";import{Component as c,Fragment as s}from"react";import{styled as d,Box as u,Collapse as
|
|
1
|
+
import{defineProperty as e,inherits as t,createClass as i,classCallCheck as a,callSuper as r}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as n,Fragment as l,jsxs as o}from"react/jsx-runtime";import{Component as c,Fragment as s}from"react";import{styled as d,Box as u,Collapse as m,Typography as p,Chip as v}from"@mui/material";import{formatDatetime as f}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";import{mapDateLogicText as h}from"./helpers.js";import{createFilterStore as g}from"./filter-store.js";import{ClearAllButton as C,mapSortConfigs as S}from"./ui.units.js";import{mapDataViewContext as x}from"./context.js";var b={root:"ActiveFiltersPanel-root",content:"ActiveFiltersPanel-content",item:"ActiveFiltersPanel-item",itemContent:"ActiveFiltersPanel-itemContent",itemChip:"ActiveFiltersPanel-itemChip",removeButton:"ActiveFiltersPanel-removeButton",overlay:"ActiveFiltersPanel-overlay"};function w(){return function(){function d(t){var i;return a(this,d),i=r(this,d,[t]),e(i,"handleAnimationExited",function(){i.setState({isClosing:!0})}),e(i,"renderItems",function(e){var t;return o(u,{className:b.item,children:[o(p,{variant:"caption",sx:{fontWeight:700},children:[e.label||(null===(t=e.field)||void 0===t?void 0:t.toString()),":"]}),n(u,{className:b.itemContent,children:e.items.map(function(t){return n(v,{clickable:!0,size:"small",label:t.label||t.value,className:b.itemChip,onDelete:function(){e.isQuickSearch?i.removeQuickSearch(t):e.field&&i.removeFilter(e.field,t)}},t.value)})})]})}),e(i,"renderFilters",function(){var e,t=(null===(e=i.dataViewContext.filterState)||void 0===e?void 0:e.filter)||{},a=Object.keys(t);return 0===a.length?n(l,{}):a.map(function(e){var a,r=(null!==(a=t[e])&&void 0!==a?a:[]).reduce(function(e,t){var i,a,r,n,l=t.label||(null===(i=t.value)||void 0===i?void 0:i.toString());"date"===t.type&&t.dateLogic&&(l="".concat(h[t.dateLogic]," ").concat(f(null!==(r=null===(n=t.value)||void 0===n?void 0:n.toString())&&void 0!==r?r:"","style2")));return t.value&&e.push({value:null===(a=t.value)||void 0===a?void 0:a.toString(),label:l}),e},[]);return n(s,{children:i.renderItems({field:e,label:e.toString(),items:r})},e.toString())})}),e(i,"renderPagination",function(){var e,t,a,r=null===(e=i.dataViewContext.filterState)||void 0===e?void 0:e.pagination,c=null===(t=i.dataViewContext.filterBarConfigs.defaultValue)||void 0===t?void 0:t.pagination;if(!r||!r.page&&!r.pageSize)return n(l,{});if(c&&(r.page===c.page&&r.pageSize===c.pageSize))return n(l,{});var s=null!==(a=r.page)&&void 0!==a?a:0,d=r.pageSize;return 0===s&&!d?null:n("div",{className:b.item,children:o("div",{className:b.itemContent,children:[s>0&&n(v,{size:"small",label:"page ".concat(s),className:b.itemChip}),d&&n(v,{size:"small",label:"".concat(d," per page"),className:b.itemChip})]})})}),e(i,"renderSort",function(){var e,t,a=null===(e=i.dataViewContext.filterState)||void 0===e?void 0:e.sort;if(!a)return n(l,{});var r=null===(t=i.dataViewContext.filterBarConfigs.fields)||void 0===t?void 0:t[a.field],c=(null==r?void 0:r.label)||a.field.toString(),s=S[a.direction];return o(u,{className:b.item,children:[n(p,{variant:"caption",sx:{fontWeight:700},children:"Sort:"}),n(v,{clickable:!0,size:"small",label:o(u,{sx:{display:"flex",alignItems:"center",gap:.5},children:[n("span",{children:c}),s.icon]}),className:b.itemChip,onClick:i.toggleSortDirection,onDelete:function(){return i.removeSort()},title:"".concat(c," - ").concat(s.title)})]})}),e(i,"removeFilter",function(e,t){var a=g(i.dataViewContext.filterState).removeFilterItem(e,t.value,{reason:"filter"});i.dataViewContext.onFilterStateChange(a.build())}),e(i,"removeQuickSearch",function(e){var t=g(i.dataViewContext.filterState).removeQuickSearchItem(e.value,{reason:"quickSearch"});i.dataViewContext.onFilterStateChange(t.build())}),e(i,"removeSort",function(){var e=g(i.dataViewContext.filterState).removeSort({reason:"sort"});i.dataViewContext.onFilterStateChange(e.build())}),e(i,"toggleSortDirection",function(){var e=g(i.dataViewContext.filterState).toggleSortDirection({reason:"sort"});i.dataViewContext.onFilterStateChange(e.build())}),e(i,"handleClearAll",function(){var e=i.dataViewContext.filterBarConfigs.defaultValue||{},t=g(i.dataViewContext.filterState,e).reset();i.dataViewContext.onFilterStateChange(t.build())}),i.state={data:null,isClosing:!1},i}return t(d,c),i(d,[{key:"render",value:function(){var e=this;return x(function(t){if(e.dataViewContext=t,!e.dataViewContext)return n(l,{});var i=e.dataViewContext.filterBarConfigs.defaultValue,a=g(e.dataViewContext.filterState,i).isEmpty();return n(m,{in:!a,timeout:300,unmountOnExit:!0,orientation:"vertical",onExited:e.handleAnimationExited,children:o(V,{className:b.root,children:[o(u,{className:b.content,children:[!1!==e.props.enableSort&&e.renderSort(),!1!==e.props.enableQuickSearch&&e.renderQuickSearch(),!1!==e.props.enableFilter&&e.renderFilters(),!1!==e.props.enablePagination&&e.renderPagination(),!a&&n(C,{className:b.removeButton,onClick:e.handleClearAll})]}),e.props.loading&&n(u,{className:b.overlay})]})})})}},{key:"renderQuickSearch",value:function(){var e,t=(null===(e=this.dataViewContext.filterState)||void 0===e?void 0:e.quickSearch)||[],i=(Array.isArray(t)?t:[t]).map(function(e){return{value:e}});return i&&0!==i.length?this.renderItems({label:"Quick search",items:i,isQuickSearch:!0}):n(l,{})}}])}()}var V=d(u)(e(e(e(e(e({position:"relative"},".".concat(b.content),{display:"flex",alignItems:"center",flexWrap:"wrap",gap:"8px"}),".".concat(b.item),{display:"flex",flexWrap:"wrap",border:"dashed 1px var(--color-divider, rgba(145 160 170 / 20%))",borderRadius:"4px",alignItems:"center",padding:"6px 8px",gap:"8px"}),".".concat(b.itemContent),{display:"flex",flexWrap:"wrap",gap:"4px"}),".".concat(b.itemChip),{borderRadius:"4px",height:"100%","& .MuiChip-label":{overflowWrap:"break-word",wordBreak:"break-word",whiteSpace:"normal",textOverflow:"clip"}}),".".concat(b.overlay),{position:"absolute",top:0,left:0,width:"100%",height:"100%",backdropFilter:"blur(1px)"}));export{b as activeFiltersPanelClasses,w as default};
|
|
2
2
|
//# sourceMappingURL=create.active-filters-panel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.active-filters-panel.js","sources":["../../../src/data-view/create.active-filters-panel.tsx"],"sourcesContent":["import React, { Component, ComponentType, Fragment } from 'react'\r\nimport { Box, Chip, Collapse, styled, Typography } from '@mui/material'\r\nimport { createFilterStore } from './filter-store'\r\nimport { ClearAllButton, mapSortConfigs } from './ui.units'\r\nimport { IDataViewContext, mapDataViewContext } from './context'\r\nimport { IFilterItem, IFilterMap, IFilterState, IItemBase } from './types'\r\nimport { formatDatetime } from '../utils'\r\nimport { mapDateLogicText } from './helpers'\r\n\r\nexport const activeFiltersPanelClasses = {\r\n root: 'ActiveFiltersPanel-root',\r\n content: 'ActiveFiltersPanel-content',\r\n item: 'ActiveFiltersPanel-item',\r\n itemContent: 'ActiveFiltersPanel-itemContent',\r\n itemChip: 'ActiveFiltersPanel-itemChip',\r\n removeButton: 'ActiveFiltersPanel-removeButton',\r\n overlay: 'ActiveFiltersPanel-overlay'\r\n}\r\n\r\ninterface IRenderItemsParams<T> {\r\n field?: keyof T\r\n label?: string\r\n items: IItemBase[]\r\n isQuickSearch?: boolean\r\n}\r\n\r\nexport interface IActiveFiltersPanelProps {\r\n loading?: boolean\r\n /** @default true */\r\n enableSort?: boolean\r\n /** @default true */\r\n enableFilter?: boolean\r\n /** @default true */\r\n enableQuickSearch?: boolean\r\n /** @default true */\r\n enablePagination?: boolean\r\n}\r\n\r\nexport interface IActiveFiltersPanelState<T> {\r\n data: IFilterState<T> | null\r\n isClosing: boolean\r\n}\r\n\r\nfunction createActiveFiltersPanel<T>(): ComponentType<IActiveFiltersPanelProps> {\r\n class ActiveFiltersPanel extends Component<IActiveFiltersPanelProps, IActiveFiltersPanelState<T>> {\r\n declare dataViewContext: IDataViewContext<T>\r\n\r\n constructor(props: IActiveFiltersPanelProps) {\r\n super(props)\r\n this.state = { data: null, isClosing: false }\r\n }\r\n\r\n // Handle animation completion\r\n private handleAnimationExited = () => {\r\n this.setState({ isClosing: true })\r\n }\r\n\r\n render() {\r\n return mapDataViewContext((context) => {\r\n this.dataViewContext = context\r\n if (!this.dataViewContext) return <></>\r\n const { defaultValue } = this.dataViewContext.filterBarConfigs\r\n const isEmpty = createFilterStore(this.dataViewContext.filterState, defaultValue).isEmpty()\r\n return (\r\n <Collapse in={!isEmpty} timeout={300} unmountOnExit orientation='vertical' onExited={this.handleAnimationExited}>\r\n <Wrap className={activeFiltersPanelClasses.root}>\r\n <Box className={activeFiltersPanelClasses.content}>\r\n {this.props.enableSort !== false && this.renderSort()}\r\n {this.props.enableQuickSearch !== false && this.renderQuickSearch()}\r\n {this.props.enableFilter !== false && this.renderFilters()}\r\n {this.props.enablePagination !== false && this.renderPagination()}\r\n {!isEmpty && <ClearAllButton className={activeFiltersPanelClasses.removeButton} onClick={this.handleClearAll} />}\r\n </Box>\r\n {this.props.loading && <Box className={activeFiltersPanelClasses.overlay} />}\r\n </Wrap>\r\n </Collapse>\r\n )\r\n })\r\n }\r\n\r\n renderItems = (p: IRenderItemsParams<T>) => (\r\n <Box className={activeFiltersPanelClasses.item}>\r\n <Typography variant='caption' sx={{ fontWeight: 700 }}>\r\n {p.label || p.field?.toString()}:\r\n </Typography>\r\n <Box className={activeFiltersPanelClasses.itemContent}>\r\n {p.items.map((item) => (\r\n <Chip\r\n key={item.value}\r\n clickable\r\n size='small'\r\n label={item.label || item.value}\r\n className={activeFiltersPanelClasses.itemChip}\r\n onDelete={() => {\r\n if (p.isQuickSearch) {\r\n this.removeQuickSearch(item)\r\n return\r\n }\r\n if (!p.field) return\r\n this.removeFilter(p.field, item)\r\n }}\r\n />\r\n ))}\r\n </Box>\r\n </Box>\r\n )\r\n\r\n renderQuickSearch() {\r\n const val = this.dataViewContext.filterState?.quickSearch || []\r\n const list = (Array.isArray(val) ? val : [val]).map((value) => ({ value }))\r\n if (!list || list.length === 0) return <></>\r\n return this.renderItems({ label: 'Quick search', items: list, isQuickSearch: true })\r\n }\r\n\r\n renderFilters = () => {\r\n const filter: IFilterMap<T> = this.dataViewContext.filterState?.filter || {}\r\n const keys = Object.keys(filter) as Array<keyof T>\r\n if (keys.length === 0) return <></>\r\n return keys.map((key) => {\r\n const filterItems = (filter[key] ?? []) as IFilterItem[]\r\n const items = filterItems.reduce<IItemBase[]>((acc, item) => {\r\n let label = item.label || item.value?.toString()\r\n if (item.type === 'date' && item.dateLogic) {\r\n label = `${mapDateLogicText[item.dateLogic]} ${formatDatetime(item.value?.toString() ?? '', 'style2')}`\r\n }\r\n if (!!item.value) acc.push({ value: item.value?.toString(), label })\r\n return acc\r\n }, [])\r\n return <Fragment key={key.toString()}>{this.renderItems({ field: key, label: key.toString(), items })}</Fragment>\r\n })\r\n }\r\n\r\n renderPagination = () => {\r\n const pagination = this.dataViewContext.filterState?.pagination\r\n const defaultPagination = this.dataViewContext.filterBarConfigs.defaultValue?.pagination\r\n\r\n if (!pagination || (!pagination.page && !pagination.pageSize)) return <></>\r\n\r\n // Check if current pagination equals default pagination\r\n if (defaultPagination) {\r\n const isSame = pagination.page === defaultPagination.page && pagination.pageSize === defaultPagination.pageSize\r\n if (isSame) return <></>\r\n }\r\n\r\n const page = pagination.page ?? 1\r\n const pageSize = pagination.pageSize\r\n const isDefault = page === 1 && !pageSize\r\n if (isDefault) return <></>\r\n\r\n const labelParts: string[] = []\r\n if (page > 1) labelParts.push(`Page ${page}`)\r\n if (pageSize) labelParts.push(`${pageSize} items/page`)\r\n\r\n return (\r\n <Box className={activeFiltersPanelClasses.item}>\r\n <Typography variant='caption' sx={{ fontWeight: 700 }}>\r\n Pagination:\r\n </Typography>\r\n <Chip size='small' label={labelParts.join(', ')} className={activeFiltersPanelClasses.itemChip} />\r\n </Box>\r\n )\r\n }\r\n\r\n renderSort = () => {\r\n const sort = this.dataViewContext.filterState?.sort\r\n if (!sort) return <></>\r\n\r\n const fieldConfig = this.dataViewContext.filterBarConfigs.fields?.[sort.field]\r\n const fieldLabel = fieldConfig?.label || sort.field.toString()\r\n const sortConfig = mapSortConfigs[sort.direction]\r\n\r\n return (\r\n <Box className={activeFiltersPanelClasses.item}>\r\n <Typography variant='caption' sx={{ fontWeight: 700 }}>\r\n Sort:\r\n </Typography>\r\n {/* <Box className={activeFiltersPanelClasses.itemContent}> */}\r\n <Chip\r\n clickable\r\n size='small'\r\n label={\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\r\n <span>{fieldLabel}</span>\r\n {sortConfig.icon}\r\n </Box>\r\n }\r\n className={activeFiltersPanelClasses.itemChip}\r\n onClick={this.toggleSortDirection}\r\n onDelete={() => this.removeSort()}\r\n title={`${fieldLabel} - ${sortConfig.title}`}\r\n />\r\n {/* </Box> */}\r\n </Box>\r\n )\r\n }\r\n\r\n removeFilter = (field: keyof T, item: IItemBase) => {\r\n const store = createFilterStore(this.dataViewContext.filterState).removeFilterItem(field, item.value, { reason: 'filter' })\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n\r\n removeQuickSearch = (item: IItemBase) => {\r\n const store = createFilterStore(this.dataViewContext.filterState).removeQuickSearchItem(item.value, { reason: 'quickSearch' })\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n\r\n removeSort = () => {\r\n const store = createFilterStore(this.dataViewContext.filterState).removeSort({ reason: 'sort' })\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n\r\n toggleSortDirection = () => {\r\n const store = createFilterStore(this.dataViewContext.filterState).toggleSortDirection({ reason: 'sort' })\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n\r\n handleClearAll = () => {\r\n const fValue = this.dataViewContext.filterBarConfigs.defaultValue || {}\r\n // Trực tiếp clear data, logic đóng sẽ được xử lý tự động\r\n const store = createFilterStore(this.dataViewContext.filterState, fValue).reset()\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n }\r\n\r\n return ActiveFiltersPanel\r\n}\r\n\r\nexport default createActiveFiltersPanel\r\n\r\nconst Wrap = styled(Box)({\r\n position: 'relative',\r\n [`.${activeFiltersPanelClasses.content}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexWrap: 'wrap',\r\n gap: '8px'\r\n },\r\n [`.${activeFiltersPanelClasses.item}`]: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n border: 'dashed 1px var(--color-divider, rgba(145 160 170 / 20%))',\r\n borderRadius: '4px',\r\n alignItems: 'center',\r\n padding: '6px 8px',\r\n gap: '8px'\r\n },\r\n [`.${activeFiltersPanelClasses.itemContent}`]: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n gap: '4px'\r\n },\r\n [`.${activeFiltersPanelClasses.itemChip}`]: {\r\n borderRadius: '4px',\r\n height: '100%',\r\n '& .MuiChip-label': {\r\n overflowWrap: 'break-word',\r\n wordBreak: 'break-word',\r\n whiteSpace: 'normal',\r\n textOverflow: 'clip'\r\n }\r\n },\r\n [`.${activeFiltersPanelClasses.overlay}`]: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n backdropFilter: 'blur(1px)'\r\n }\r\n})\r\n"],"names":["activeFiltersPanelClasses","root","content","item","itemContent","itemChip","removeButton","overlay","createActiveFiltersPanel","ActiveFiltersPanel","props","_this","_classCallCheck","_callSuper","_defineProperty","setState","isClosing","p","_p$field","_jsxs","Box","className","children","Typography","variant","sx","fontWeight","label","field","toString","_jsx","items","map","Chip","clickable","size","value","onDelete","isQuickSearch","removeQuickSearch","removeFilter","_this$dataViewContext","filter","dataViewContext","filterState","keys","Object","length","key","_filter$key","reduce","acc","_item$value","_item$value3","_item$value$toString","_item$value2","type","dateLogic","concat","mapDateLogicText","formatDatetime","push","Fragment","renderItems","_this$dataViewContext2","_this$dataViewContext3","_pagination$page","pagination","defaultPagination","filterBarConfigs","defaultValue","page","pageSize","labelParts","join","_this$dataViewContext4","_this$dataViewContext5","sort","fieldConfig","fields","fieldLabel","sortConfig","mapSortConfigs","direction","display","alignItems","gap","icon","onClick","toggleSortDirection","removeSort","title","store","createFilterStore","removeFilterItem","reason","onFilterStateChange","build","removeQuickSearchItem","fValue","reset","state","data","_inherits","Component","_createClass","_this2","this","mapDataViewContext","context","isEmpty","Collapse","in","timeout","unmountOnExit","orientation","onExited","handleAnimationExited","Wrap","enableSort","renderSort","enableQuickSearch","renderQuickSearch","enableFilter","renderFilters","enablePagination","renderPagination","ClearAllButton","handleClearAll","loading","_this$dataViewContext6","val","quickSearch","list","Array","isArray","styled","position","flexWrap","border","borderRadius","padding","height","overflowWrap","wordBreak","whiteSpace","textOverflow","top","left","width","backdropFilter"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"create.active-filters-panel.js","sources":["../../../src/data-view/create.active-filters-panel.tsx"],"sourcesContent":["import { Component, ComponentType, Fragment } from 'react'\r\nimport { Box, Chip, Collapse, styled, Typography } from '@mui/material'\r\nimport { formatDatetime } from '../utils'\r\nimport { mapDateLogicText } from './helpers'\r\nimport { createFilterStore } from './filter-store'\r\nimport { ClearAllButton, mapSortConfigs } from './ui.units'\r\nimport { IDataViewContext, mapDataViewContext } from './context'\r\nimport { IFilterItem, IFilterMap, IFilterState, IItemBase } from './types'\r\n\r\nexport const activeFiltersPanelClasses = {\r\n root: 'ActiveFiltersPanel-root',\r\n content: 'ActiveFiltersPanel-content',\r\n item: 'ActiveFiltersPanel-item',\r\n itemContent: 'ActiveFiltersPanel-itemContent',\r\n itemChip: 'ActiveFiltersPanel-itemChip',\r\n removeButton: 'ActiveFiltersPanel-removeButton',\r\n overlay: 'ActiveFiltersPanel-overlay'\r\n}\r\n\r\ninterface IRenderItemsParams<T> {\r\n field?: keyof T\r\n label?: string\r\n items: IItemBase[]\r\n isQuickSearch?: boolean\r\n}\r\n\r\nexport interface IActiveFiltersPanelProps {\r\n loading?: boolean\r\n /** @default true */\r\n enableSort?: boolean\r\n /** @default true */\r\n enableFilter?: boolean\r\n /** @default true */\r\n enableQuickSearch?: boolean\r\n /** @default true */\r\n enablePagination?: boolean\r\n}\r\n\r\nexport interface IActiveFiltersPanelState<T> {\r\n data: IFilterState<T> | null\r\n isClosing: boolean\r\n}\r\n\r\nfunction createActiveFiltersPanel<T>(): ComponentType<IActiveFiltersPanelProps> {\r\n class ActiveFiltersPanel extends Component<IActiveFiltersPanelProps, IActiveFiltersPanelState<T>> {\r\n declare dataViewContext: IDataViewContext<T>\r\n\r\n constructor(props: IActiveFiltersPanelProps) {\r\n super(props)\r\n this.state = { data: null, isClosing: false }\r\n }\r\n\r\n // Handle animation completion\r\n private handleAnimationExited = () => {\r\n this.setState({ isClosing: true })\r\n }\r\n\r\n render() {\r\n return mapDataViewContext((context) => {\r\n this.dataViewContext = context\r\n if (!this.dataViewContext) return <></>\r\n const { defaultValue } = this.dataViewContext.filterBarConfigs\r\n const isEmpty = createFilterStore(this.dataViewContext.filterState, defaultValue).isEmpty()\r\n return (\r\n <Collapse in={!isEmpty} timeout={300} unmountOnExit orientation='vertical' onExited={this.handleAnimationExited}>\r\n <Wrap className={activeFiltersPanelClasses.root}>\r\n <Box className={activeFiltersPanelClasses.content}>\r\n {this.props.enableSort !== false && this.renderSort()}\r\n {this.props.enableQuickSearch !== false && this.renderQuickSearch()}\r\n {this.props.enableFilter !== false && this.renderFilters()}\r\n {this.props.enablePagination !== false && this.renderPagination()}\r\n {!isEmpty && <ClearAllButton className={activeFiltersPanelClasses.removeButton} onClick={this.handleClearAll} />}\r\n </Box>\r\n {this.props.loading && <Box className={activeFiltersPanelClasses.overlay} />}\r\n </Wrap>\r\n </Collapse>\r\n )\r\n })\r\n }\r\n\r\n renderItems = (p: IRenderItemsParams<T>) => (\r\n <Box className={activeFiltersPanelClasses.item}>\r\n <Typography variant='caption' sx={{ fontWeight: 700 }}>\r\n {p.label || p.field?.toString()}:\r\n </Typography>\r\n <Box className={activeFiltersPanelClasses.itemContent}>\r\n {p.items.map((item) => (\r\n <Chip\r\n key={item.value}\r\n clickable\r\n size='small'\r\n label={item.label || item.value}\r\n className={activeFiltersPanelClasses.itemChip}\r\n onDelete={() => {\r\n if (p.isQuickSearch) {\r\n this.removeQuickSearch(item)\r\n return\r\n }\r\n if (!p.field) return\r\n this.removeFilter(p.field, item)\r\n }}\r\n />\r\n ))}\r\n </Box>\r\n </Box>\r\n )\r\n\r\n renderQuickSearch() {\r\n const val = this.dataViewContext.filterState?.quickSearch || []\r\n const list = (Array.isArray(val) ? val : [val]).map((value) => ({ value }))\r\n if (!list || list.length === 0) return <></>\r\n return this.renderItems({ label: 'Quick search', items: list, isQuickSearch: true })\r\n }\r\n\r\n renderFilters = () => {\r\n const filter: IFilterMap<T> = this.dataViewContext.filterState?.filter || {}\r\n const keys = Object.keys(filter) as Array<keyof T>\r\n if (keys.length === 0) return <></>\r\n return keys.map((key) => {\r\n const filterItems = (filter[key] ?? []) as IFilterItem[]\r\n const items = filterItems.reduce<IItemBase[]>((acc, item) => {\r\n let label = item.label || item.value?.toString()\r\n if (item.type === 'date' && item.dateLogic) {\r\n label = `${mapDateLogicText[item.dateLogic]} ${formatDatetime(item.value?.toString() ?? '', 'style2')}`\r\n }\r\n if (!!item.value) acc.push({ value: item.value?.toString(), label })\r\n return acc\r\n }, [])\r\n return <Fragment key={key.toString()}>{this.renderItems({ field: key, label: key.toString(), items })}</Fragment>\r\n })\r\n }\r\n\r\n renderPagination = () => {\r\n const pagination = this.dataViewContext.filterState?.pagination\r\n const defaultPagination = this.dataViewContext.filterBarConfigs.defaultValue?.pagination\r\n\r\n if (!pagination || (!pagination.page && !pagination.pageSize)) return <></>\r\n\r\n // Check if current pagination equals default pagination\r\n if (defaultPagination) {\r\n const isSame = pagination.page === defaultPagination.page && pagination.pageSize === defaultPagination.pageSize\r\n if (isSame) return <></>\r\n }\r\n\r\n const page = pagination.page ?? 0\r\n const pageSize = pagination.pageSize\r\n const isDefault = page === 0 && !pageSize\r\n if (isDefault) return null\r\n\r\n return (\r\n <div className={activeFiltersPanelClasses.item}>\r\n <div className={activeFiltersPanelClasses.itemContent}>\r\n {page > 0 && <Chip size='small' label={`page ${page}`} className={activeFiltersPanelClasses.itemChip} />}\r\n {pageSize && <Chip size='small' label={`${pageSize} per page`} className={activeFiltersPanelClasses.itemChip} />}\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n renderSort = () => {\r\n const sort = this.dataViewContext.filterState?.sort\r\n if (!sort) return <></>\r\n\r\n const fieldConfig = this.dataViewContext.filterBarConfigs.fields?.[sort.field]\r\n const fieldLabel = fieldConfig?.label || sort.field.toString()\r\n const sortConfig = mapSortConfigs[sort.direction]\r\n\r\n return (\r\n <Box className={activeFiltersPanelClasses.item}>\r\n <Typography variant='caption' sx={{ fontWeight: 700 }}>\r\n Sort:\r\n </Typography>\r\n {/* <Box className={activeFiltersPanelClasses.itemContent}> */}\r\n <Chip\r\n clickable\r\n size='small'\r\n label={\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\r\n <span>{fieldLabel}</span>\r\n {sortConfig.icon}\r\n </Box>\r\n }\r\n className={activeFiltersPanelClasses.itemChip}\r\n onClick={this.toggleSortDirection}\r\n onDelete={() => this.removeSort()}\r\n title={`${fieldLabel} - ${sortConfig.title}`}\r\n />\r\n {/* </Box> */}\r\n </Box>\r\n )\r\n }\r\n\r\n removeFilter = (field: keyof T, item: IItemBase) => {\r\n const store = createFilterStore(this.dataViewContext.filterState).removeFilterItem(field, item.value, { reason: 'filter' })\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n\r\n removeQuickSearch = (item: IItemBase) => {\r\n const store = createFilterStore(this.dataViewContext.filterState).removeQuickSearchItem(item.value, { reason: 'quickSearch' })\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n\r\n removeSort = () => {\r\n const store = createFilterStore(this.dataViewContext.filterState).removeSort({ reason: 'sort' })\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n\r\n toggleSortDirection = () => {\r\n const store = createFilterStore(this.dataViewContext.filterState).toggleSortDirection({ reason: 'sort' })\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n\r\n handleClearAll = () => {\r\n const fValue = this.dataViewContext.filterBarConfigs.defaultValue || {}\r\n // Trực tiếp clear data, logic đóng sẽ được xử lý tự động\r\n const store = createFilterStore(this.dataViewContext.filterState, fValue).reset()\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n }\r\n\r\n return ActiveFiltersPanel\r\n}\r\n\r\nexport default createActiveFiltersPanel\r\n\r\nconst Wrap = styled(Box)({\r\n position: 'relative',\r\n [`.${activeFiltersPanelClasses.content}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexWrap: 'wrap',\r\n gap: '8px'\r\n },\r\n [`.${activeFiltersPanelClasses.item}`]: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n border: 'dashed 1px var(--color-divider, rgba(145 160 170 / 20%))',\r\n borderRadius: '4px',\r\n alignItems: 'center',\r\n padding: '6px 8px',\r\n gap: '8px'\r\n },\r\n [`.${activeFiltersPanelClasses.itemContent}`]: {\r\n display: 'flex',\r\n flexWrap: 'wrap',\r\n gap: '4px'\r\n },\r\n [`.${activeFiltersPanelClasses.itemChip}`]: {\r\n borderRadius: '4px',\r\n height: '100%',\r\n '& .MuiChip-label': {\r\n overflowWrap: 'break-word',\r\n wordBreak: 'break-word',\r\n whiteSpace: 'normal',\r\n textOverflow: 'clip'\r\n }\r\n },\r\n [`.${activeFiltersPanelClasses.overlay}`]: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n backdropFilter: 'blur(1px)'\r\n }\r\n})\r\n"],"names":["activeFiltersPanelClasses","root","content","item","itemContent","itemChip","removeButton","overlay","createActiveFiltersPanel","ActiveFiltersPanel","props","_this","_classCallCheck","_callSuper","_defineProperty","setState","isClosing","p","_p$field","_jsxs","Box","className","children","Typography","variant","sx","fontWeight","label","field","toString","_jsx","items","map","Chip","clickable","size","value","onDelete","isQuickSearch","removeQuickSearch","removeFilter","_this$dataViewContext","filter","dataViewContext","filterState","keys","Object","length","key","_filter$key","reduce","acc","_item$value","_item$value3","_item$value$toString","_item$value2","type","dateLogic","concat","mapDateLogicText","formatDatetime","push","Fragment","renderItems","_this$dataViewContext2","_this$dataViewContext3","_pagination$page","pagination","defaultPagination","filterBarConfigs","defaultValue","page","pageSize","_this$dataViewContext4","_this$dataViewContext5","sort","fieldConfig","fields","fieldLabel","sortConfig","mapSortConfigs","direction","display","alignItems","gap","icon","onClick","toggleSortDirection","removeSort","title","store","createFilterStore","removeFilterItem","reason","onFilterStateChange","build","removeQuickSearchItem","fValue","reset","state","data","_inherits","Component","_createClass","_this2","this","mapDataViewContext","context","isEmpty","Collapse","in","timeout","unmountOnExit","orientation","onExited","handleAnimationExited","Wrap","enableSort","renderSort","enableQuickSearch","renderQuickSearch","enableFilter","renderFilters","enablePagination","renderPagination","ClearAllButton","handleClearAll","loading","_this$dataViewContext6","val","quickSearch","list","Array","isArray","styled","position","flexWrap","border","borderRadius","padding","height","overflowWrap","wordBreak","whiteSpace","textOverflow","top","left","width","backdropFilter"],"mappings":"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"}
|