dinocollab-core 2.2.11 → 2.2.13
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/src/data-surface/index.create.js +1 -1
- package/dist/src/data-surface/index.create.js.map +1 -1
- package/dist/src/data-surface/view-grid/hooks.js +1 -1
- package/dist/src/data-surface/view-grid/hooks.js.map +1 -1
- package/dist/src/data-surface/view-grid/index.js +1 -1
- package/dist/src/data-surface/view-grid/index.js.map +1 -1
- package/dist/src/data-surface/view-grid/styleds.js +1 -1
- package/dist/src/data-surface/view-grid/styleds.js.map +1 -1
- package/dist/src/data-surface/view-list/hooks.js +1 -1
- package/dist/src/data-surface/view-list/hooks.js.map +1 -1
- package/dist/src/data-surface/view-list/index.js +1 -1
- package/dist/src/data-surface/view-list/index.js.map +1 -1
- package/dist/src/data-surface/view-list/styled.js +1 -1
- package/dist/src/data-surface/view-list/styled.js.map +1 -1
- package/dist/src/data-surface/view-list/types.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-sort.js +1 -1
- package/dist/src/filter-bar/components/filter-sort.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/{units.js → icons.js} +1 -1
- package/dist/src/filter-bar/components/{units.js.map → icons.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 +2 -0
- package/dist/src/filter-bar/components/ui.units.js.map +1 -0
- 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-select-multiple.js +2 -0
- package/dist/src/filter-bar/menu/create-form-field-select-multiple.js.map +1 -0
- package/dist/src/filter-bar/menu/create-form-field-select.js +2 -0
- package/dist/src/filter-bar/menu/create-form-field-select.js.map +1 -0
- package/dist/src/filter-bar/menu/create-form-field-string.js +2 -0
- package/dist/src/filter-bar/menu/create-form-field-string.js.map +1 -0
- package/dist/src/filter-bar/menu/create.js +2 -0
- package/dist/src/filter-bar/menu/create.js.map +1 -0
- package/dist/src/form/create.form-base.js +1 -1
- package/dist/src/form/create.text-editor.js +1 -1
- package/dist/src/form/helpers.js +1 -1
- package/dist/src/table/create.table.js +1 -1
- package/dist/src/table/csv-export-helper.js +2 -0
- package/dist/src/table/csv-export-helper.js.map +1 -0
- package/dist/src/table/custom.export-button.js +2 -0
- package/dist/src/table/custom.export-button.js.map +1 -0
- package/dist/src/table/dino.js +1 -1
- package/dist/src/table/dino.js.map +1 -1
- 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/types/data-surface/index.create.d.ts +10 -2
- package/dist/types/data-surface/view-grid/hooks.d.ts +6 -0
- package/dist/types/data-surface/view-grid/styleds.d.ts +2 -0
- package/dist/types/data-surface/view-grid/types.d.ts +15 -3
- package/dist/types/data-surface/view-list/hooks.d.ts +6 -0
- package/dist/types/data-surface/view-list/styled.d.ts +2 -0
- package/dist/types/data-surface/view-list/types.d.ts +15 -3
- package/dist/types/filter-bar/components/chip-viewer.d.ts +1 -3
- package/dist/types/filter-bar/components/popper-custom.d.ts +2 -2
- package/dist/types/filter-bar/components/ui.units.d.ts +22 -0
- package/dist/types/filter-bar/index.create.d.ts +1 -1
- package/dist/types/filter-bar/index.dino.d.ts +6 -0
- package/dist/types/filter-bar/menu/create-form-field-select-multiple.d.ts +13 -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 +10 -0
- package/dist/types/filter-bar/{components/filter-menu.d.ts → menu/create.d.ts} +2 -2
- package/dist/types/filter-bar/{components/filter-menu.types.d.ts → menu/types.d.ts} +6 -1
- package/dist/types/table/csv-export-helper.d.ts +20 -0
- package/dist/types/table/custom.export-button.d.ts +8 -0
- package/dist/types/table/dino.d.ts +1 -0
- package/dist/types/table/index.d.ts +1 -0
- package/dist/types/table/toolbar-pannel.d.ts +2 -0
- package/package.json +1 -1
- package/dist/src/filter-bar/components/filter-menu.js +0 -2
- package/dist/src/filter-bar/components/filter-menu.js.map +0 -1
- package/dist/src/filter-bar/components/filter-menu.units.js +0 -2
- package/dist/src/filter-bar/components/filter-menu.units.js.map +0 -1
- package/dist/types/filter-bar/components/filter-menu.units.d.ts +0 -18
- /package/dist/types/filter-bar/components/{units.d.ts → icons.d.ts} +0 -0
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{defineProperty as e,objectWithoutProperties as n,objectSpread2 as r,slicedToArray as t,asyncToGenerator as i,regenerator as o}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as l,jsxs as a}from"react/jsx-runtime";import{useState as u,useContext as c,useMemo as s,createRef as d}from"react";import{styled as m,Box as f,MenuList as p,Tooltip as v,IconButton as h,Badge as b,MenuItem as g,Typography as y,Button as j}from"@mui/material";import k from"@mui/icons-material/FilterList";import F from"@mui/material/ClickAwayListener";import{KeySpecial as I}from"../types.js";import{useFilterActions as C}from"../hooks.js";import{FilterBarContext as x}from"../index.context.js";import{mapSpecialLabel as S,mapSpecialTexts as w}from"../helpers.js";import{SingleRuleValidate as P,FormValidator as R}from"../../form/validator.js";import{PopperCustom as q,PopperContent as T,PopperFooter as A}from"./popper-custom.js";import{createFormFieldString as B,FilterMenuNoField as O}from"./filter-menu.units.js";var M=["fields","validation","enableQuickSearch"];function D(m){var f=L,p=function(e){var t=e.fields,i=e.validation,o=e.enableQuickSearch,l=void 0===o||o,a=n(e,M),u=I.quickSearch,c=r({},t);if(l){var s=c[u],d=null!=s&&s.label?s.label:S[u],m=Object.assign({},c[u],{field:u,label:d,singleValue:!0});c[u]=m}else delete c[u];var f=Object.keys(c),p=f.reduce(function(e,n){var t=c[n];return t?(e[n]=r(r({},t),{},{field:n}),e):e},{}),v=r({},i);return f.forEach(function(e){var n,r,t,i=v[e],o=null!==(n=null!==(r=null==i?void 0:i.label)&&void 0!==r?r:null===(t=c[e])||void 0===t?void 0:t.label)&&void 0!==n?n:e.toString();i?i.Rules.some(function(e){return e.rule===P.Required})||(i.label=o,i.Rules.push({rule:P.Required})):v[e]={Rules:[{rule:P.Required}],label:o}}),r(r({},a),{},{fields:p,validation:v,enableQuickSearch:l})}(m),D=function(n){return Object.keys(n.fields).reduce(function(r,t){var i,o=t,l=null===(i=n.validation)||void 0===i?void 0:i[o];return l&&(r[o]=new R(e({},o,l))),r},{})}(p),V=function(e){var n=e.fields;return Object.keys(n).reduce(function(e,r){var t,i=r,o=n[i];return o&&(e[i]=null!==(t=o.form)&&void 0!==t?t:B(o)),e},{})}(p),z=m.quickSearchHint;return function(e){var n=d(),S=u(null),P=t(S,2),R=P[0],B=P[1],M=Boolean(R),L=c(x),E=C(L),H=u(null),_=t(H,2),G=_[0],W=_[1],J=s(function(){var n=m.popperProps,r=m.rootProps;return Object.assign({},{popperProps:n,rootProps:r},e.slots)},[m,e.slots]),K=function(){B(null),setTimeout(function(){W(null)},300)},U=function(){E.clearAllFilters(),K()},X=function(){var e=i(o().m(function e(n,r,t){return o().w(function(e){for(;;)switch(e.n){case 0:if(r){e.n=1;break}return e.a(2);case 1:null!=t&&t.singleValue?E.replaceFilter(n,r,{logic:r.logic}):E.upsertManyFilter(n,r,{logic:r.logic});case 2:return e.a(2)}},e)}));return function(n,r,t){return e.apply(this,arguments)}}(),Y=s(function(){var e=Object.values(p.fields);return Array.from(e)},[p.fields]),Z=E.getTotalCount(),$="".concat(Z," Filter").concat(1!==Z?"s":"");return l(F,{onClickAway:K,children:a(N,r(r({className:f.root},J.rootProps),{},{children:[l(v,{title:$,arrow:!0,placement:"top",children:l(h,{size:"small",ref:n,onClick:function(){W(null),B(n.current)},children:l(b,{badgeContent:Z,color:"primary",invisible:0===Z,children:l(k,{fontSize:"small"})})})}),l(q,r(r({open:M,anchorEl:R,placement:"bottom",transition:!0,disablePortal:!0},J.popperProps),{},{children:function(){if(0===Y.length)return l(O,{onClose:K});if(G){var e,n=V[G];if(!n)return null;var r=null===(e=L.filterState.storeFilter)||void 0===e?void 0:e[G];return l(n,{value:r,isLoading:L.isLoading,onRemove:E.removeFilterByFieldValue,validator:D[G],onSubmit:X,onClose:K,onRemoveField:function(e){return E.removeFilter(e)},onBack:function(){return W(null)}})}return a(T,{title:"Filter by",onClose:K,children:[l(Q,{className:f.menu,children:Y.map(function(e){var n,r,t=e.field.toString();if(!t)return null;var i=E.getFieldInfo(e.field),o=null!==(n=null==i?void 0:i.values.join(", "))&&void 0!==n?n:"",u=i?i.values.length:0,c=u>0?" (".concat(u,")"):"",s=null!==(r=e.label)&&void 0!==r?r:t.toString(),d=u>0?"Filter by ".concat(s,": ").concat(o):void 0;if(e.field===I.quickSearch){var m=w.qsTooltip;d="function"==typeof z?z(m):null!=z?z:m}return l(g,{className:f.menuItem,sx:{justifyContent:"space-between"},onClick:function(){return n=e.field,void W(n);var n},children:l(v,{title:d,placement:"right",arrow:!0,children:a("div",{className:f.menuItemInner,children:[l(y,{variant:"body2",children:s}),l(y,{variant:"caption",sx:{ml:1,color:"text.secondary"},children:c})]})})},t)})}),l(A,{children:l(j,{color:"error",disabled:0===Z,onClick:U,children:"Clear All"})})]})}()}))]}))})}}var L={root:"DinoFilterMenu-root",menu:"DinoFilterMenu-menu",menuItem:"DinoFilterMenu-menuItem",menuItemInner:"DinoFilterMenu-menuItemInner"},N=m(f)(e({},"&.".concat(L.root),{display:"inline-flex",justifyContent:"center",alignItems:"center",flex:"0 0 auto"})),Q=m(p)(e(e({},".".concat(L.menuItem),{paddingTop:0,paddingBottom:0}),".".concat(L.menuItemInner),{display:"flex",justifyContent:"space-between",alignItems:"center",width:"100%",gap:"4px",paddingTop:"6px",paddingBottom:"6px"}));export{D as createFilterMenu,L as filterMenuClasses};
|
|
2
|
-
//# sourceMappingURL=filter-menu.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filter-menu.js","sources":["../../../../src/filter-bar/components/filter-menu.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { createRef, useContext, useMemo, useState } from 'react'\r\nimport { Badge, Box, Button, IconButton, MenuItem, MenuList, styled, Tooltip, Typography } from '@mui/material'\r\nimport FilterListIcon from '@mui/icons-material/FilterList'\r\nimport ClickAwayListener from '@mui/material/ClickAwayListener'\r\nimport { KeySpecial } from '../types'\r\nimport { useFilterActions } from '../hooks'\r\nimport { FilterBarContext } from '../index.context'\r\nimport { mapSpecialLabel, mapSpecialTexts } from '../helpers'\r\nimport { FormValidator, SingleRuleValidate } from '../../form/validator'\r\nimport { PopperContent, PopperCustom, PopperFooter } from './popper-custom'\r\nimport { createFormFieldString, FilterMenuNoField } from './filter-menu.units'\r\n// types\r\nimport type { FC } from 'react'\r\nimport type { IFilterBarContext } from '../index.context'\r\nimport type { TFieldModelValid, TFieldType, TFieldValue } from '../types'\r\nimport type { IConfigValue, IFormValidatorConfig } from '../../form/validator'\r\nimport type { IFilterMenuProps, IFilterMenuSlots, TFieldMenuConfigs } from './filter-menu.types'\r\nimport type { IFieldMenuConfig, IFilterMenuConfig, IFilterMenuFormProps } from './filter-menu.types'\r\n\r\nfunction generateValidatorMap<T>(config: IFilterMenuConfig<T>) {\r\n const keys = Object.keys(config.fields) as TFieldType<T>[]\r\n const validateMaps = keys.reduce(\r\n (acc, key) => {\r\n const fieldKey = key as TFieldType<T>\r\n const fieldConfig = config.validation?.[fieldKey]\r\n if (fieldConfig) {\r\n acc[fieldKey] = new FormValidator({ [fieldKey]: fieldConfig } as IFormValidatorConfig<Partial<TFieldModelValid<T>>>)\r\n }\r\n return acc\r\n },\r\n {} as Record<TFieldType<T>, FormValidator<Partial<TFieldModelValid<T>>>>\r\n )\r\n return validateMaps\r\n}\r\n\r\nfunction generateFormInputMap<T>(config: IFilterMenuConfig<T>) {\r\n const { fields } = config\r\n const keys = Object.keys(fields) as TFieldType<T>[]\r\n const formInputMaps = keys.reduce(\r\n (acc, key) => {\r\n const fieldKey = key as TFieldType<T>\r\n const fieldConfig = fields[fieldKey] as IFieldMenuConfig<T>\r\n if (fieldConfig) acc[fieldKey] = fieldConfig.form ?? createFormFieldString(fieldConfig)\r\n return acc\r\n },\r\n {} as Record<TFieldType<T>, React.ComponentType<IFilterMenuFormProps<T>>>\r\n )\r\n return formInputMaps\r\n}\r\n\r\nfunction generateConfigs<T>(config: IFilterMenuConfig<T>): IFilterMenuConfig<T> {\r\n const { fields, validation, enableQuickSearch = true, ...rest } = config\r\n const qsKey = KeySpecial.quickSearch\r\n\r\n // Merge quick search field if enabled\r\n const mergedFields: TFieldMenuConfigs<T> = { ...fields }\r\n if (enableQuickSearch) {\r\n const item = mergedFields[qsKey]\r\n const label = item?.label ? item.label : mapSpecialLabel[qsKey]\r\n const temp = Object.assign({}, mergedFields[qsKey], { field: qsKey, label, singleValue: true })\r\n mergedFields[qsKey] = temp\r\n } else {\r\n delete mergedFields[qsKey]\r\n }\r\n\r\n const keys = Object.keys(mergedFields) as TFieldType<T>[]\r\n const finalFields = keys.reduce<TFieldMenuConfigs<T>>((acc, key) => {\r\n const fieldConfig = mergedFields[key]\r\n if (!fieldConfig) return acc\r\n acc[key] = { ...fieldConfig, field: key }\r\n return acc\r\n }, {} as TFieldMenuConfigs<T>)\r\n\r\n // Merge validation config with default required rule\r\n const mergedValidation: IFormValidatorConfig<Partial<TFieldModelValid<T>>> = { ...validation }\r\n keys.forEach((key) => {\r\n const item: IConfigValue<Partial<TFieldModelValid<T>>> | undefined = mergedValidation[key]\r\n const label = item?.label ?? mergedFields[key]?.label ?? key.toString()\r\n if (!item) {\r\n mergedValidation[key] = { Rules: [{ rule: SingleRuleValidate.Required }], label }\r\n } else if (!item.Rules.some((r) => r.rule === SingleRuleValidate.Required)) {\r\n item.label = label\r\n item.Rules.push({ rule: SingleRuleValidate.Required })\r\n }\r\n })\r\n\r\n return { ...rest, fields: finalFields, validation: mergedValidation, enableQuickSearch }\r\n}\r\n\r\nexport function createFilterMenu<T>(config: IFilterMenuConfig<T>) {\r\n const classes = filterMenuClasses\r\n const mergedConfigs = generateConfigs(config)\r\n const validateMaps = generateValidatorMap(mergedConfigs)\r\n const formInputMaps = generateFormInputMap(mergedConfigs)\r\n const quickSearchHint = config.quickSearchHint\r\n\r\n // Component\r\n const FilterMenu: FC<IFilterMenuProps<T>> = (props) => {\r\n const refButton = createRef<HTMLButtonElement>()\r\n\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\r\n const isOpen = Boolean(anchorEl)\r\n\r\n const context = useContext(FilterBarContext) as IFilterBarContext<T>\r\n const filterActions = useFilterActions<T>(context)\r\n\r\n const [fieldSelected, setFieldSelected] = useState<TFieldType<T> | null>(null)\r\n\r\n const mergedSlots = useMemo<IFilterMenuSlots>(() => {\r\n const { popperProps, rootProps } = config\r\n return Object.assign({}, { popperProps, rootProps }, props.slots)\r\n }, [config, props.slots])\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null)\r\n setTimeout(() => {\r\n setFieldSelected(null)\r\n }, 300)\r\n }\r\n\r\n const handleOpen = () => {\r\n setFieldSelected(null)\r\n setAnchorEl(refButton.current)\r\n }\r\n\r\n const handleMenuItemClick = (field: TFieldType<T>) => {\r\n setFieldSelected(field)\r\n }\r\n\r\n const handleClearAll = () => {\r\n filterActions.clearAllFilters()\r\n handleClose()\r\n }\r\n\r\n const handleSubmit = async (key: TFieldType<T>, value?: TFieldValue, config?: IFieldMenuConfig<T>) => {\r\n if (!value) return\r\n if (config?.singleValue) {\r\n filterActions.replaceFilter(key, value, { logic: value.logic })\r\n } else {\r\n filterActions.upsertManyFilter(key, value, { logic: value.logic })\r\n }\r\n }\r\n\r\n const data = useMemo(() => {\r\n const keys = Object.values(mergedConfigs.fields)\r\n return Array.from(keys) as IFieldMenuConfig<T>[]\r\n }, [mergedConfigs.fields])\r\n\r\n const renderContent = () => {\r\n if (data.length === 0) {\r\n return <FilterMenuNoField onClose={handleClose} />\r\n }\r\n\r\n if (fieldSelected) {\r\n const FormComponent = formInputMaps[fieldSelected] as React.ComponentType<IFilterMenuFormProps<T>>\r\n if (!FormComponent) return null\r\n const value = context.filterState.storeFilter?.[fieldSelected]\r\n return (\r\n <FormComponent\r\n value={value}\r\n isLoading={context.isLoading}\r\n onRemove={filterActions.removeFilterByFieldValue}\r\n validator={validateMaps[fieldSelected]}\r\n onSubmit={handleSubmit}\r\n onClose={handleClose}\r\n onRemoveField={(f) => filterActions.removeFilter(f)}\r\n onBack={() => setFieldSelected(null)}\r\n />\r\n )\r\n }\r\n\r\n return (\r\n <PopperContent title='Filter by' onClose={handleClose}>\r\n <MenuListCustom className={classes.menu}>\r\n {data.map((item) => {\r\n const key = item.field.toString()\r\n if (!key) return null\r\n const info = filterActions.getFieldInfo(item.field)\r\n const note = info?.values.join(', ') ?? ''\r\n const fieldCount = info ? info.values.length : 0\r\n const suffix = fieldCount > 0 ? ` (${fieldCount})` : ''\r\n const label = item.label ?? key.toString()\r\n let tooltipTitle = fieldCount > 0 ? `Filter by ${label}: ${note}` : undefined\r\n if (item.field === KeySpecial.quickSearch) {\r\n const txt = mapSpecialTexts.qsTooltip\r\n tooltipTitle = typeof quickSearchHint === 'function' ? quickSearchHint(txt) : (quickSearchHint ?? txt)\r\n }\r\n return (\r\n <MenuItem\r\n key={key}\r\n className={classes.menuItem}\r\n sx={{ justifyContent: 'space-between' }}\r\n onClick={() => handleMenuItemClick(item.field)}\r\n >\r\n <Tooltip title={tooltipTitle} placement='right' arrow>\r\n <div className={classes.menuItemInner}>\r\n <Typography variant='body2'>{label}</Typography>\r\n <Typography variant='caption' sx={{ ml: 1, color: 'text.secondary' }}>\r\n {suffix}\r\n </Typography>\r\n </div>\r\n </Tooltip>\r\n </MenuItem>\r\n )\r\n })}\r\n </MenuListCustom>\r\n <PopperFooter>\r\n <Button color='error' disabled={filterCount === 0} onClick={handleClearAll}>\r\n Clear All\r\n </Button>\r\n </PopperFooter>\r\n </PopperContent>\r\n )\r\n }\r\n\r\n const filterCount = filterActions.getTotalCount()\r\n const iconTitle = `${filterCount} Filter${filterCount !== 1 ? 's' : ''}`\r\n return (\r\n <ClickAwayListener onClickAway={handleClose}>\r\n <FilterInputStyled className={classes.root} {...mergedSlots.rootProps}>\r\n <Tooltip title={iconTitle} arrow placement='top'>\r\n <IconButton size='small' ref={refButton} onClick={handleOpen}>\r\n <Badge badgeContent={filterCount} color='primary' invisible={filterCount === 0}>\r\n <FilterListIcon fontSize='small' />\r\n </Badge>\r\n </IconButton>\r\n </Tooltip>\r\n <PopperCustom open={isOpen} anchorEl={anchorEl} placement='bottom' transition disablePortal {...mergedSlots.popperProps}>\r\n {renderContent()}\r\n </PopperCustom>\r\n </FilterInputStyled>\r\n </ClickAwayListener>\r\n )\r\n }\r\n return FilterMenu\r\n}\r\n\r\n// styles\r\nexport const filterMenuClasses = {\r\n root: 'DinoFilterMenu-root',\r\n input: 'DinoFilterMenu-input',\r\n beforeInput: 'DinoFilterMenu-beforeInput',\r\n menu: 'DinoFilterMenu-menu',\r\n menuItem: 'DinoFilterMenu-menuItem',\r\n menuItemInner: 'DinoFilterMenu-menuItemInner'\r\n}\r\n\r\nconst FilterInputStyled = styled(Box)({\r\n [`&.${filterMenuClasses.root}`]: {\r\n display: 'inline-flex',\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n flex: '0 0 auto'\r\n }\r\n})\r\n\r\nconst MenuListCustom = styled(MenuList)({\r\n [`.${filterMenuClasses.menuItem}`]: {\r\n paddingTop: 0,\r\n paddingBottom: 0\r\n },\r\n [`.${filterMenuClasses.menuItemInner}`]: {\r\n display: 'flex',\r\n justifyContent: 'space-between',\r\n alignItems: 'center',\r\n width: '100%',\r\n gap: '4px',\r\n paddingTop: '6px',\r\n paddingBottom: '6px'\r\n }\r\n})\r\n"],"names":["createFilterMenu","config","classes","filterMenuClasses","mergedConfigs","fields","validation","_config$enableQuickSe","enableQuickSearch","rest","_objectWithoutProperties","_excluded","qsKey","KeySpecial","quickSearch","mergedFields","_objectSpread","item","label","mapSpecialLabel","temp","Object","assign","field","singleValue","keys","finalFields","reduce","acc","key","fieldConfig","mergedValidation","forEach","_ref","_item$label","_mergedFields$key","toString","Rules","some","r","rule","SingleRuleValidate","Required","push","generateConfigs","validateMaps","_config$validation","fieldKey","FormValidator","_defineProperty","generateValidatorMap","formInputMaps","_fieldConfig$form","form","createFormFieldString","generateFormInputMap","quickSearchHint","props","refButton","createRef","_useState","useState","_useState2","_slicedToArray","anchorEl","setAnchorEl","isOpen","Boolean","context","useContext","FilterBarContext","filterActions","useFilterActions","_useState3","_useState4","fieldSelected","setFieldSelected","mergedSlots","useMemo","popperProps","rootProps","slots","handleClose","setTimeout","handleClearAll","clearAllFilters","handleSubmit","_ref2","_asyncToGenerator","_regenerator","m","_callee","value","w","_context","n","a","replaceFilter","logic","upsertManyFilter","_x","_x2","_x3","apply","this","arguments","data","values","Array","from","filterCount","getTotalCount","iconTitle","concat","_jsx","ClickAwayListener","onClickAway","children","_jsxs","FilterInputStyled","className","root","Tooltip","title","arrow","placement","IconButton","size","ref","onClick","current","Badge","badgeContent","color","invisible","FilterListIcon","fontSize","PopperCustom","open","transition","disablePortal","length","FilterMenuNoField","onClose","_context$filterState$","FormComponent","filterState","storeFilter","isLoading","onRemove","removeFilterByFieldValue","validator","onSubmit","onRemoveField","f","removeFilter","onBack","PopperContent","MenuListCustom","menu","map","_info$values$join","_item$label2","info","getFieldInfo","note","join","fieldCount","suffix","tooltipTitle","undefined","txt","mapSpecialTexts","qsTooltip","MenuItem","menuItem","sx","justifyContent","menuItemInner","Typography","variant","ml","PopperFooter","Button","disabled","renderContent","styled","Box","display","alignItems","flex","MenuList","paddingTop","paddingBottom","width","gap"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{objectWithoutProperties as e,objectSpread2 as l,slicedToArray as o}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as r,jsxs as i}from"react/jsx-runtime";import{useState as t,useMemo as n,createRef as a}from"react";import{styled as c,Tooltip as s,IconButton as u,alpha as d,Chip as m,ToggleButtonGroup as v,TextField as p,Button as f,Box as h,Typography as b,ToggleButton as g}from"@mui/material";import x from"@mui/icons-material/ChevronLeft";import{createChipViewers as C}from"./chip-viewer.js";import{PopperContent as y,PopperBody as k,PopperFooter as z}from"./popper-custom.js";import{getErrorMessage as A,convertFormDataToJson as j}from"../../form/helpers.js";var w=["children"],S=function(e){var l=e.onClose;return r(y,{title:"Filter by",onClose:l,children:r(b,{variant:"body2",sx:{p:2,textAlign:"center"},children:"No field to filter"})})},B=c(function(o){var i=o.children,t=e(o,w);return r(s,{title:"Back",placement:"top",arrow:!0,children:r(u,l(l({},t),{},{children:i||r(x,{fontSize:"small"})}))})})(function(e){var l=e.theme;return{color:l.palette.common.white,transition:l.transitions.create("color"),"&:hover":{color:l.palette.primary.light,backgroundColor:d(l.palette.common.white,.1)}}}),T=c(m)(function(e){var l=e.theme;return{backgroundColor:"dark"===l.palette.mode?l.palette.grey[900]:l.palette.grey[800],color:l.palette.common.white,border:"1px solid ".concat(d(l.palette.common.white,.1)),height:20,fontSize:"0.75rem","& .MuiChip-label":{color:l.palette.common.white}}}),F=function(e){return i(M,{size:"small",value:e.value||"and",exclusive:!0,onChange:function(l,o){o&&e.onChange&&e.onChange(l,o)},sx:e.sx,children:[r(g,{size:"small",value:"and","aria-label":"and logic",children:"AND"}),r(g,{size:"small",value:"or","aria-label":"or logic",children:"OR"})]})},M=c(v)({"& .MuiToggleButton-root":{color:"#fff",borderColor:"rgba(255, 255, 255, 0.3)",fontSize:"0.65rem",fontWeight:600,lineHeight:1,minWidth:"40px",padding:"6px 8px","&.Mui-selected":{backgroundColor:"#1976d2",color:"#fff","&:hover":{backgroundColor:"#1565c0"}},"&:hover":{backgroundColor:"rgba(255, 255, 255, 0.08)"}}});function R(e){var l=C();return function(c){var s,u=a(),d=c.value,m=void 0===d?{values:[],logic:"or"}:d,v=t(m.logic),b=o(v,2),g=b[0],x=b[1],C=null!==(s=null==e?void 0:e.label)&&void 0!==s?s:e.field.toString(),w=t({}),S=o(w,2),M=S[0],R=S[1],D=function(l){c.onSubmit(e.field,l,e)},H=A(M,e.field),I=n(function(){var l=Array.isArray(m.values)?m.values:[m.values];return{field:e.field,items:l.map(function(e){return{value:e}})}},[e.field,m]),L=[];return c.isLoading&&L.push("disabled"),r(W,{className:L.join(" "),onSubmit:function(l){var o;l.preventDefault();var r=new FormData(l.currentTarget),i=j(r),t=null===(o=c.validator)||void 0===o?void 0:o.run(i);if(R(t||{}),!t||0===Object.keys(t).length){var n=Array.isArray(i[e.field])?i[e.field]:[i[e.field]];D({values:n,logic:g}),u.current&&(u.current.blur(),u.current.value="")}},noValidate:!0,children:i(y,{title:"Filter by ".concat(C),onClose:c.onClose,slots:{beforeTitle:r(B,{size:"small",onClick:c.onBack}),afterTitle:e.singleValue?r(T,{sx:{ml:1.5},size:"small",label:"Last value only"}):!m.values||m.values.length<2?null:r(F,{sx:{ml:1},value:g,onChange:function(e,l){return function(e){x(e);var l={values:m.values,logic:e};D(l)}(l)}})},children:[i(k,{children:[r(l.Group,{sx:{mb:1,borderBottom:"none!important"},label:"Applied",placement:"horizontal",enableMinimalesticView:!0,value:I,onRemove:c.onRemove}),r(p,{inputRef:u,autoFocus:!0,name:e.field.toString(),size:"small",fullWidth:!0,placeholder:"Enter value",error:H.error,helperText:H.message,sx:{".MuiInputBase-root":{minHeight:"42px"}}})]}),i(z,{children:[r(f,{size:"small",color:"error",variant:"text",name:"action",value:"clear",disabled:!m.values||0===m.values.length,onClick:function(){var l;null===(l=c.onRemoveField)||void 0===l||l.call(c,e.field)},children:"Clear All"}),r(h,{sx:{flex:1}}),r(f,{size:"small",color:"inherit",variant:"text",name:"action",value:"cancel",onClick:c.onClose,children:"Cancel"}),r(f,{size:"small",type:"submit",color:"primary",variant:"contained",name:"action",value:"ok",children:"Apply"})]})]})})}}var W=c("form")({position:"relative","&::after":{content:'""',display:"block",position:"absolute",inset:0,backgroundColor:"rgba(0, 0, 0, 0.2)",filter:"blur(2px)",zIndex:-1,opacity:0,transition:"opacity 0.3s",visibility:"hidden"},"&.disabled":{pointerEvents:"none","&::after":{zIndex:1,opacity:1,visibility:"visible"}}});export{F as FilterLogicToggle,S as FilterMenuNoField,R as createFormFieldString};
|
|
2
|
-
//# sourceMappingURL=filter-menu.units.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"filter-menu.units.js","sources":["../../../../src/filter-bar/components/filter-menu.units.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { createRef, useMemo, useState } from 'react'\r\nimport { alpha, Box, Button, Chip, IconButton, styled, TextField, ToggleButton, ToggleButtonGroup, Tooltip, Typography } from '@mui/material'\r\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft'\r\nimport { createChipViewers } from './chip-viewer'\r\nimport { PopperBody, PopperContent, PopperFooter } from './popper-custom'\r\nimport { convertFormDataToJson, getErrorMessage } from '../../form/helpers'\r\n// types\r\nimport type { FC } from 'react'\r\nimport type { IconButtonProps, ToggleButtonGroupProps } from '@mui/material'\r\nimport type { TChipViewerGroup } from './chip-viewer'\r\nimport type { IPartialError } from '../../form/validator'\r\nimport type { IFieldMenuConfig, IFilterMenuFormProps } from './filter-menu.types'\r\nimport type { TFieldModelValid, TFieldValid, TFieldValue, TLogic } from '../types'\r\n\r\ninterface IFilterMenuNoFieldProps {\r\n onClose: () => void\r\n}\r\n\r\nexport const FilterMenuNoField: FC<IFilterMenuNoFieldProps> = ({ onClose }) => (\r\n <PopperContent title='Filter by' onClose={onClose}>\r\n <Typography variant='body2' sx={{ p: 2, textAlign: 'center' }}>\r\n No field to filter\r\n </Typography>\r\n </PopperContent>\r\n)\r\n\r\nconst ButtonBack = styled(({ children, ...props }: IconButtonProps) => (\r\n <Tooltip title='Back' placement='top' arrow>\r\n <IconButton {...props}>{children || <ChevronLeftIcon fontSize='small' />}</IconButton>\r\n </Tooltip>\r\n))(({ theme }) => ({\r\n color: theme.palette.common.white,\r\n transition: theme.transitions.create('color'),\r\n '&:hover': {\r\n color: theme.palette.primary.light,\r\n backgroundColor: alpha(theme.palette.common.white, 0.1)\r\n }\r\n}))\r\n\r\nconst ChipDark = styled(Chip)(({ theme }) => ({\r\n backgroundColor: theme.palette.mode === 'dark' ? theme.palette.grey[900] : theme.palette.grey[800],\r\n color: theme.palette.common.white,\r\n border: `1px solid ${alpha(theme.palette.common.white, 0.1)}`,\r\n height: 20,\r\n fontSize: '0.75rem',\r\n '& .MuiChip-label': {\r\n color: theme.palette.common.white\r\n }\r\n}))\r\n\r\nexport interface FilterLogicToggleProps {\r\n value?: TLogic\r\n onChange?: (event: React.MouseEvent<HTMLElement>, value: TLogic) => void\r\n sx?: ToggleButtonGroupProps['sx']\r\n}\r\n\r\nexport const FilterLogicToggle: FC<FilterLogicToggleProps> = (props) => {\r\n const handleChange = (event: React.MouseEvent<HTMLElement>, newValue: string | null) => {\r\n if (newValue && props.onChange) {\r\n props.onChange(event, newValue as TLogic)\r\n }\r\n }\r\n\r\n return (\r\n <ToggleButtonGroupCustom size='small' value={props.value || 'and'} exclusive onChange={handleChange} sx={props.sx}>\r\n <ToggleButton size='small' value='and' aria-label='and logic'>\r\n AND\r\n </ToggleButton>\r\n <ToggleButton size='small' value='or' aria-label='or logic'>\r\n OR\r\n </ToggleButton>\r\n </ToggleButtonGroupCustom>\r\n )\r\n}\r\n\r\nconst ToggleButtonGroupCustom = styled(ToggleButtonGroup)({\r\n '& .MuiToggleButton-root': {\r\n color: '#fff',\r\n borderColor: 'rgba(255, 255, 255, 0.3)',\r\n fontSize: '0.65rem',\r\n fontWeight: 600,\r\n lineHeight: 1,\r\n minWidth: '40px',\r\n padding: '6px 8px',\r\n '&.Mui-selected': {\r\n backgroundColor: '#1976d2',\r\n color: '#fff',\r\n '&:hover': { backgroundColor: '#1565c0' }\r\n },\r\n '&:hover': { backgroundColor: 'rgba(255, 255, 255, 0.08)' }\r\n }\r\n})\r\n\r\nexport interface IFormFieldStringProps<T> extends IFilterMenuFormProps<T> {}\r\n\r\nexport function createFormFieldString<T>(config: IFieldMenuConfig<T>) {\r\n const ChipViewers = createChipViewers<T>()\r\n\r\n const FormFieldString: FC<IFormFieldStringProps<T>> = (props) => {\r\n const refInput = createRef<HTMLInputElement>()\r\n const { value = { values: [], logic: 'or' } } = props\r\n const [filterLogic, setFilterLogic] = useState<TLogic>(value.logic!)\r\n\r\n const label = config?.label ?? config.field.toString()\r\n\r\n const [errorData, setErrorData] = useState<IPartialError<TFieldModelValid<T>>>({})\r\n\r\n const handleSubmit = (newValue: TFieldValue) => {\r\n props.onSubmit(config.field, newValue, config)\r\n }\r\n\r\n const handleSubmitForm = (event: React.FormEvent<HTMLFormElement>) => {\r\n event.preventDefault()\r\n const formData = new FormData(event.currentTarget)\r\n const obj = convertFormDataToJson<TFieldModelValid<T>>(formData)\r\n let errorData = props.validator?.run(obj) as IPartialError<TFieldModelValid<T>>\r\n\r\n setErrorData(errorData || {})\r\n\r\n if (!errorData || Object.keys(errorData).length === 0) {\r\n const newValues = (Array.isArray(obj[config.field]) ? obj[config.field] : [obj[config.field]]) as TFieldValid[]\r\n const newValue: TFieldValue = { values: newValues, logic: filterLogic }\r\n handleSubmit(newValue)\r\n\r\n if (refInput.current) {\r\n refInput.current.blur()\r\n refInput.current.value = ''\r\n }\r\n\r\n // const action = (event.nativeEvent as any).submitter?.value\r\n // if (action === 'ok') // Clear input value\r\n }\r\n }\r\n\r\n const error = getErrorMessage(errorData, config.field)\r\n\r\n const filterViewerValue = useMemo<TChipViewerGroup<T>>(() => {\r\n const items = Array.isArray(value.values) ? value.values : [value.values]\r\n return { field: config.field, items: items.map((v) => ({ value: v })) }\r\n }, [config.field, value])\r\n\r\n const handleChandeLogic = (newLogic: TLogic) => {\r\n setFilterLogic(newLogic)\r\n const newValue: TFieldValue = { values: value.values, logic: newLogic }\r\n handleSubmit(newValue)\r\n }\r\n\r\n const handleClearAll = () => {\r\n props.onRemoveField?.(config.field)\r\n }\r\n\r\n const renderAfterTitle = () => {\r\n if (config.singleValue) return <ChipDark sx={{ ml: 1.5 }} size='small' label='Last value only' />\r\n if (!value.values || value.values.length < 2) return null\r\n return <FilterLogicToggle sx={{ ml: 1 }} value={filterLogic} onChange={(_, nVal) => handleChandeLogic(nVal)} />\r\n }\r\n\r\n const rootClasse: string[] = []\r\n if (props.isLoading) rootClasse.push('disabled')\r\n\r\n return (\r\n <FormCustom className={rootClasse.join(' ')} onSubmit={handleSubmitForm} noValidate>\r\n <PopperContent\r\n title={`Filter by ${label}`}\r\n onClose={props.onClose}\r\n slots={{\r\n beforeTitle: <ButtonBack size='small' onClick={props.onBack} />,\r\n afterTitle: renderAfterTitle()\r\n }}\r\n >\r\n <PopperBody>\r\n <ChipViewers.Group\r\n sx={{ mb: 1, borderBottom: 'none!important' }}\r\n label='Applied'\r\n placement='horizontal'\r\n enableMinimalesticView\r\n value={filterViewerValue}\r\n onRemove={props.onRemove}\r\n />\r\n <TextField\r\n inputRef={refInput}\r\n autoFocus\r\n name={config.field.toString()}\r\n size='small'\r\n fullWidth\r\n placeholder='Enter value'\r\n error={error.error}\r\n helperText={error.message}\r\n sx={{ '.MuiInputBase-root': { minHeight: '42px' } }}\r\n />\r\n </PopperBody>\r\n <PopperFooter>\r\n <Button\r\n size='small'\r\n color='error'\r\n variant='text'\r\n name='action'\r\n value='clear'\r\n disabled={!value.values || value.values.length === 0}\r\n onClick={handleClearAll}\r\n >\r\n Clear All\r\n </Button>\r\n <Box sx={{ flex: 1 }} />\r\n <Button size='small' color='inherit' variant='text' name='action' value='cancel' onClick={props.onClose}>\r\n Cancel\r\n </Button>\r\n <Button size='small' type='submit' color='primary' variant='contained' name='action' value='ok'>\r\n Apply\r\n </Button>\r\n </PopperFooter>\r\n </PopperContent>\r\n </FormCustom>\r\n )\r\n }\r\n\r\n return FormFieldString\r\n}\r\n\r\nconst FormCustom = styled('form')({\r\n position: 'relative',\r\n '&::after': {\r\n content: '\"\"',\r\n display: 'block',\r\n position: 'absolute',\r\n inset: 0, // top: 0, left: 0, right: 0, bottom: 0\r\n backgroundColor: 'rgba(0, 0, 0, 0.2)',\r\n filter: 'blur(2px)',\r\n zIndex: -1,\r\n opacity: 0,\r\n transition: 'opacity 0.3s',\r\n visibility: 'hidden'\r\n },\r\n '&.disabled': {\r\n pointerEvents: 'none',\r\n '&::after': {\r\n zIndex: 1,\r\n opacity: 1,\r\n visibility: 'visible'\r\n }\r\n }\r\n})\r\n"],"names":["FilterMenuNoField","_ref","onClose","_jsx","PopperContent","title","Typography","variant","sx","p","textAlign","children","ButtonBack","styled","_ref2","props","_objectWithoutProperties","_excluded","Tooltip","placement","arrow","IconButton","_objectSpread","ChevronLeftIcon","fontSize","_ref3","theme","color","palette","common","white","transition","transitions","create","primary","light","backgroundColor","alpha","ChipDark","Chip","_ref4","mode","grey","border","concat","height","FilterLogicToggle","_jsxs","ToggleButtonGroupCustom","size","value","exclusive","onChange","event","newValue","ToggleButton","ToggleButtonGroup","borderColor","fontWeight","lineHeight","minWidth","padding","createFormFieldString","config","ChipViewers","createChipViewers","_config$label","refInput","createRef","_props$value","values","logic","_useState","useState","_useState2","_slicedToArray","filterLogic","setFilterLogic","label","field","toString","_useState3","_useState4","errorData","setErrorData","handleSubmit","onSubmit","error","getErrorMessage","filterViewerValue","useMemo","items","Array","isArray","map","v","rootClasse","isLoading","push","FormCustom","className","join","_props$validator","preventDefault","formData","FormData","currentTarget","obj","convertFormDataToJson","validator","run","Object","keys","length","newValues","current","blur","noValidate","slots","beforeTitle","onClick","onBack","afterTitle","singleValue","ml","_","nVal","newLogic","handleChandeLogic","PopperBody","Group","mb","borderBottom","enableMinimalesticView","onRemove","TextField","inputRef","autoFocus","name","fullWidth","placeholder","helperText","message","minHeight","PopperFooter","Button","disabled","_props$onRemoveField","onRemoveField","call","Box","flex","type","position","content","display","inset","filter","zIndex","opacity","visibility","pointerEvents"],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { FC } from 'react';
|
|
2
|
-
import type { ToggleButtonGroupProps } from '@mui/material';
|
|
3
|
-
import type { IFieldMenuConfig, IFilterMenuFormProps } from './filter-menu.types';
|
|
4
|
-
import type { TLogic } from '../types';
|
|
5
|
-
interface IFilterMenuNoFieldProps {
|
|
6
|
-
onClose: () => void;
|
|
7
|
-
}
|
|
8
|
-
export declare const FilterMenuNoField: FC<IFilterMenuNoFieldProps>;
|
|
9
|
-
export interface FilterLogicToggleProps {
|
|
10
|
-
value?: TLogic;
|
|
11
|
-
onChange?: (event: React.MouseEvent<HTMLElement>, value: TLogic) => void;
|
|
12
|
-
sx?: ToggleButtonGroupProps['sx'];
|
|
13
|
-
}
|
|
14
|
-
export declare const FilterLogicToggle: FC<FilterLogicToggleProps>;
|
|
15
|
-
export interface IFormFieldStringProps<T> extends IFilterMenuFormProps<T> {
|
|
16
|
-
}
|
|
17
|
-
export declare function createFormFieldString<T>(config: IFieldMenuConfig<T>): FC<IFormFieldStringProps<T>>;
|
|
18
|
-
export {};
|
|
File without changes
|