dinocollab-core 2.2.0 → 2.2.1
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/bin/codegen.js +0 -0
- 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-menu.js +1 -1
- package/dist/src/filter-bar/components/filter-menu.js.map +1 -1
- package/dist/src/filter-bar/components/filter-menu.units.js +1 -1
- package/dist/src/filter-bar/components/filter-menu.units.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/hooks.js +1 -1
- package/dist/src/filter-bar/components/hooks.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/convert-to-graphql.js +1 -1
- package/dist/src/filter-bar/convert-to-graphql.js.map +1 -1
- package/dist/src/filter-bar/index.context.js +1 -1
- package/dist/src/filter-bar/index.context.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/form/create.form-base.js +1 -1
- package/dist/src/utils/helpers.js +1 -1
- package/dist/types/filter-bar/components/filter-menu.d.ts +1 -0
- package/dist/types/filter-bar/components/filter-menu.types.d.ts +2 -0
- package/dist/types/filter-bar/components/filter-sort.d.ts +1 -0
- package/dist/types/filter-bar/components/hooks.d.ts +1 -1
- package/dist/types/filter-bar/index.context.d.ts +1 -0
- package/dist/types/filter-bar/index.create.d.ts +10 -8
- package/dist/types/lab/data-surface/index.create.d.ts +18 -0
- package/dist/types/lab/data-surface/index.d.ts +1 -0
- package/dist/types/lab/data-surface/index.dino.d.ts +7 -0
- package/dist/types/lab/data-surface/types.d.ts +27 -0
- package/dist/types/lab/data-surface/view-grid.d.ts +40 -0
- package/dist/types/lab/data-surface/view-grid.types.d.ts +22 -0
- package/dist/types/lab/data-surface/view-grid.units.d.ts +11 -0
- package/dist/types/lab/data-surface/view-switch-transition.d.ts +24 -0
- package/dist/types/lab/data-surface/view-switch-transition.units.d.ts +71 -0
- package/dist/types/lab/data-viewer/index.d.ts +1 -0
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sources":["../../../../src/filter-bar/components/hooks.ts"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// types\r\nimport type { IFilterBarContext } from '../index.context'\r\nimport type { TFieldSort, TFieldStore, TFieldType, TFieldValid, TFieldValue, TLogic } from '../types'\r\n\r\ntype TOptions = {\r\n logic?: TLogic\r\n}\r\n\r\n/**\r\n * Check if a given filter value already exists in the store for a specific field.\r\n * @param storeFilter - The current filter store.\r\n * @param field - The field to check for duplicate values.\r\n * @param value - The filter value to check for duplicates.\r\n * @returns True if a duplicate value exists, false otherwise.\r\n */\r\nconst checkDuplicateValue = <T>(storeFilter: TFieldStore<T> | undefined, field: keyof TFieldStore<T>, value: TFieldValue): boolean => {\r\n // If there is no filter store or no filter values for the field, there can be no duplicates\r\n if (!storeFilter) return false\r\n const fieldValue = storeFilter[field]\r\n // If there are no filter values for the field, there can be no duplicates\r\n if (!fieldValue) return false\r\n // Create a set of existing values for the field to efficiently check for duplicates\r\n const fieldSet = new Set(fieldValue.values.map((v) => JSON.stringify(v)).filter(Boolean))\r\n return value.values.some((v) => fieldSet.has(JSON.stringify(v)))\r\n}\r\n/**\r\n * Merge a filter value into the store for a specific field.\r\n * @param storeFilter - The current filter store.\r\n * @param field - The field to merge the value into.\r\n * @param value - The filter value to merge.\r\n * @returns The updated filter store.\r\n */\r\nconst mergeValueToStoreFilter = <T>(storeFilter: TFieldStore<T> | undefined, field: keyof TFieldStore<T>, value: TFieldValue): TFieldStore<T> => {\r\n const fieldValue: TFieldValue | undefined = storeFilter?.[field]\r\n const values = Array.from(new Set([...(fieldValue?.values || []), ...value.values].filter(Boolean)))\r\n const newData: TFieldValue = { values, logic: value.logic || fieldValue?.logic }\r\n return Object.assign({}, storeFilter, { [field]: newData }) as TFieldStore<T>\r\n}\r\n\r\nexport const useFilterActions = <T>(context: IFilterBarContext<T>) => {\r\n /**\r\n * Add a filter value to the store for a specific field.\r\n * @param field - The field to add the filter value to.\r\n * @param value - The filter value to add.\r\n * @returns void\r\n */\r\n const addFilter = (field: keyof TFieldStore<T>, value: TFieldValue, options?: TOptions) => {\r\n // Check for duplicate value before adding\r\n const { storeFilter } = context.filterState\r\n const valueObj: TFieldValue = { ...value, logic: options?.logic || value.logic }\r\n // If the value already exists in the store for the field, do not add it again\r\n if (checkDuplicateValue(storeFilter, field, valueObj)) return\r\n // Merge the new value into the store filter for the field\r\n const newData = mergeValueToStoreFilter(storeFilter, field, valueObj)\r\n const newStoreFilter = Object.assign({}, storeFilter, newData)\r\n context.setFilterState({ ...context.filterState, storeFilter: newStoreFilter })\r\n }\r\n /**\r\n * Replace all filter values for a specific field in the store with a new value.\r\n * Value will be replaced instead of merged, which is useful for single-value filters or when you want to reset the filter values for a field.\r\n * @param field - The field to update the filter value for.\r\n * @param value - The new filter value to set.\r\n */\r\n const replaceFilter = (field: keyof TFieldStore<T>, value: TFieldValue, options?: TOptions) => {\r\n const valueObj: TFieldValue = { ...value, logic: options?.logic || value.logic }\r\n const newStoreFilter = Object.assign({}, context.filterState.storeFilter, { [field]: valueObj })\r\n context.setFilterState({ ...context.filterState, storeFilter: newStoreFilter as TFieldStore<T> })\r\n }\r\n /**\r\n * Add multiple filter values to the store for a specific field, ensuring no duplicates are added.\r\n * @param field - The field to add the filter values to.\r\n * @param values - The filter values to add.\r\n * @returns void\r\n */\r\n const upsertManyFilter = (field: keyof TFieldStore<T>, value: TFieldValue, options?: TOptions) => {\r\n // If there are no values to add, return early\r\n if (value.values.length === 0) return\r\n let newStoreFilter = Object.assign({}, context.filterState.storeFilter)\r\n // Iterate through each value and add it to the store filter for the field, checking for duplicates\r\n value.values.forEach((val) => {\r\n const valueObj: TFieldValue = { values: [val], logic: options?.logic || value.logic }\r\n if (checkDuplicateValue(newStoreFilter, field, valueObj)) return\r\n newStoreFilter = mergeValueToStoreFilter(newStoreFilter, field, valueObj)\r\n })\r\n // Update the filter state with the new store filter after adding all values\r\n context.setFilterState({ ...context.filterState, storeFilter: newStoreFilter })\r\n }\r\n /**\r\n * Remove all filter values for a specific field from the store.\r\n * @param field - The field to remove filters from.\r\n * @returns void\r\n */\r\n const removeFilter = (field: TFieldType<T>) => {\r\n const newStoreFilter = Object.assign({}, context.filterState.storeFilter)\r\n delete newStoreFilter[field]\r\n context.setFilterState({ ...context.filterState, storeFilter: newStoreFilter })\r\n }\r\n\r\n const removeFilterByFieldValue = (field: TFieldType<T>, value: TFieldValid) => {\r\n const newStoreFilter = Object.assign({}, context.filterState.storeFilter)\r\n const fieldVal: TFieldValue | undefined = newStoreFilter[field]\r\n if (!fieldVal) return\r\n newStoreFilter[field] = { ...fieldVal, values: fieldVal.values.filter((v) => v.toString() !== value.toString()) }\r\n if (newStoreFilter[field] && newStoreFilter[field]!.values.length === 0) {\r\n delete newStoreFilter[field]\r\n }\r\n context.setFilterState({ ...context.filterState, storeFilter: newStoreFilter })\r\n }\r\n\r\n const clearAllFilters = () => {\r\n context.setFilterState({ ...context.filterState, storeFilter: {} as TFieldStore<T> })\r\n }\r\n\r\n const getCountByField = (field: TFieldType<T>): number => {\r\n const fieldVal = context.filterState.storeFilter?.[field]\r\n return fieldVal ? fieldVal.values.length : 0\r\n }\r\n\r\n const getTotalCount = (): number => {\r\n const storeFilter = context.filterState.storeFilter\r\n if (!storeFilter) return 0\r\n const keys = Object.keys(storeFilter) as (keyof TFieldStore<T>)[]\r\n return keys.reduce((acc, key) => {\r\n const fieldVal = storeFilter[key]\r\n return acc + (fieldVal ? fieldVal.values.length : 0)\r\n }, 0)\r\n }\r\n\r\n const hasSortByField = (field: TFieldType<T>): boolean => {\r\n const sort = context.filterState.storeSort\r\n return sort?.field === field\r\n }\r\n\r\n const getSort = (): TFieldSort<T> | undefined => {\r\n return context.filterState.storeSort\r\n }\r\n\r\n const changeSort = (field: TFieldType<T>) => {\r\n const currentSort = context.filterState.storeSort\r\n let newDirection: 'asc' | 'desc' = 'desc'\r\n if (currentSort?.field === field) {\r\n newDirection = currentSort.direction === 'desc' ? 'asc' : 'desc'\r\n }\r\n const newSort = { field, direction: newDirection }\r\n context.setFilterState({ ...context.filterState, storeSort: newSort })\r\n }\r\n\r\n const removeSort = () => {\r\n context.setFilterState({ ...context.filterState, storeSort: undefined })\r\n }\r\n\r\n return {\r\n addFilter,\r\n replaceFilter,\r\n upsertManyFilter,\r\n removeFilter,\r\n removeFilterByFieldValue,\r\n clearAllFilters,\r\n getCountByField,\r\n getTotalCount,\r\n hasSortByField,\r\n getSort,\r\n changeSort,\r\n removeSort\r\n }\r\n}\r\n"],"names":["checkDuplicateValue","storeFilter","field","value","fieldValue","fieldSet","Set","values","map","v","JSON","stringify","filter","Boolean","some","has","mergeValueToStoreFilter","newData","Array","from","concat","_toConsumableArray","logic","Object","assign","_defineProperty","useFilterActions","context","addFilter","options","filterState","valueObj","_objectSpread","newStoreFilter","setFilterState","replaceFilter","upsertManyFilter","length","forEach","val","removeFilter","removeFilterByFieldValue","fieldVal","toString","clearAllFilters","getCountByField","_context$filterState$","getTotalCount","keys","reduce","acc","key","hasSortByField","sort","storeSort","getSort","changeSort","currentSort","newDirection","direction","newSort","removeSort","undefined"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hooks.js","sources":["../../../../src/filter-bar/components/hooks.ts"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// types\r\nimport { useState } from 'react'\r\nimport type { IFilterBarContext } from '../index.context'\r\nimport type { TFieldSort, TFieldStore, TFieldType, TFieldValid, TFieldValue, TLogic } from '../types'\r\n\r\ntype TOptions = {\r\n logic?: TLogic\r\n}\r\n\r\n/**\r\n * Check if a given filter value already exists in the store for a specific field.\r\n * @param storeFilter - The current filter store.\r\n * @param field - The field to check for duplicate values.\r\n * @param value - The filter value to check for duplicates.\r\n * @returns True if a duplicate value exists, false otherwise.\r\n */\r\nconst checkDuplicateValue = <T>(storeFilter: TFieldStore<T> | undefined, field: keyof TFieldStore<T>, value: TFieldValue): boolean => {\r\n // If there is no filter store or no filter values for the field, there can be no duplicates\r\n if (!storeFilter) return false\r\n const fieldValue = storeFilter[field]\r\n // If there are no filter values for the field, there can be no duplicates\r\n if (!fieldValue) return false\r\n const isLogicChange = value.logic !== fieldValue.logic\r\n // Create a set of existing values for the field to efficiently check for duplicates\r\n const fieldSet = new Set(fieldValue.values.map((v) => JSON.stringify(v)).filter(Boolean))\r\n return value.values.some((v) => fieldSet.has(JSON.stringify(v))) && !isLogicChange\r\n}\r\n/**\r\n * Merge a filter value into the store for a specific field.\r\n * @param storeFilter - The current filter store.\r\n * @param field - The field to merge the value into.\r\n * @param value - The filter value to merge.\r\n * @returns The updated filter store.\r\n */\r\nconst mergeValueToStoreFilter = <T>(storeFilter: TFieldStore<T> | undefined, field: keyof TFieldStore<T>, value: TFieldValue): TFieldStore<T> => {\r\n const fieldValue: TFieldValue | undefined = storeFilter?.[field]\r\n const values = Array.from(new Set([...(fieldValue?.values || []), ...value.values].filter(Boolean)))\r\n const newData: TFieldValue = { values, logic: value.logic || fieldValue?.logic }\r\n return Object.assign({}, storeFilter, { [field]: newData }) as TFieldStore<T>\r\n}\r\n\r\nexport const useFilterActions = <T>(context: IFilterBarContext<T>) => {\r\n /**\r\n * Add a filter value to the store for a specific field.\r\n * @param field - The field to add the filter value to.\r\n * @param value - The filter value to add.\r\n * @returns void\r\n */\r\n const addFilter = (field: keyof TFieldStore<T>, value: TFieldValue, options?: TOptions) => {\r\n // Check for duplicate value before adding\r\n const { storeFilter } = context.filterState\r\n const valueObj: TFieldValue = { ...value, logic: options?.logic || value.logic }\r\n // If the value already exists in the store for the field, do not add it again\r\n if (checkDuplicateValue(storeFilter, field, valueObj)) return\r\n // Merge the new value into the store filter for the field\r\n const newData = mergeValueToStoreFilter(storeFilter, field, valueObj)\r\n const newStoreFilter = Object.assign({}, storeFilter, newData)\r\n context.setFilterState({ ...context.filterState, storeFilter: newStoreFilter })\r\n }\r\n /**\r\n * Replace all filter values for a specific field in the store with a new value.\r\n * Value will be replaced instead of merged, which is useful for single-value filters or when you want to reset the filter values for a field.\r\n * @param field - The field to update the filter value for.\r\n * @param value - The new filter value to set.\r\n */\r\n const replaceFilter = (field: keyof TFieldStore<T>, value: TFieldValue, options?: TOptions) => {\r\n const valueObj: TFieldValue = { ...value, logic: options?.logic || value.logic }\r\n const newStoreFilter = Object.assign({}, context.filterState.storeFilter, { [field]: valueObj })\r\n context.setFilterState({ ...context.filterState, storeFilter: newStoreFilter as TFieldStore<T> })\r\n }\r\n /**\r\n * Add multiple filter values to the store for a specific field, ensuring no duplicates are added.\r\n * @param field - The field to add the filter values to.\r\n * @param values - The filter values to add.\r\n * @returns void\r\n */\r\n const upsertManyFilter = (field: keyof TFieldStore<T>, value: TFieldValue, options?: TOptions) => {\r\n // If there are no values to add, return early\r\n if (value.values.length === 0) return\r\n let newStoreFilter = Object.assign({}, context.filterState.storeFilter)\r\n // Iterate through each value and add it to the store filter for the field, checking for duplicates\r\n value.values.forEach((val) => {\r\n const valueObj: TFieldValue = { values: [val], logic: options?.logic || value.logic }\r\n if (checkDuplicateValue(newStoreFilter, field, valueObj)) return\r\n newStoreFilter = mergeValueToStoreFilter(newStoreFilter, field, valueObj)\r\n })\r\n // Update the filter state with the new store filter after adding all values\r\n context.setFilterState({ ...context.filterState, storeFilter: newStoreFilter })\r\n }\r\n /**\r\n * Remove all filter values for a specific field from the store.\r\n * @param field - The field to remove filters from.\r\n * @returns void\r\n */\r\n const removeFilter = (field: TFieldType<T>) => {\r\n const newStoreFilter = Object.assign({}, context.filterState.storeFilter)\r\n delete newStoreFilter[field]\r\n context.setFilterState({ ...context.filterState, storeFilter: newStoreFilter })\r\n }\r\n\r\n const removeFilterByFieldValue = (field: TFieldType<T>, value: TFieldValid) => {\r\n const newStoreFilter = Object.assign({}, context.filterState.storeFilter)\r\n const fieldVal: TFieldValue | undefined = newStoreFilter[field]\r\n if (!fieldVal) return\r\n newStoreFilter[field] = { ...fieldVal, values: fieldVal.values.filter((v) => v.toString() !== value.toString()) }\r\n if (newStoreFilter[field] && newStoreFilter[field]!.values.length === 0) {\r\n delete newStoreFilter[field]\r\n }\r\n context.setFilterState({ ...context.filterState, storeFilter: newStoreFilter })\r\n }\r\n\r\n const clearAllFilters = () => {\r\n context.setFilterState({ ...context.filterState, storeFilter: {} as TFieldStore<T> })\r\n }\r\n\r\n const getFieldInfo = (field: TFieldType<T>): TFieldValue | undefined => {\r\n const fieldVal = context.filterState.storeFilter?.[field]\r\n return fieldVal\r\n }\r\n\r\n const getTotalCount = (): number => {\r\n const storeFilter = context.filterState.storeFilter\r\n if (!storeFilter) return 0\r\n const keys = Object.keys(storeFilter) as (keyof TFieldStore<T>)[]\r\n return keys.reduce((acc, key) => {\r\n const fieldVal = storeFilter[key]\r\n return acc + (fieldVal ? fieldVal.values.length : 0)\r\n }, 0)\r\n }\r\n\r\n const hasSortByField = (field: TFieldType<T>): boolean => {\r\n const sort = context.filterState.storeSort\r\n return sort?.field === field\r\n }\r\n\r\n const getSort = (): TFieldSort<T> | undefined => {\r\n return context.filterState.storeSort\r\n }\r\n\r\n const changeSort = (field: TFieldType<T>) => {\r\n const currentSort = context.filterState.storeSort\r\n let newDirection: 'asc' | 'desc' = 'desc'\r\n if (currentSort?.field === field) {\r\n newDirection = currentSort.direction === 'desc' ? 'asc' : 'desc'\r\n }\r\n const newSort = { field, direction: newDirection }\r\n context.setFilterState({ ...context.filterState, storeSort: newSort })\r\n }\r\n\r\n const removeSort = () => {\r\n context.setFilterState({ ...context.filterState, storeSort: undefined })\r\n }\r\n\r\n return {\r\n addFilter,\r\n replaceFilter,\r\n upsertManyFilter,\r\n removeFilter,\r\n removeFilterByFieldValue,\r\n clearAllFilters,\r\n getFieldInfo,\r\n getTotalCount,\r\n hasSortByField,\r\n getSort,\r\n changeSort,\r\n removeSort\r\n }\r\n}\r\n"],"names":["checkDuplicateValue","storeFilter","field","value","fieldValue","isLogicChange","logic","fieldSet","Set","values","map","v","JSON","stringify","filter","Boolean","some","has","mergeValueToStoreFilter","newData","Array","from","concat","_toConsumableArray","Object","assign","_defineProperty","useFilterActions","context","addFilter","options","filterState","valueObj","_objectSpread","newStoreFilter","setFilterState","replaceFilter","upsertManyFilter","length","forEach","val","removeFilter","removeFilterByFieldValue","fieldVal","toString","clearAllFilters","getFieldInfo","_context$filterState$","getTotalCount","keys","reduce","acc","key","hasSortByField","sort","storeSort","getSort","changeSort","currentSort","newDirection","direction","newSort","removeSort","undefined"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{objectWithoutProperties as e,objectSpread2 as t,defineProperty as o}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i,jsxs as
|
|
1
|
+
import{objectWithoutProperties as e,objectSpread2 as t,defineProperty as o}from"../../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i,jsxs as n}from"react/jsx-runtime";import{useMemo as r}from"react";import{styled as a,Popper as l,Fade as d,Box as s,alpha as c,Typography as p,Tooltip as u,IconButton as m}from"@mui/material";import h from"@mui/icons-material/Close";var b=["children"],g=["title","children","onClose","disableGutter","disableMinMaxWidth","slots"],f=a(function(o){var r=o.children,a=e(o,b);return i(l,t(t({},a),{},{children:function(e){var o=e.TransitionProps;return i(d,t(t({},o),{},{timeout:350,children:n("div",{children:[" ",r]})}))}}))})(function(e){return{zIndex:e.theme.zIndex.modal+1,maxWidth:"100%"}}),x=function(o){var a=r(function(){return M},[]),l=o.title,d=o.children,s=o.onClose,c=o.disableGutter,b=o.disableMinMaxWidth,f=o.slots,x=e(o,g),v=[a.root];return c&&v.push(a.disableGutter),b&&v.push(a.disableMinMaxWidth),n(W,t(t({className:v.join(" ")},x),{},{children:[n("div",{className:a.header,children:[null==f?void 0:f.beforeTitle,i(p,{variant:"subtitle1",className:a.title,children:l||"Menu Title"}),null==f?void 0:f.afterTitle,i(u,{title:"Close",placement:"top",arrow:!0,children:i(m,{size:"small",className:a.buttonClose,onClick:s,children:i(h,{fontSize:"small"})})})]}),d]}))},v=function(e){var t=e.children;return i("div",{className:M.footer,children:t})},C=function(e){var t=e.children;return i("div",{className:M.body,children:t})},M={root:"DinoPopperCustom-root",body:"DinoPopperCustom-body",header:"DinoPopperCustom-header",footer:"DinoPopperCustom-footer",title:"DinoPopperCustom-title",buttonClose:"DinoPopperCustom-buttonClose",disableGutter:"DinoPopperCustom-disableGutter",disableMinMaxWidth:"DinoPopperCustom-disableMinMaxWidth"},W=a(s)(function(e){var t=e.theme;return o(o(o(o(o(o(o({},"&.".concat(M.root),o({borderRadius:t.shape.borderRadius,boxShadow:"rgba(0, 0, 0, 0.06) 0px 5px 22px, rgba(0, 0, 0, 0.04) 0px 0px 0px 0.5px",backgroundColor:t.palette.background.paper,overflow:"hidden"},"&:not(.".concat(M.disableMinMaxWidth,")"),o({minWidth:"350px",maxWidth:"550px"},t.breakpoints.down("sm"),{minWidth:"240px",maxWidth:"90vw"}))),".".concat(M.body),{padding:t.spacing(1),maxHeight:"70vh",overflow:"auto"}),".".concat(M.header),{display:"flex",alignItems:"center",justifyContent:"space-between",gap:t.spacing(.5),backgroundColor:t.palette.grey[900],padding:t.spacing(.5,1),color:t.palette.common.white}),".".concat(M.title),{fontSize:"0.875rem",fontWeight:600,lineHeight:1,flexGrow:1}),".".concat(M.buttonClose),{color:t.palette.common.white,transition:t.transitions.create("color"),".MuiSvgIcon-root":{transition:t.transitions.create("transform")},"&:hover":{color:t.palette.error.light,backgroundColor:c(t.palette.common.white,.1),".MuiSvgIcon-root":{transform:"rotate(90deg)"}}}),".".concat(M.footer),o({display:"flex",justifyContent:"flex-end",gap:t.spacing(1),borderTop:"1px solid ".concat(t.palette.grey[100]),padding:t.spacing(.5,1)},".MuiButtonBase-root",{textTransform:"none",fontWeight:500,lineHeight:1,padding:t.spacing(1,1.5)})),"&.".concat(M.disableGutter),o(o(o({},".".concat(M.body),{padding:0}),".".concat(M.header),{padding:t.spacing(.5,1)}),".".concat(M.footer),{padding:t.spacing(.5,1.5),margin:t.spacing(1,1,0)}))});export{C as PopperBody,x as PopperContent,f as PopperCustom,v as PopperFooter};
|
|
2
2
|
//# sourceMappingURL=popper-custom.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popper-custom.js","sources":["../../../../src/filter-bar/components/popper-custom.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useMemo, useState } from 'react'\r\nimport { alpha, Box, Fade, IconButton, Popper, styled, Tooltip, Typography } from '@mui/material'\r\nimport CloseIcon from '@mui/icons-material/Close'\r\n// types\r\nimport type { FC, PropsWithChildren } from 'react'\r\nimport type { BoxProps, ButtonProps, PopperProps } from '@mui/material'\r\n\r\nexport const usePopperState = () => {\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\r\n const isOpen = Boolean(anchorEl)\r\n\r\n const handleToggle: React.MouseEventHandler<HTMLElement> = (event) => {\r\n setAnchorEl((prev) => (prev ? null : event.currentTarget))\r\n }\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null)\r\n }\r\n\r\n return { anchorEl, isOpen, handleToggle, handleClose }\r\n}\r\n\r\ninterface IPopperProps extends Omit<PopperProps, 'children'>, PropsWithChildren {}\r\n\r\nexport const PopperCustom = styled(({ children, ...props }: IPopperProps) => (\r\n <Popper {...props}>\r\n {({ TransitionProps }) => (\r\n <Fade {...TransitionProps} timeout={350}>\r\n <div> {children}</div>\r\n </Fade>\r\n )}\r\n </Popper>\r\n))(({ theme }) => ({\r\n zIndex: theme.zIndex.modal + 1,\r\n maxWidth: '100%'\r\n}))\r\n\r\nexport interface PopperContentProps extends BoxProps {\r\n sx?: BoxProps['sx']\r\n title?: string\r\n children: React.ReactNode\r\n onClose?: ButtonProps['onClick']\r\n disableGutter?: boolean\r\n disableMinMaxWidth?: boolean\r\n slots?: {\r\n afterTitle?: React.ReactNode\r\n beforeTitle?: React.ReactNode\r\n }\r\n}\r\n\r\nexport const PopperContent: FC<PopperContentProps> = (props) => {\r\n const classes = useMemo(() => popperCustomClasses, [])\r\n const { title, children, onClose, disableGutter, disableMinMaxWidth, slots, ...rest } = props\r\n\r\n const rootClasses = [classes.root]\r\n if (disableGutter) rootClasses.push(classes.disableGutter)\r\n if (disableMinMaxWidth) rootClasses.push(classes.disableMinMaxWidth)\r\n\r\n return (\r\n <PopperContentStyled className={rootClasses.join(' ')} {...rest}>\r\n <div className={classes.header}>\r\n {slots?.beforeTitle}\r\n <Typography variant='subtitle1' className={classes.title}>\r\n {title || 'Menu Title'}\r\n </Typography>\r\n {slots?.afterTitle}\r\n <Tooltip title='Close' placement='top' arrow>\r\n <IconButton size='small' className={classes.buttonClose} onClick={onClose}>\r\n <CloseIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n </div>\r\n {children}\r\n </PopperContentStyled>\r\n )\r\n}\r\n\r\nexport const PopperFooter: FC<Required<PropsWithChildren>> = ({ children }) => {\r\n return <div className={popperCustomClasses.footer}>{children}</div>\r\n}\r\n\r\nexport const PopperBody: FC<Required<PropsWithChildren>> = ({ children }) => {\r\n return <div className={popperCustomClasses.body}>{children}</div>\r\n}\r\n\r\nconst popperCustomClasses = {\r\n root: 'DinoPopperCustom-root',\r\n body: 'DinoPopperCustom-body',\r\n header: 'DinoPopperCustom-header',\r\n footer: 'DinoPopperCustom-footer',\r\n title: 'DinoPopperCustom-title',\r\n buttonClose: 'DinoPopperCustom-buttonClose',\r\n disableGutter: 'DinoPopperCustom-disableGutter',\r\n disableMinMaxWidth: 'DinoPopperCustom-disableMinMaxWidth'\r\n}\r\n\r\nconst PopperContentStyled = styled(Box)(({ theme }) => ({\r\n [`&.${popperCustomClasses.root}`]: {\r\n borderRadius: theme.shape.borderRadius,\r\n boxShadow: 'rgba(0, 0, 0, 0.06) 0px 5px 22px, rgba(0, 0, 0, 0.04) 0px 0px 0px 0.5px',\r\n backgroundColor: theme.palette.background.paper,\r\n overflow: 'hidden',\r\n [`&:not(.${popperCustomClasses.disableMinMaxWidth})`]: {\r\n minWidth: '
|
|
1
|
+
{"version":3,"file":"popper-custom.js","sources":["../../../../src/filter-bar/components/popper-custom.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { useMemo, useState } from 'react'\r\nimport { alpha, Box, Fade, IconButton, Popper, styled, Tooltip, Typography } from '@mui/material'\r\nimport CloseIcon from '@mui/icons-material/Close'\r\n// types\r\nimport type { FC, PropsWithChildren } from 'react'\r\nimport type { BoxProps, ButtonProps, PopperProps } from '@mui/material'\r\n\r\nexport const usePopperState = () => {\r\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null)\r\n const isOpen = Boolean(anchorEl)\r\n\r\n const handleToggle: React.MouseEventHandler<HTMLElement> = (event) => {\r\n setAnchorEl((prev) => (prev ? null : event.currentTarget))\r\n }\r\n\r\n const handleClose = () => {\r\n setAnchorEl(null)\r\n }\r\n\r\n return { anchorEl, isOpen, handleToggle, handleClose }\r\n}\r\n\r\ninterface IPopperProps extends Omit<PopperProps, 'children'>, PropsWithChildren {}\r\n\r\nexport const PopperCustom = styled(({ children, ...props }: IPopperProps) => (\r\n <Popper {...props}>\r\n {({ TransitionProps }) => (\r\n <Fade {...TransitionProps} timeout={350}>\r\n <div> {children}</div>\r\n </Fade>\r\n )}\r\n </Popper>\r\n))(({ theme }) => ({\r\n zIndex: theme.zIndex.modal + 1,\r\n maxWidth: '100%'\r\n}))\r\n\r\nexport interface PopperContentProps extends BoxProps {\r\n sx?: BoxProps['sx']\r\n title?: string\r\n children: React.ReactNode\r\n onClose?: ButtonProps['onClick']\r\n disableGutter?: boolean\r\n disableMinMaxWidth?: boolean\r\n slots?: {\r\n afterTitle?: React.ReactNode\r\n beforeTitle?: React.ReactNode\r\n }\r\n}\r\n\r\nexport const PopperContent: FC<PopperContentProps> = (props) => {\r\n const classes = useMemo(() => popperCustomClasses, [])\r\n const { title, children, onClose, disableGutter, disableMinMaxWidth, slots, ...rest } = props\r\n\r\n const rootClasses = [classes.root]\r\n if (disableGutter) rootClasses.push(classes.disableGutter)\r\n if (disableMinMaxWidth) rootClasses.push(classes.disableMinMaxWidth)\r\n\r\n return (\r\n <PopperContentStyled className={rootClasses.join(' ')} {...rest}>\r\n <div className={classes.header}>\r\n {slots?.beforeTitle}\r\n <Typography variant='subtitle1' className={classes.title}>\r\n {title || 'Menu Title'}\r\n </Typography>\r\n {slots?.afterTitle}\r\n <Tooltip title='Close' placement='top' arrow>\r\n <IconButton size='small' className={classes.buttonClose} onClick={onClose}>\r\n <CloseIcon fontSize='small' />\r\n </IconButton>\r\n </Tooltip>\r\n </div>\r\n {children}\r\n </PopperContentStyled>\r\n )\r\n}\r\n\r\nexport const PopperFooter: FC<Required<PropsWithChildren>> = ({ children }) => {\r\n return <div className={popperCustomClasses.footer}>{children}</div>\r\n}\r\n\r\nexport const PopperBody: FC<Required<PropsWithChildren>> = ({ children }) => {\r\n return <div className={popperCustomClasses.body}>{children}</div>\r\n}\r\n\r\nconst popperCustomClasses = {\r\n root: 'DinoPopperCustom-root',\r\n body: 'DinoPopperCustom-body',\r\n header: 'DinoPopperCustom-header',\r\n footer: 'DinoPopperCustom-footer',\r\n title: 'DinoPopperCustom-title',\r\n buttonClose: 'DinoPopperCustom-buttonClose',\r\n disableGutter: 'DinoPopperCustom-disableGutter',\r\n disableMinMaxWidth: 'DinoPopperCustom-disableMinMaxWidth'\r\n}\r\n\r\nconst PopperContentStyled = styled(Box)(({ theme }) => ({\r\n [`&.${popperCustomClasses.root}`]: {\r\n borderRadius: theme.shape.borderRadius,\r\n boxShadow: 'rgba(0, 0, 0, 0.06) 0px 5px 22px, rgba(0, 0, 0, 0.04) 0px 0px 0px 0.5px',\r\n backgroundColor: theme.palette.background.paper,\r\n overflow: 'hidden',\r\n [`&:not(.${popperCustomClasses.disableMinMaxWidth})`]: {\r\n minWidth: '350px',\r\n maxWidth: '550px',\r\n [theme.breakpoints.down('sm')]: {\r\n minWidth: '240px',\r\n maxWidth: '90vw'\r\n }\r\n }\r\n },\r\n [`.${popperCustomClasses.body}`]: {\r\n padding: theme.spacing(1),\r\n maxHeight: '70vh',\r\n overflow: 'auto'\r\n },\r\n [`.${popperCustomClasses.header}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'space-between',\r\n gap: theme.spacing(0.5),\r\n backgroundColor: theme.palette.grey[900],\r\n padding: theme.spacing(0.5, 1),\r\n color: theme.palette.common.white\r\n },\r\n [`.${popperCustomClasses.title}`]: {\r\n fontSize: '0.875rem',\r\n fontWeight: 600,\r\n lineHeight: 1,\r\n flexGrow: 1\r\n },\r\n [`.${popperCustomClasses.buttonClose}`]: {\r\n color: theme.palette.common.white,\r\n transition: theme.transitions.create('color'),\r\n '.MuiSvgIcon-root': { transition: theme.transitions.create('transform') },\r\n '&:hover': {\r\n color: theme.palette.error.light,\r\n backgroundColor: alpha(theme.palette.common.white, 0.1),\r\n '.MuiSvgIcon-root': { transform: 'rotate(90deg)' }\r\n }\r\n },\r\n [`.${popperCustomClasses.footer}`]: {\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n gap: theme.spacing(1),\r\n borderTop: `1px solid ${theme.palette.grey[100]}`,\r\n padding: theme.spacing(0.5, 1),\r\n [`.MuiButtonBase-root`]: {\r\n textTransform: 'none',\r\n fontWeight: 500,\r\n lineHeight: 1,\r\n padding: theme.spacing(1, 1.5)\r\n }\r\n },\r\n [`&.${popperCustomClasses.disableGutter}`]: {\r\n [`.${popperCustomClasses.body}`]: { padding: 0 },\r\n [`.${popperCustomClasses.header}`]: { padding: theme.spacing(0.5, 1) },\r\n [`.${popperCustomClasses.footer}`]: { padding: theme.spacing(0.5, 1.5), margin: theme.spacing(1, 1, 0) }\r\n }\r\n}))\r\n"],"names":["PopperCustom","styled","_ref","children","props","_objectWithoutProperties","_excluded","_jsx","Popper","_objectSpread","_ref2","TransitionProps","Fade","timeout","_jsxs","_ref3","zIndex","theme","modal","maxWidth","PopperContent","classes","useMemo","popperCustomClasses","title","onClose","disableGutter","disableMinMaxWidth","slots","rest","_excluded2","rootClasses","root","push","PopperContentStyled","className","join","header","beforeTitle","Typography","variant","afterTitle","Tooltip","placement","arrow","IconButton","size","buttonClose","onClick","CloseIcon","fontSize","PopperFooter","_ref4","footer","PopperBody","_ref5","body","Box","_ref6","_defineProperty","concat","borderRadius","shape","boxShadow","backgroundColor","palette","background","paper","overflow","minWidth","breakpoints","down","padding","spacing","maxHeight","display","alignItems","justifyContent","gap","grey","color","common","white","fontWeight","lineHeight","flexGrow","transition","transitions","create","error","light","alpha","transform","borderTop","textTransform","margin"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createClass as t,classCallCheck as r,defineProperty as e}from"../../_virtual/_rollupPluginBabelHelpers.js";import{createRequestBuilder as i}from"../http-service/graphql/request-param.js";var l=function(t){return"or"===t?"Or":"And"},o=function(t){return"asc"===t?"ASC":"DESC"},
|
|
1
|
+
import{createClass as t,classCallCheck as r,defineProperty as e}from"../../_virtual/_rollupPluginBabelHelpers.js";import{createRequestBuilder as i}from"../http-service/graphql/request-param.js";var l=function(t){return"or"===t?"Or":"And"},o=function(t){return"asc"===t?"ASC":"DESC"},a=function(){return t(function t(l){var o=this;r(this,t),e(this,"graphqlBuilder",i({ignoreEmpty:!0})),e(this,"autoMap",function(t){(o.currentObjectMap=t,o.state.storeFilter)&&Object.keys(o.state.storeFilter).forEach(function(r){var e,i=t[r],l=null===(e=o.state.storeFilter)||void 0===e?void 0:e[r];if(i){var a=i.targetfield,n=i.operation;if(i.custom)return void i.custom(o.graphqlBuilder,l,o.state.storeFilter);"equal"===n?o.fillterEqual(r,a):"contains"===n&&o.fillterContains(r,a)}});if(o.state.storeSort){var r,e=o.state.storeSort.field;o.sort(e,null===(r=t[e])||void 0===r?void 0:r.targetfield)}return o}),e(this,"prebuild",function(t){return o.prebuildFunc=t,o}),this.state=l},[{key:"filterScope",value:function(t,r){var e=this;if(this.state.storeFilter){var i=(null==r?void 0:r.logic)||this.state.filterLogic||"and",o=l(i);this.graphqlBuilder.scope(function(r){return t(r,e.state.storeFilter),r},{logic:o})}return this}},{key:"fillterEqual",value:function(t,r,e){var i,o,a=null!==(i=null===(o=this.state.storeFilter)||void 0===o?void 0:o[t])&&void 0!==i?i:{values:[]},n=Array.isArray(a.values)?a.values:[a.values];if(!n||n.length<1||!r)return this;var s=l(a.logic);return this.filterScope(function(t,e){for(var i=0;i<n.length;i++){var l=n[i];"string"==typeof l?t.filter(r,l,{logic:s}):("number"==typeof l||"boolean"==typeof l)&&t.filter(r,l.toString(),{logic:s})}},e),this}},{key:"fillterContains",value:function(t,r,e){var i,o,a=null!==(i=null===(o=this.state.storeFilter)||void 0===o?void 0:o[t])&&void 0!==i?i:{values:[]},n=Array.isArray(a.values)?a.values:[a.values];if(!n||n.length<1||!r)return this;var s=l(a.logic);return this.filterScope(function(t){for(var e=0;e<n.length;e++){var i=n[e];"string"==typeof i?t.filterContains(r,i,{logic:s}):("number"==typeof i||"boolean"==typeof i)&&t.filter(r,i.toString(),{logic:s})}},e),this}},{key:"sort",value:function(t,r){var e=this.state.storeSort;return r&&e&&e.field===t?(this.graphqlBuilder.sort(r,{direction:o(e.direction)}),this):this}},{key:"quickSearch",value:function(t){var r,e,i=this;this.currentObjectMap||console.warn("No autoMap config found, quick search will not work properly without target field mapping.");var o=null!==(r=null===(e=this.state.storeFilter)||void 0===e?void 0:e.quickSearch)&&void 0!==r?r:{values:[],logic:"or"},a=Array.isArray(o.values)?o.values:[o.values];if(!a||a.length<1)return this;var n=l(o.logic),s=Array.isArray(t)?t:[t];return this.filterScope(function(t){s.forEach(function(r){var e,l=null===(e=i.currentObjectMap)||void 0===e?void 0:e[r];if(l&&a&&a.length>0)if(l.custom)l.custom(t,o,i.state.storeFilter);else if(l.targetfield)for(var s=0;s<a.length;s++){var u=a[s];"string"==typeof u?t.filterContains(l.targetfield,u,{logic:n}):("number"==typeof u||"boolean"==typeof u)&&t.filter(l.targetfield,u.toString(),{logic:n})}})}),this}},{key:"build",value:function(){return this.prebuildFunc&&this.prebuildFunc(this.graphqlBuilder),this.graphqlBuilder.build()}}])}(),n=function(t){return new a(t)};export{a as TableFileterConverter,n as createConvertToGraphQL,l as mapLogic,o as mapSortDirection};
|
|
2
2
|
//# sourceMappingURL=convert-to-graphql.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert-to-graphql.js","sources":["../../../src/filter-bar/convert-to-graphql.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { createRequestBuilder, RequestParam } from '../http-service/graphql/request-param'\r\n// types\r\nimport { TFilterState, TFieldStore, TFieldValue, TLogic, TDirection, TFieldType } from './types'\r\n\r\ntype TFilterScopeFn<TSource, TTarget extends object> = (currentBuilder: RequestParam<TTarget>, store?: TFieldStore<TSource>) => void\r\n\r\n/**\r\n * @en\r\n * - Utility class to convert filter state from a filter bar into a GraphQL query builder.\r\n * - Supports mapping filter fields to different GraphQL fields, custom filter logic, and sorting.\r\n * @vi\r\n * - Lớp tiện ích để chuyển đổi trạng thái filter từ filter bar thành builder truy vấn GraphQL.\r\n * - Hỗ trợ ánh xạ các trường filter sang các trường GraphQL khác, logic filter tùy chỉnh và sắp xếp.\r\n */\r\ntype TAutoMapFieldCustomFn<TSource, TTarget extends object> = (\r\n currentBuilder: RequestParam<TTarget>,\r\n value?: NonNullable<TFieldStore<TSource>>[keyof TFieldStore<TSource>],\r\n store?: TFieldStore<TSource>\r\n) => void\r\n\r\ntype TAutoMapConfig<TSource, TTarget extends object> = {\r\n targetfield?: keyof TTarget\r\n operation?: 'equal' | 'contains'\r\n /**\r\n * @en\r\n * - Custom function to apply complex filter logic that doesn't fit standard 'equal' or 'contains' operations.\r\n * - Receives the current GraphQL builder, the value of the filter field, and the entire filter store for context.\r\n * @vi\r\n * - Hàm tùy chỉnh để áp dụng logic filter phức tạp không phù hợp với các thao tác 'equal' hoặc 'contains' tiêu chuẩn.\r\n * - Nhận builder GraphQL hiện tại, giá trị của trường filter và toàn bộ store filter để có ngữ cảnh.\r\n */\r\n custom?: TAutoMapFieldCustomFn<TSource, TTarget>\r\n}\r\n\r\ntype TAutoMapConfigs<TSource, TTarget extends object> = Partial<Record<keyof TSource, TAutoMapConfig<TSource, TTarget>>>\r\n\r\ntype TFilterOption = {\r\n logic?: TLogic\r\n}\r\n\r\nexport const mapLogic = (logic?: TLogic): 'And' | 'Or' => {\r\n return logic === 'or' ? 'Or' : 'And'\r\n}\r\n\r\nexport const mapSortDirection = (direction?: TDirection): 'ASC' | 'DESC' => {\r\n return direction === 'asc' ? 'ASC' : 'DESC'\r\n}\r\n\r\nexport class TableFileterConverter<TSource extends Record<string, any>, TTarget extends object> {\r\n private state: TFilterState<TSource>\r\n constructor(state: TFilterState<TSource>) {\r\n this.state = state\r\n }\r\n private graphqlBuilder = createRequestBuilder<TTarget>({ ignoreEmpty: true })\r\n filterScope(fn: TFilterScopeFn<TSource, TTarget>, options?: TFilterOption) {\r\n if (this.state.storeFilter) {\r\n const mergedLogic = options?.logic || this.state.filterLogic || 'and'\r\n const logic = mapLogic(mergedLogic)\r\n this.graphqlBuilder.scope(\r\n (b) => {\r\n fn(b, this.state.storeFilter)\r\n return b\r\n },\r\n { logic }\r\n )\r\n }\r\n return this\r\n }\r\n fillterEqual(field: TFieldType<TSource>, targetField?: keyof TTarget, options?: TFilterOption) {\r\n const fieldValue: TFieldValue = this.state.storeFilter?.[field] ?? { values: [] }\r\n const values = Array.isArray(fieldValue.values) ? fieldValue.values : [fieldValue.values]\r\n const isValueEmpty = !values || values.length < 1\r\n if (isValueEmpty || !targetField) return this\r\n\r\n const logic = mapLogic(fieldValue.logic)\r\n const fn: TFilterScopeFn<TSource, TTarget> = (builder, value) => {\r\n for (let index = 0; index < values.length; index++) {\r\n const element = values[index]\r\n if (typeof element === 'string') {\r\n builder.filter(targetField, element, { logic })\r\n } else if (typeof element === 'number') {\r\n //TODO: for number type, we can only do equal filter, so we treat it as equal filter\r\n builder.filter(targetField, element.toString(), { logic })\r\n } else if (typeof element === 'boolean') {\r\n //TODO: for boolean type, we also treat it as equal filter\r\n builder.filter(targetField, element.toString(), { logic })\r\n }\r\n }\r\n }\r\n this.filterScope(fn, options)\r\n return this\r\n }\r\n fillterContains(field: TFieldType<TSource>, targetField?: keyof TTarget, options?: TFilterOption) {\r\n const fieldValue: TFieldValue = this.state.storeFilter?.[field] ?? { values: [] }\r\n const values = Array.isArray(fieldValue.values) ? fieldValue.values : [fieldValue.values]\r\n const isValueEmpty = !values || values.length < 1\r\n if (isValueEmpty || !targetField) return this\r\n\r\n const finalLogic = mapLogic(fieldValue.logic)\r\n const fn: TFilterScopeFn<TSource, TTarget> = (builder) => {\r\n for (let index = 0; index < values.length; index++) {\r\n const val = values[index]\r\n if (typeof val === 'string') {\r\n builder.filterContains(targetField, val, { logic: finalLogic })\r\n } else if (typeof val === 'number') {\r\n //TODO: for number type, we can only do equal filter, so we treat it as equal filter\r\n builder.filter(targetField, val.toString(), { logic: finalLogic })\r\n } else if (typeof val === 'boolean') {\r\n //TODO: for boolean type, we also treat it as equal filter\r\n builder.filter(targetField, val.toString(), { logic: finalLogic })\r\n }\r\n }\r\n }\r\n this.filterScope(fn, options)\r\n return this\r\n }\r\n sort(field: TFieldType<TSource>, targetField?: keyof TTarget) {\r\n const store = this.state.storeSort\r\n console.log('sortConfig', { sortStore: store, field, targetField })\r\n\r\n if (!targetField || !store || store.field !== field) return this\r\n\r\n this.graphqlBuilder.sort(targetField, { direction: mapSortDirection(store.direction) })\r\n return this\r\n }\r\n quickSearch(fields: TFieldType<TSource> | TFieldType<TSource>[]) {\r\n if (!this.currentObjectMap) {\r\n console.warn('No autoMap config found, quick search will not work properly without target field mapping.')\r\n }\r\n const fieldValue: TFieldValue = this.state.storeFilter?.quickSearch ?? { values: [], logic: 'or' }\r\n const values = Array.isArray(fieldValue.values) ? fieldValue.values : [fieldValue.values]\r\n const isValueEmpty = !values || values.length < 1\r\n if (isValueEmpty) return this\r\n\r\n const logic = mapLogic(fieldValue.logic)\r\n const targetFields = Array.isArray(fields) ? fields : [fields]\r\n const fn: TFilterScopeFn<TSource, TTarget> = (builder) => {\r\n targetFields.forEach((field) => {\r\n const fieldMap = this.currentObjectMap?.[field]\r\n if (fieldMap && values && values.length > 0) {\r\n if (fieldMap.custom) {\r\n fieldMap.custom(builder, fieldValue, this.state.storeFilter)\r\n } else if (fieldMap.targetfield) {\r\n for (let index = 0; index < values.length; index++) {\r\n const element = values[index]\r\n if (typeof element === 'string') {\r\n builder.filterContains(fieldMap.targetfield, element, { logic })\r\n } else if (typeof element === 'number') {\r\n builder.filter(fieldMap.targetfield, element.toString(), { logic })\r\n } else if (typeof element === 'boolean') {\r\n builder.filter(fieldMap.targetfield, element.toString(), { logic })\r\n }\r\n }\r\n }\r\n }\r\n })\r\n }\r\n this.filterScope(fn)\r\n return this\r\n }\r\n private currentObjectMap?: TAutoMapConfigs<TSource, TTarget>\r\n autoMap = (objMap: TAutoMapConfigs<TSource, TTarget>) => {\r\n this.currentObjectMap = objMap\r\n\r\n if (this.state.storeFilter) {\r\n const keys = Object.keys(this.state.storeFilter) as (keyof TFieldStore<TSource>)[]\r\n // filter the keys that exist in objMap\r\n keys.forEach((key) => {\r\n const mapConfig = objMap[key]\r\n const fieldValue: TFieldValue | undefined = this.state.storeFilter?.[key]\r\n if (mapConfig) {\r\n const { targetfield, operation } = mapConfig\r\n if (mapConfig.custom) {\r\n mapConfig.custom(this.graphqlBuilder, fieldValue, this.state.storeFilter)\r\n return // skip the rest logic if custom function is provided\r\n }\r\n if (operation === 'equal') {\r\n this.fillterEqual(key, targetfield)\r\n } else if (operation === 'contains') {\r\n this.fillterContains(key, targetfield)\r\n }\r\n }\r\n })\r\n }\r\n\r\n //sort the field if exist in storeSort\r\n if (this.state.storeSort) {\r\n const sortKey: TFieldType<TSource> = this.state.storeSort.field\r\n this.sort(sortKey, objMap[sortKey]?.targetfield)\r\n }\r\n\r\n return this\r\n }\r\n private prebuildFunc?: (rp: RequestParam<TTarget>) => RequestParam<TTarget>\r\n prebuild = (func: (requestParam: RequestParam<TTarget>) => RequestParam<TTarget>) => {\r\n this.prebuildFunc = func\r\n return this\r\n }\r\n\r\n build() {\r\n if (this.prebuildFunc) this.prebuildFunc(this.graphqlBuilder)\r\n return this.graphqlBuilder.build()\r\n }\r\n}\r\n\r\nexport const createConvertToGraphQL = <TSource extends Record<string, any>, TTarget extends object>(state: TFilterState<TSource>) => {\r\n return new TableFileterConverter<TSource, TTarget>(state)\r\n}\r\n"],"names":["mapLogic","logic","mapSortDirection","direction","TableFileterConverter","_createClass","state","_this","this","_classCallCheck","_defineProperty","createRequestBuilder","ignoreEmpty","objMap","currentObjectMap","storeFilter","Object","keys","forEach","key","_this$state$storeFilt","mapConfig","fieldValue","targetfield","operation","custom","graphqlBuilder","fillterEqual","fillterContains","storeSort","_objMap$sortKey","sortKey","field","sort","func","prebuildFunc","value","fn","options","_this2","mergedLogic","filterLogic","scope","b","targetField","_this$state$storeFilt2","_this$state$storeFilt3","values","Array","isArray","length","filterScope","builder","index","element","filter","toString","_this$state$storeFilt4","_this$state$storeFilt5","finalLogic","val","filterContains","store","console","log","sortStore","fields","_this$state$storeFilt6","_this$state$storeFilt7","_this3","warn","quickSearch","targetFields","_this3$currentObjectM","fieldMap","build","createConvertToGraphQL"],"mappings":"sMA2CaA,EAAW,SAACC,GACvB,MAAiB,OAAVA,EAAiB,KAAO,KACjC,EAEaC,EAAmB,SAACC,GAC/B,MAAqB,QAAdA,EAAsB,MAAQ,MACvC,EAEaC,EAAqB,WAI/B,OAAAC,EAFD,SAAAD,EAAYE,GAA4B,IAAAC,EAAAC,KAAAC,OAAAL,GAAAM,EAAAF,KAAA,iBAGfG,EAA8B,CAAEC,aAAa,KAAOF,EAAAF,KAAA,UA4GnE,SAACK,IACTN,EAAKO,iBAAmBD,EAEpBN,EAAKD,MAAMS,cACAC,OAAOC,KAAKV,EAAKD,MAAMS,aAE/BG,QAAQ,SAACC,GAAO,IAAAC,EACbC,EAAYR,EAAOM,GACnBG,UAAUF,EAA4Bb,EAAKD,MAAMS,mBAAW,IAAAK,OAAA,EAAtBA,EAAyBD,GACrE,GAAIE,EAAW,CACb,IAAQE,EAA2BF,EAA3BE,YAAaC,EAAcH,EAAdG,UACrB,GAAIH,EAAUI,OAEZ,YADAJ,EAAUI,OAAOlB,EAAKmB,eAAgBJ,EAAYf,EAAKD,MAAMS,aAG7C,UAAdS,EACFjB,EAAKoB,aAAaR,EAAKI,GACA,aAAdC,GACTjB,EAAKqB,gBAAgBT,EAAKI,EAE7B,CACH,GAIF,GAAIhB,EAAKD,MAAMuB,UAAW,CAAA,IAAAC,EAClBC,EAA+BxB,EAAKD,MAAMuB,UAAUG,MAC1DzB,EAAK0B,KAAKF,EAAwBD,QAAjBA,EAAEjB,EAAOkB,cAAQD,SAAfA,EAAiBP,YACrC,CAED,OAAOhB,IACRG,EAAAF,KAAA,WAEU,SAAC0B,GAEV,OADA3B,EAAK4B,aAAeD,EACb3B,IAjJPC,KAAKF,MAAQA,CACf,EAAC,CAAA,CAAAa,IAAA,cAAAiB,MAED,SAAYC,EAAsCC,GAAuB,IAAAC,EAAA/B,KACvE,GAAIA,KAAKF,MAAMS,YAAa,CAC1B,IAAMyB,GAAcF,aAAAA,EAAAA,EAASrC,QAASO,KAAKF,MAAMmC,aAAe,MAC1DxC,EAAQD,EAASwC,GACvBhC,KAAKkB,eAAegB,MAClB,SAACC,GAEC,OADAN,EAAGM,EAAGJ,EAAKjC,MAAMS,aACV4B,CACT,EACA,CAAE1C,MAAAA,GAEL,CACD,OAAOO,IACT,GAAC,CAAAW,IAAA,eAAAiB,MACD,SAAaJ,EAA4BY,EAA6BN,GAAuB,IAAAO,EAAAC,EACrFxB,EAAyDuB,QAA/CA,UAAAC,EAAgBtC,KAAKF,MAAMS,mBAAW,IAAA+B,OAAA,EAAtBA,EAAyBd,UAAMa,IAAAA,EAAAA,EAAI,CAAEE,OAAQ,IACvEA,EAASC,MAAMC,QAAQ3B,EAAWyB,QAAUzB,EAAWyB,OAAS,CAACzB,EAAWyB,QAElF,IADsBA,GAAUA,EAAOG,OAAS,IAC3BN,EAAa,OAAOpC,KAEzC,IAAMP,EAAQD,EAASsB,EAAWrB,OAgBlC,OADAO,KAAK2C,YAdwC,SAACC,EAAShB,GACrD,IAAK,IAAIiB,EAAQ,EAAGA,EAAQN,EAAOG,OAAQG,IAAS,CAClD,IAAMC,EAAUP,EAAOM,GACA,iBAAZC,EACTF,EAAQG,OAAOX,EAAaU,EAAS,CAAErD,MAAAA,KACX,iBAAZqD,GAGY,kBAAZA,IADhBF,EAAQG,OAAOX,EAAaU,EAAQE,WAAY,CAAEvD,MAAAA,GAKrD,CACF,EACoBqC,GACd9B,IACT,GAAC,CAAAW,IAAA,kBAAAiB,MACD,SAAgBJ,EAA4BY,EAA6BN,GAAuB,IAAAmB,EAAAC,EACxFpC,EAAyDmC,QAA/CA,UAAAC,EAAgBlD,KAAKF,MAAMS,mBAAW,IAAA2C,OAAA,EAAtBA,EAAyB1B,UAAMyB,IAAAA,EAAAA,EAAI,CAAEV,OAAQ,IACvEA,EAASC,MAAMC,QAAQ3B,EAAWyB,QAAUzB,EAAWyB,OAAS,CAACzB,EAAWyB,QAElF,IADsBA,GAAUA,EAAOG,OAAS,IAC3BN,EAAa,OAAOpC,KAEzC,IAAMmD,EAAa3D,EAASsB,EAAWrB,OAgBvC,OADAO,KAAK2C,YAdwC,SAACC,GAC5C,IAAK,IAAIC,EAAQ,EAAGA,EAAQN,EAAOG,OAAQG,IAAS,CAClD,IAAMO,EAAMb,EAAOM,GACA,iBAARO,EACTR,EAAQS,eAAejB,EAAagB,EAAK,CAAE3D,MAAO0D,KAC1B,iBAARC,GAGQ,kBAARA,IADhBR,EAAQG,OAAOX,EAAagB,EAAIJ,WAAY,CAAEvD,MAAO0D,GAKxD,CACF,EACoBrB,GACd9B,IACT,GAAC,CAAAW,IAAA,OAAAiB,MACD,SAAKJ,EAA4BY,GAC/B,IAAMkB,EAAQtD,KAAKF,MAAMuB,UAGzB,OAFAkC,QAAQC,IAAI,aAAc,CAAEC,UAAWH,EAAO9B,MAAAA,EAAOY,YAAAA,IAEhDA,GAAgBkB,GAASA,EAAM9B,QAAUA,GAE9CxB,KAAKkB,eAAeO,KAAKW,EAAa,CAAEzC,UAAWD,EAAiB4D,EAAM3D,aACnEK,MAHqDA,IAI9D,GAAC,CAAAW,IAAA,cAAAiB,MACD,SAAY8B,GAAmD,IAAAC,EAAAC,EAAAC,EAAA7D,KACxDA,KAAKM,kBACRiD,QAAQO,KAAK,8FAEf,IAAMhD,EAA6D6C,QAAnDA,EAAsCC,QAAtCA,EAAgB5D,KAAKF,MAAMS,uBAAWqD,SAAtBA,EAAwBG,mBAAWJ,IAAAA,EAAAA,EAAI,CAAEpB,OAAQ,GAAI9C,MAAO,MACtF8C,EAASC,MAAMC,QAAQ3B,EAAWyB,QAAUzB,EAAWyB,OAAS,CAACzB,EAAWyB,QAElF,IADsBA,GAAUA,EAAOG,OAAS,EAC9B,OAAO1C,KAEzB,IAAMP,EAAQD,EAASsB,EAAWrB,OAC5BuE,EAAexB,MAAMC,QAAQiB,GAAUA,EAAS,CAACA,GAuBvD,OADA1D,KAAK2C,YArBwC,SAACC,GAC5CoB,EAAatD,QAAQ,SAACc,GAAS,IAAAyC,EACvBC,EAAgC,QAAxBD,EAAGJ,EAAKvD,wBAAgB,IAAA2D,OAAA,EAArBA,EAAwBzC,GACzC,GAAI0C,GAAY3B,GAAUA,EAAOG,OAAS,EACxC,GAAIwB,EAASjD,OACXiD,EAASjD,OAAO2B,EAAS9B,EAAY+C,EAAK/D,MAAMS,kBAC3C,GAAI2D,EAASnD,YAClB,IAAK,IAAI8B,EAAQ,EAAGA,EAAQN,EAAOG,OAAQG,IAAS,CAClD,IAAMC,EAAUP,EAAOM,GACA,iBAAZC,EACTF,EAAQS,eAAea,EAASnD,YAAa+B,EAAS,CAAErD,MAAAA,KAC5B,iBAAZqD,GAEY,kBAAZA,IADhBF,EAAQG,OAAOmB,EAASnD,YAAa+B,EAAQE,WAAY,CAAEvD,MAAAA,GAI9D,CAGP,EACD,GAEMO,IACT,GAAC,CAAAW,IAAA,QAAAiB,MAwCD,WAEE,OADI5B,KAAK2B,cAAc3B,KAAK2B,aAAa3B,KAAKkB,gBACvClB,KAAKkB,eAAeiD,OAC7B,IAAC,CA1J+B,GA6JrBC,EAAyB,SAA8DtE,GAClG,OAAO,IAAIF,EAAwCE,EACrD"}
|
|
1
|
+
{"version":3,"file":"convert-to-graphql.js","sources":["../../../src/filter-bar/convert-to-graphql.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { createRequestBuilder, RequestParam } from '../http-service/graphql/request-param'\r\n// types\r\nimport { TFilterState, TFieldStore, TFieldValue, TLogic, TDirection, TFieldType } from './types'\r\n\r\ntype TFilterScopeFn<TSource, TTarget extends object> = (currentBuilder: RequestParam<TTarget>, store?: TFieldStore<TSource>) => void\r\n\r\n/**\r\n * @en\r\n * - Utility class to convert filter state from a filter bar into a GraphQL query builder.\r\n * - Supports mapping filter fields to different GraphQL fields, custom filter logic, and sorting.\r\n * @vi\r\n * - Lớp tiện ích để chuyển đổi trạng thái filter từ filter bar thành builder truy vấn GraphQL.\r\n * - Hỗ trợ ánh xạ các trường filter sang các trường GraphQL khác, logic filter tùy chỉnh và sắp xếp.\r\n */\r\ntype TAutoMapFieldCustomFn<TSource, TTarget extends object> = (\r\n currentBuilder: RequestParam<TTarget>,\r\n value?: NonNullable<TFieldStore<TSource>>[keyof TFieldStore<TSource>],\r\n store?: TFieldStore<TSource>\r\n) => void\r\n\r\ntype TAutoMapConfig<TSource, TTarget extends object> = {\r\n targetfield?: keyof TTarget\r\n operation?: 'equal' | 'contains'\r\n /**\r\n * @en\r\n * - Custom function to apply complex filter logic that doesn't fit standard 'equal' or 'contains' operations.\r\n * - Receives the current GraphQL builder, the value of the filter field, and the entire filter store for context.\r\n * @vi\r\n * - Hàm tùy chỉnh để áp dụng logic filter phức tạp không phù hợp với các thao tác 'equal' hoặc 'contains' tiêu chuẩn.\r\n * - Nhận builder GraphQL hiện tại, giá trị của trường filter và toàn bộ store filter để có ngữ cảnh.\r\n */\r\n custom?: TAutoMapFieldCustomFn<TSource, TTarget>\r\n}\r\n\r\ntype TAutoMapConfigs<TSource, TTarget extends object> = Partial<Record<keyof TSource, TAutoMapConfig<TSource, TTarget>>>\r\n\r\ntype TFilterOption = {\r\n logic?: TLogic\r\n}\r\n\r\nexport const mapLogic = (logic?: TLogic): 'And' | 'Or' => {\r\n return logic === 'or' ? 'Or' : 'And'\r\n}\r\n\r\nexport const mapSortDirection = (direction?: TDirection): 'ASC' | 'DESC' => {\r\n return direction === 'asc' ? 'ASC' : 'DESC'\r\n}\r\n\r\nexport class TableFileterConverter<TSource extends Record<string, any>, TTarget extends object> {\r\n private state: TFilterState<TSource>\r\n constructor(state: TFilterState<TSource>) {\r\n this.state = state\r\n }\r\n private graphqlBuilder = createRequestBuilder<TTarget>({ ignoreEmpty: true })\r\n filterScope(fn: TFilterScopeFn<TSource, TTarget>, options?: TFilterOption) {\r\n if (this.state.storeFilter) {\r\n const mergedLogic = options?.logic || this.state.filterLogic || 'and'\r\n const logic = mapLogic(mergedLogic)\r\n this.graphqlBuilder.scope(\r\n (b) => {\r\n fn(b, this.state.storeFilter)\r\n return b\r\n },\r\n { logic }\r\n )\r\n }\r\n return this\r\n }\r\n fillterEqual(field: TFieldType<TSource>, targetField?: keyof TTarget, options?: TFilterOption) {\r\n const fieldValue: TFieldValue = this.state.storeFilter?.[field] ?? { values: [] }\r\n const values = Array.isArray(fieldValue.values) ? fieldValue.values : [fieldValue.values]\r\n const isValueEmpty = !values || values.length < 1\r\n if (isValueEmpty || !targetField) return this\r\n\r\n const logic = mapLogic(fieldValue.logic)\r\n const fn: TFilterScopeFn<TSource, TTarget> = (builder, value) => {\r\n for (let index = 0; index < values.length; index++) {\r\n const element = values[index]\r\n if (typeof element === 'string') {\r\n builder.filter(targetField, element, { logic })\r\n } else if (typeof element === 'number') {\r\n //TODO: for number type, we can only do equal filter, so we treat it as equal filter\r\n builder.filter(targetField, element.toString(), { logic })\r\n } else if (typeof element === 'boolean') {\r\n //TODO: for boolean type, we also treat it as equal filter\r\n builder.filter(targetField, element.toString(), { logic })\r\n }\r\n }\r\n }\r\n this.filterScope(fn, options)\r\n return this\r\n }\r\n fillterContains(field: TFieldType<TSource>, targetField?: keyof TTarget, options?: TFilterOption) {\r\n const fieldValue: TFieldValue = this.state.storeFilter?.[field] ?? { values: [] }\r\n const values = Array.isArray(fieldValue.values) ? fieldValue.values : [fieldValue.values]\r\n const isValueEmpty = !values || values.length < 1\r\n if (isValueEmpty || !targetField) return this\r\n\r\n const finalLogic = mapLogic(fieldValue.logic)\r\n const fn: TFilterScopeFn<TSource, TTarget> = (builder) => {\r\n for (let index = 0; index < values.length; index++) {\r\n const val = values[index]\r\n if (typeof val === 'string') {\r\n builder.filterContains(targetField, val, { logic: finalLogic })\r\n } else if (typeof val === 'number') {\r\n //TODO: for number type, we can only do equal filter, so we treat it as equal filter\r\n builder.filter(targetField, val.toString(), { logic: finalLogic })\r\n } else if (typeof val === 'boolean') {\r\n //TODO: for boolean type, we also treat it as equal filter\r\n builder.filter(targetField, val.toString(), { logic: finalLogic })\r\n }\r\n }\r\n }\r\n this.filterScope(fn, options)\r\n return this\r\n }\r\n sort(field: TFieldType<TSource>, targetField?: keyof TTarget) {\r\n const store = this.state.storeSort\r\n if (!targetField || !store || store.field !== field) return this\r\n\r\n this.graphqlBuilder.sort(targetField, { direction: mapSortDirection(store.direction) })\r\n return this\r\n }\r\n quickSearch(fields: TFieldType<TSource> | TFieldType<TSource>[]) {\r\n if (!this.currentObjectMap) {\r\n console.warn('No autoMap config found, quick search will not work properly without target field mapping.')\r\n }\r\n const fieldValue: TFieldValue = this.state.storeFilter?.quickSearch ?? { values: [], logic: 'or' }\r\n const values = Array.isArray(fieldValue.values) ? fieldValue.values : [fieldValue.values]\r\n const isValueEmpty = !values || values.length < 1\r\n if (isValueEmpty) return this\r\n\r\n const logic = mapLogic(fieldValue.logic)\r\n const targetFields = Array.isArray(fields) ? fields : [fields]\r\n const fn: TFilterScopeFn<TSource, TTarget> = (builder) => {\r\n targetFields.forEach((field) => {\r\n const fieldMap = this.currentObjectMap?.[field]\r\n if (fieldMap && values && values.length > 0) {\r\n if (fieldMap.custom) {\r\n fieldMap.custom(builder, fieldValue, this.state.storeFilter)\r\n } else if (fieldMap.targetfield) {\r\n for (let index = 0; index < values.length; index++) {\r\n const element = values[index]\r\n if (typeof element === 'string') {\r\n builder.filterContains(fieldMap.targetfield, element, { logic })\r\n } else if (typeof element === 'number') {\r\n builder.filter(fieldMap.targetfield, element.toString(), { logic })\r\n } else if (typeof element === 'boolean') {\r\n builder.filter(fieldMap.targetfield, element.toString(), { logic })\r\n }\r\n }\r\n }\r\n }\r\n })\r\n }\r\n this.filterScope(fn)\r\n return this\r\n }\r\n private currentObjectMap?: TAutoMapConfigs<TSource, TTarget>\r\n autoMap = (objMap: TAutoMapConfigs<TSource, TTarget>) => {\r\n this.currentObjectMap = objMap\r\n\r\n if (this.state.storeFilter) {\r\n const keys = Object.keys(this.state.storeFilter) as (keyof TFieldStore<TSource>)[]\r\n // filter the keys that exist in objMap\r\n keys.forEach((key) => {\r\n const mapConfig = objMap[key]\r\n const fieldValue: TFieldValue | undefined = this.state.storeFilter?.[key]\r\n if (mapConfig) {\r\n const { targetfield, operation } = mapConfig\r\n if (mapConfig.custom) {\r\n mapConfig.custom(this.graphqlBuilder, fieldValue, this.state.storeFilter)\r\n return // skip the rest logic if custom function is provided\r\n }\r\n if (operation === 'equal') {\r\n this.fillterEqual(key, targetfield)\r\n } else if (operation === 'contains') {\r\n this.fillterContains(key, targetfield)\r\n }\r\n }\r\n })\r\n }\r\n\r\n //sort the field if exist in storeSort\r\n if (this.state.storeSort) {\r\n const sortKey: TFieldType<TSource> = this.state.storeSort.field\r\n this.sort(sortKey, objMap[sortKey]?.targetfield)\r\n }\r\n\r\n return this\r\n }\r\n private prebuildFunc?: (rp: RequestParam<TTarget>) => RequestParam<TTarget>\r\n prebuild = (func: (requestParam: RequestParam<TTarget>) => RequestParam<TTarget>) => {\r\n this.prebuildFunc = func\r\n return this\r\n }\r\n\r\n build() {\r\n if (this.prebuildFunc) this.prebuildFunc(this.graphqlBuilder)\r\n return this.graphqlBuilder.build()\r\n }\r\n}\r\n\r\nexport const createConvertToGraphQL = <TSource extends Record<string, any>, TTarget extends object>(state: TFilterState<TSource>) => {\r\n return new TableFileterConverter<TSource, TTarget>(state)\r\n}\r\n"],"names":["mapLogic","logic","mapSortDirection","direction","TableFileterConverter","_createClass","state","_this","this","_classCallCheck","_defineProperty","createRequestBuilder","ignoreEmpty","objMap","currentObjectMap","storeFilter","Object","keys","forEach","key","_this$state$storeFilt","mapConfig","fieldValue","targetfield","operation","custom","graphqlBuilder","fillterEqual","fillterContains","storeSort","_objMap$sortKey","sortKey","field","sort","func","prebuildFunc","value","fn","options","_this2","mergedLogic","filterLogic","scope","b","targetField","_this$state$storeFilt2","_this$state$storeFilt3","values","Array","isArray","length","filterScope","builder","index","element","filter","toString","_this$state$storeFilt4","_this$state$storeFilt5","finalLogic","val","filterContains","store","fields","_this$state$storeFilt6","_this$state$storeFilt7","_this3","console","warn","quickSearch","targetFields","_this3$currentObjectM","fieldMap","build","createConvertToGraphQL"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createContext as r,useContext as t}from"react";var e=r({filterState:{},setFilterState:function(){}}),n=function(){return{Provider:e.Provider,Consumer:e.Consumer,useFilterBarContext:function(){return t(e)}}};export{e as FilterBarContext,n as createFilterBarContext,n as default};
|
|
1
|
+
import{createContext as r,useContext as t}from"react";var e=r({isLoading:!1,filterState:{},setFilterState:function(){}}),n=function(){return{Provider:e.Provider,Consumer:e.Consumer,useFilterBarContext:function(){return t(e)}}};export{e as FilterBarContext,n as createFilterBarContext,n as default};
|
|
2
2
|
//# sourceMappingURL=index.context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.context.js","sources":["../../../src/filter-bar/index.context.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { createContext, useContext } from 'react'\r\n// types\r\nimport { TFilterState } from './types'\r\n\r\nexport interface IFilterBarContextActions<T> {\r\n setFilterState: (state: TFilterState<T>) => void\r\n}\r\n\r\nexport interface IFilterBarContextState<T> {\r\n filterState: TFilterState<T>\r\n}\r\n\r\nexport interface IFilterBarContext<T> extends IFilterBarContextState<T>, IFilterBarContextActions<T> {}\r\n\r\nexport const FilterBarContext = createContext<IFilterBarContext<any>>({\r\n filterState: {},\r\n setFilterState: () => {}\r\n})\r\n\r\nexport const createFilterBarContext = <T extends unknown>() => {\r\n const Provider = FilterBarContext.Provider\r\n const Consumer = FilterBarContext.Consumer\r\n return {\r\n Provider,\r\n Consumer,\r\n useFilterBarContext: () => useContext(FilterBarContext) as IFilterBarContext<T>\r\n }\r\n}\r\n\r\nexport default createFilterBarContext\r\n"],"names":["FilterBarContext","createContext","filterState","setFilterState","createFilterBarContext","Provider","Consumer","useFilterBarContext","useContext"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.context.js","sources":["../../../src/filter-bar/index.context.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { createContext, useContext } from 'react'\r\n// types\r\nimport { TFilterState } from './types'\r\n\r\nexport interface IFilterBarContextActions<T> {\r\n setFilterState: (state: TFilterState<T>) => void\r\n}\r\n\r\nexport interface IFilterBarContextState<T> {\r\n isLoading?: boolean\r\n filterState: TFilterState<T>\r\n}\r\n\r\nexport interface IFilterBarContext<T> extends IFilterBarContextState<T>, IFilterBarContextActions<T> {}\r\n\r\nexport const FilterBarContext = createContext<IFilterBarContext<any>>({\r\n isLoading: false,\r\n filterState: {},\r\n setFilterState: () => {}\r\n})\r\n\r\nexport const createFilterBarContext = <T extends unknown>() => {\r\n const Provider = FilterBarContext.Provider\r\n const Consumer = FilterBarContext.Consumer\r\n return {\r\n Provider,\r\n Consumer,\r\n useFilterBarContext: () => useContext(FilterBarContext) as IFilterBarContext<T>\r\n }\r\n}\r\n\r\nexport default createFilterBarContext\r\n"],"names":["FilterBarContext","createContext","isLoading","filterState","setFilterState","createFilterBarContext","Provider","Consumer","useFilterBarContext","useContext"],"mappings":"sDAkBaA,IAAAA,EAAmBC,EAAsC,CACpEC,WAAW,EACXC,YAAa,CAAE,EACfC,eAAgB,WAAK,IAGVC,EAAyB,WAGpC,MAAO,CACLC,SAHeN,EAAiBM,SAIhCC,SAHeP,EAAiBO,SAIhCC,oBAAqB,WAAF,OAAQC,EAAWT,EAAyC,EAEnF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as t,inherits as e,createClass as
|
|
1
|
+
import{defineProperty as t,inherits as e,createClass as n,classCallCheck as r,callSuper as o,asyncToGenerator as i,regenerator as a}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as s,jsxs as l}from"react/jsx-runtime";import{Component as p}from"react";import{styled as u,Box as m}from"@mui/material";import{createFilterBarContext as f}from"./index.context.js";import{createFilterSort as c}from"./components/filter-sort.js";import{createFilterMenu as d}from"./components/filter-menu.js";import{createFilterInput as g}from"./components/filter-input.js";import{createFilterSummary as v}from"./components/filter-summary.js";import{fetchDelay as C}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"../utils/query-param.js";function h(u){if(!u.InputComponent){var m=u.inputConfig||{fields:{}};u.inputConfig=m,u.InputComponent=g(m)}if(!u.MenuComponent){var h=u.menuConfig||{fields:{}};u.menuConfig=h,u.MenuComponent=d(h)}if(!u.SummaryComponent&&!1!==u.enableSummary){var j=u.summaryConfig||{fields:{}};u.summaryConfig=j,u.SummaryComponent=v(j)}if(!u.SortComponent){var b=u.sortConfig||{fields:{}};u.sortConfig=b,u.SortComponent=c(b)}var F=u.defaultFilterLogic||"and",k=f(),x=function(){function m(e){var n;return r(this,m),n=o(this,m,[e]),t(n,"handleChange",function(){var t=i(a().m(function t(e,r){var o;return a().w(function(t){for(;;)switch(t.p=t.n){case 0:return t.p=0,n.setState(function(t){var e;return{filterState:null!==(e=null==r?void 0:r.filterState)&&void 0!==e?e:t.filterState,isLoading:!0}}),t.n=1,C(i(a().m(function t(){var r,o;return a().w(function(t){for(;;)if(0===t.n)return t.a(2,null===(r=(o=n.props).onChange)||void 0===r?void 0:r.call(o,e))},t)})),500);case 1:n.setState({isLoading:!1}),t.n=3;break;case 2:throw t.p=2,o=t.v,n.setState({isLoading:!1}),o;case 3:return t.a(2)}},t,null,[[0,2]])}));return function(e,n){return t.apply(this,arguments)}}()),t(n,"setFilterState",function(t){n.props.value?n.handleChange(t):n.handleChange(t,{filterState:t})}),t(n,"onAddFilter",function(){console.log("Add filter")}),t(n,"onAddRemove",function(){console.log("Remove filter")}),n.state=n.getInitialFilterState(),n}return e(m,p),n(m,[{key:"getInitialFilterState",value:function(){return this.props.value?{filterState:this.props.value}:{filterState:Object.assign({filterLogic:F},u.initialFilterState)}}},{key:"filterState",get:function(){return this.props.value||this.state.filterState}},{key:"isLoading",get:function(){return this.state.isLoading||!1}},{key:"render",value:function(){var t=u.InputComponent,e=u.MenuComponent,n=u.SummaryComponent,r=u.SortComponent;return s(k.Provider,{value:this,children:l(y,{className:S.root,sx:this.props.sx,children:[l("div",{className:S.inner,children:[s(e,{slots:{popperProps:{placement:"bottom-start"}}}),s(r,{slots:{popperProps:{placement:"bottom-start"}}}),s(t,{onAdd:this.onAddFilter,slots:{popperProps:{placement:"bottom-start"}}})]}),!1!==u.enableSummary&&s(n,{sx:{mt:1}})]})})}}])}();return x}var S={root:"DinoFilterBar-root",inner:"DinoFilterBar-inner"},y=u(m)(function(e){var n=e.theme;return t(t({},"&.".concat(S.root),{backgroundColor:n.palette.background.paper}),".".concat(S.inner),{display:"flex",alignItems:"center",gap:n.spacing(1)})});export{h as createFilterBar};
|
|
2
2
|
//# sourceMappingURL=index.create.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.create.js","sources":["../../../src/filter-bar/index.create.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { Component } from 'react'\r\nimport { Box, BoxProps, styled } from '@mui/material'\r\nimport { createFilterBarContext } from './index.context'\r\nimport { createFilterSort } from './components/filter-sort'\r\nimport { createFilterMenu } from './components/filter-menu'\r\nimport { createFilterInput } from './components/filter-input'\r\nimport { createFilterSummary } from './components/filter-summary'\r\n// types\r\nimport type { ComponentType } from 'react'\r\nimport type { TFilterState } from './types'\r\nimport type { IFilterBarContext, IFilterBarContextState } from './index.context'\r\nimport type { IFilterMenuConfig, IFilterMenuProps } from './components/filter-menu.types'\r\nimport type { IFilterSortConfig, IFilterSortProps } from './components/filter-sort.types'\r\nimport type { IFilterInputConfig, IFilterInputProps } from './components/filter-input.types'\r\nimport type { IFilterSummaryConfig, IFilterSummaryProps } from './components/filter-summary.types'\r\n\r\nexport interface IFilterBarConfigs<T> {\r\n initialFilterState?: TFilterState<T>\r\n /** Default filter logic, can be overridden by individual filters @default \"and\" */\r\n defaultFilterLogic?: 'and' | 'or'\r\n input?: ComponentType<IFilterInputProps<T>>\r\n inputConfig?: IFilterInputConfig<T>\r\n menu?: ComponentType<IFilterMenuProps<T>>\r\n menuConfig?: IFilterMenuConfig<T>\r\n summary?: ComponentType<IFilterSummaryProps<T>>\r\n summaryConfig?: IFilterSummaryConfig<T>\r\n /** Enable or disable the summary component. Default is true. */\r\n enableSummary?: boolean\r\n sortConfig?: IFilterSortConfig<T>\r\n sort?: ComponentType<IFilterSortProps<T>>\r\n}\r\n\r\nexport interface IFilterBarProps<T> {\r\n sx?: BoxProps['sx']\r\n value?: TFilterState<T>\r\n onChange?: (state: TFilterState<T>) => void\r\n}\r\n\r\ninterface IFilterBarState<T> extends IFilterBarContextState<T> {}\r\n\r\nexport function createFilterBar<T>(configs: IFilterBarConfigs<T>) {\r\n if (!configs.input) {\r\n const configInput = configs.inputConfig || { fields: {} }\r\n configs.input = createFilterInput<T>(configInput)\r\n configs.inputConfig = configInput\r\n }\r\n if (!configs.menu) {\r\n const configMenu = configs.menuConfig || { fields: {} }\r\n configs.menu = createFilterMenu<T>(configMenu)\r\n configs.menuConfig = configMenu\r\n }\r\n if (!configs.summary && configs.enableSummary !== false) {\r\n const configSummary: IFilterSummaryConfig<T> = configs.summaryConfig || { fields: {} }\r\n configs.summary = createFilterSummary<T>(configSummary)\r\n configs.summaryConfig = configSummary\r\n }\r\n if (!configs.sort) {\r\n const configSort: IFilterSortConfig<T> = configs.sortConfig || { fields: {} }\r\n configs.sort = createFilterSort<T>(configSort)\r\n configs.sortConfig = configSort\r\n }\r\n\r\n const defaultFilterLogic = configs.defaultFilterLogic || 'and'\r\n const Context = createFilterBarContext<T>()\r\n\r\n class FilterBar extends Component<IFilterBarProps<T>, IFilterBarState<T>> implements IFilterBarContext<T> {\r\n constructor(props: IFilterBarProps<T>) {\r\n super(props)\r\n this.state = this.getInitialFilterState()\r\n }\r\n\r\n getInitialFilterState(): IFilterBarState<T> {\r\n if (this.props.value) return { filterState: this.props.value }\r\n return { filterState: Object.assign({ filterLogic: defaultFilterLogic }, configs.initialFilterState) }\r\n }\r\n\r\n get filterState(): TFilterState<T> {\r\n return this.props.value || this.state.filterState\r\n }\r\n\r\n setFilterState = (state: TFilterState<T>) => {\r\n console.log('Updating filter state:', state)\r\n\r\n if (this.props.value) {\r\n this.props.onChange?.(state)\r\n return\r\n }\r\n this.setState({ filterState: state }, () => {\r\n // this.props.onChange?.(state)\r\n })\r\n }\r\n\r\n onAddFilter = () => {\r\n // TODO: add filter to filterState\r\n console.log('Add filter')\r\n }\r\n\r\n onAddRemove = () => {\r\n // TODO: remove filter from filterState\r\n console.log('Remove filter')\r\n }\r\n\r\n render() {\r\n const Input = configs.input as ComponentType<IFilterInputProps<T>>\r\n const Menu = configs.menu as ComponentType<IFilterMenuProps<T>>\r\n const Summary = configs.summary as ComponentType<IFilterSummaryProps<T>>\r\n const Sort = configs.sort as ComponentType<IFilterSortProps<T>>\r\n return (\r\n <Context.Provider value={this}>\r\n <FilterBarStyled className={filterbarClasses.root} sx={this.props.sx}>\r\n <div className={filterbarClasses.inner}>\r\n <Menu slots={{ popperProps: { placement: 'bottom-start' } }} />\r\n <Sort slots={{ popperProps: { placement: 'bottom-start' } }} />\r\n <Input onAdd={this.onAddFilter} slots={{ popperProps: { placement: 'bottom-start' } }} />\r\n </div>\r\n {configs.enableSummary !== false && <Summary sx={{ my: 1 }} />}\r\n </FilterBarStyled>\r\n {/* <Box style={{ border: '1px solid red', marginTop: '16px', padding: '8px' }}>\r\n <Typography variant='subtitle2'>For Debug - Current Filter State:</Typography>\r\n <pre>{JSON.stringify(this.filterState, null, 2)}</pre>\r\n </Box> */}\r\n </Context.Provider>\r\n )\r\n }\r\n }\r\n\r\n return FilterBar\r\n}\r\n\r\nconst filterbarClasses = {\r\n root: 'DinoFilterBar-root',\r\n inner: 'DinoFilterBar-inner'\r\n}\r\n\r\nconst FilterBarStyled = styled(Box)(({ theme }) => ({\r\n [`&.${filterbarClasses.root}`]: {\r\n backgroundColor: theme.palette.background.paper\r\n },\r\n [`.${filterbarClasses.inner}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: theme.spacing(1)\r\n }\r\n}))\r\n"],"names":["createFilterBar","configs","input","configInput","inputConfig","fields","createFilterInput","menu","configMenu","menuConfig","createFilterMenu","summary","enableSummary","configSummary","summaryConfig","createFilterSummary","sort","configSort","sortConfig","createFilterSort","defaultFilterLogic","Context","createFilterBarContext","FilterBar","props","_this","_classCallCheck","_callSuper","_defineProperty","state","_this$props$onChange","_this$props","console","log","value","onChange","call","setState","filterState","getInitialFilterState","_inherits","Component","_createClass","key","this","Object","assign","filterLogic","initialFilterState","get","Input","Menu","Summary","Sort","_jsx","Provider","children","_jsxs","FilterBarStyled","className","filterbarClasses","root","sx","inner","slots","popperProps","placement","onAdd","onAddFilter","my","styled","Box","_ref","theme","concat","backgroundColor","palette","background","paper","display","alignItems","gap","spacing"],"mappings":"mlBA2CM,SAAUA,EAAmBC,GACjC,IAAKA,EAAQC,MAAO,CAClB,IAAMC,EAAcF,EAAQG,aAAe,CAAEC,OAAQ,CAAA,GACrDJ,EAAQC,MAAQI,EAAqBH,GACrCF,EAAQG,YAAcD,CACvB,CACD,IAAKF,EAAQM,KAAM,CACjB,IAAMC,EAAaP,EAAQQ,YAAc,CAAEJ,OAAQ,CAAA,GACnDJ,EAAQM,KAAOG,EAAoBF,GACnCP,EAAQQ,WAAaD,CACtB,CACD,IAAKP,EAAQU,UAAqC,IAA1BV,EAAQW,cAAyB,CACvD,IAAMC,EAAyCZ,EAAQa,eAAiB,CAAET,OAAQ,CAAA,GAClFJ,EAAQU,QAAUI,EAAuBF,GACzCZ,EAAQa,cAAgBD,CACzB,CACD,IAAKZ,EAAQe,KAAM,CACjB,IAAMC,EAAmChB,EAAQiB,YAAc,CAAEb,OAAQ,CAAA,GACzEJ,EAAQe,KAAOG,EAAoBF,GACnChB,EAAQiB,WAAaD,CACtB,CAED,IAAMG,EAAqBnB,EAAQmB,oBAAsB,MACnDC,EAAUC,IA+DhB,kBA5DE,SAAAC,EAAYC,GAAyB,IAAAC,EAEM,OAFNC,OAAAH,GACnCE,EAAAE,EAAAJ,KAAAA,GAAMC,IAAMI,EAAAH,EAaG,iBAAA,SAACI,GAGM,IAAAC,EAAAC,GAFtBC,QAAQC,IAAI,yBAA0BJ,GAElCJ,EAAKD,MAAMU,eACbJ,GAAAC,EAAAN,EAAKD,OAAMW,gBAAQ,IAAAL,GAAnBA,EAAAM,KAAAL,EAAsBF,GAGxBJ,EAAKY,SAAS,CAAEC,YAAaT,GAAS,WACpC,KAEHD,EAAAH,EAAA,cAEa,WAEZO,QAAQC,IAAI,gBACbL,EAAAH,EAAA,cAEa,WAEZO,QAAQC,IAAI,mBA/BZR,EAAKI,MAAQJ,EAAKc,wBAAuBd,CAC3C,CAAC,OAAAe,EAAAjB,EAJqBkB,GAIrBC,EAAAnB,EAAA,CAAA,CAAAoB,IAAA,wBAAAT,MAED,WACE,OAAIU,KAAKpB,MAAMU,MAAc,CAAEI,YAAaM,KAAKpB,MAAMU,OAChD,CAAEI,YAAaO,OAAOC,OAAO,CAAEC,YAAa3B,GAAsBnB,EAAQ+C,oBACnF,GAAC,CAAAL,IAAA,cAAAM,IAED,WACE,OAAOL,KAAKpB,MAAMU,OAASU,KAAKf,MAAMS,WACxC,GAAC,CAAAK,IAAA,SAAAT,MAwBD,WACE,IAAMgB,EAAQjD,EAAQC,MAChBiD,EAAOlD,EAAQM,KACf6C,EAAUnD,EAAQU,QAClB0C,EAAOpD,EAAQe,KACrB,OACEsC,EAACjC,EAAQkC,UAASrB,MAAOU,KAAIY,SAC3BC,EAACC,GAAgBC,UAAWC,EAAiBC,KAAMC,GAAIlB,KAAKpB,MAAMsC,aAChEL,EAAK,MAAA,CAAAE,UAAWC,EAAiBG,gBAC/BT,EAACH,EAAK,CAAAa,MAAO,CAAEC,YAAa,CAAEC,UAAW,mBACzCZ,EAACD,EAAK,CAAAW,MAAO,CAAEC,YAAa,CAAEC,UAAW,mBACzCZ,EAACJ,GAAMiB,MAAOvB,KAAKwB,YAAaJ,MAAO,CAAEC,YAAa,CAAEC,UAAW,uBAE1C,IAA1BjE,EAAQW,eAA2B0C,EAACF,EAAQ,CAAAU,GAAI,CAAEO,GAAI,SAQ/D,IAAC,GAIL,CAEA,IAAMT,EAAmB,CACvBC,KAAM,qBACNE,MAAO,uBAGHL,EAAkBY,EAAOC,EAAPD,CAAY,SAAAE,GAAA,IAAGC,EAAKD,EAALC,MAAK,OAAA7C,EAAAA,EAAA,CAAA,EAAA,KAAA8C,OACpCd,EAAiBC,MAAS,CAC9Bc,gBAAiBF,EAAMG,QAAQC,WAAWC,YAC3CJ,OACId,EAAiBG,OAAU,CAC9BgB,QAAS,OACTC,WAAY,SACZC,IAAKR,EAAMS,QAAQ,IACpB"}
|
|
1
|
+
{"version":3,"file":"index.create.js","sources":["../../../src/filter-bar/index.create.tsx"],"sourcesContent":["// Copyright (c) 2024-present, Dinocollab Technologies, Inc. and its affiliates. All rights reserved.\r\n\r\n// imports\r\nimport { Component } from 'react'\r\nimport { Box, BoxProps, styled } from '@mui/material'\r\nimport { createFilterBarContext } from './index.context'\r\nimport { createFilterSort } from './components/filter-sort'\r\nimport { createFilterMenu } from './components/filter-menu'\r\nimport { createFilterInput } from './components/filter-input'\r\nimport { createFilterSummary } from './components/filter-summary'\r\n// types\r\nimport type { ComponentType } from 'react'\r\nimport type { TFilterState } from './types'\r\nimport type { IFilterBarContext, IFilterBarContextState } from './index.context'\r\nimport type { IFilterMenuConfig, IFilterMenuProps } from './components/filter-menu.types'\r\nimport type { IFilterSortConfig, IFilterSortProps } from './components/filter-sort.types'\r\nimport type { IFilterInputConfig, IFilterInputProps } from './components/filter-input.types'\r\nimport type { IFilterSummaryConfig, IFilterSummaryProps } from './components/filter-summary.types'\r\nimport { fetchDelay } from '../utils'\r\n\r\nexport interface IFilterBarConfigs<T> {\r\n initialFilterState?: TFilterState<T>\r\n /** Default filter logic, can be overridden by individual filters @default \"and\" */\r\n defaultFilterLogic?: 'and' | 'or'\r\n InputComponent?: ComponentType<IFilterInputProps<T>>\r\n inputConfig?: IFilterInputConfig<T>\r\n MenuComponent?: ComponentType<IFilterMenuProps<T>>\r\n menuConfig?: IFilterMenuConfig<T>\r\n sortConfig?: IFilterSortConfig<T>\r\n SortComponent?: ComponentType<IFilterSortProps<T>>\r\n /** Enable or disable the summary component. Default is true. */\r\n enableSummary?: boolean\r\n SummaryComponent?: ComponentType<IFilterSummaryProps<T>>\r\n summaryConfig?: IFilterSummaryConfig<T>\r\n}\r\n\r\nexport interface IFilterBarProps<T> {\r\n sx?: BoxProps['sx']\r\n value?: TFilterState<T>\r\n onChange?: (state: TFilterState<T>) => Promise<void> | void\r\n}\r\n\r\ninterface IFilterBarState<T> extends IFilterBarContextState<T> {}\r\n\r\nexport function createFilterBar<T>(configs: IFilterBarConfigs<T>) {\r\n if (!configs.InputComponent) {\r\n const configInput = configs.inputConfig || { fields: {} }\r\n configs.inputConfig = configInput\r\n configs.InputComponent = createFilterInput<T>(configInput)\r\n }\r\n if (!configs.MenuComponent) {\r\n const configMenu = configs.menuConfig || { fields: {} }\r\n configs.menuConfig = configMenu\r\n configs.MenuComponent = createFilterMenu<T>(configMenu)\r\n }\r\n if (!configs.SummaryComponent && configs.enableSummary !== false) {\r\n const configSummary: IFilterSummaryConfig<T> = configs.summaryConfig || { fields: {} }\r\n configs.summaryConfig = configSummary\r\n configs.SummaryComponent = createFilterSummary<T>(configSummary)\r\n }\r\n if (!configs.SortComponent) {\r\n const configSort: IFilterSortConfig<T> = configs.sortConfig || { fields: {} }\r\n configs.sortConfig = configSort\r\n configs.SortComponent = createFilterSort<T>(configSort)\r\n }\r\n\r\n const defaultFilterLogic = configs.defaultFilterLogic || 'and'\r\n const Context = createFilterBarContext<T>()\r\n\r\n class FilterBar extends Component<IFilterBarProps<T>, IFilterBarState<T>> implements IFilterBarContext<T> {\r\n constructor(props: IFilterBarProps<T>) {\r\n super(props)\r\n this.state = this.getInitialFilterState()\r\n }\r\n\r\n getInitialFilterState(): IFilterBarState<T> {\r\n if (this.props.value) return { filterState: this.props.value }\r\n return { filterState: Object.assign({ filterLogic: defaultFilterLogic }, configs.initialFilterState) }\r\n }\r\n\r\n get filterState(): TFilterState<T> {\r\n return this.props.value || this.state.filterState\r\n }\r\n\r\n get isLoading(): boolean {\r\n return this.state.isLoading || false\r\n }\r\n\r\n handleChange = async (filterState: TFilterState<T>, state?: Partial<IFilterBarState<T>>) => {\r\n try {\r\n this.setState((prev) => ({ filterState: state?.filterState ?? prev.filterState, isLoading: true }))\r\n await fetchDelay(async () => this.props.onChange?.(filterState), 500)\r\n this.setState({ isLoading: false })\r\n } catch (error) {\r\n this.setState({ isLoading: false })\r\n throw error\r\n }\r\n }\r\n\r\n setFilterState = (state: TFilterState<T>) => {\r\n if (this.props.value) {\r\n this.handleChange(state)\r\n return\r\n }\r\n this.handleChange(state, { filterState: state })\r\n }\r\n\r\n onAddFilter = () => {\r\n // TODO: add filter to filterState\r\n console.log('Add filter')\r\n }\r\n\r\n onAddRemove = () => {\r\n // TODO: remove filter from filterState\r\n console.log('Remove filter')\r\n }\r\n\r\n render() {\r\n const InputComponent = configs.InputComponent as ComponentType<IFilterInputProps<T>>\r\n const MenuComponent = configs.MenuComponent as ComponentType<IFilterMenuProps<T>>\r\n const SummaryComponent = configs.SummaryComponent as ComponentType<IFilterSummaryProps<T>>\r\n const SortComponent = configs.SortComponent as ComponentType<IFilterSortProps<T>>\r\n return (\r\n <Context.Provider value={this}>\r\n <FilterBarStyled className={filterbarClasses.root} sx={this.props.sx}>\r\n <div className={filterbarClasses.inner}>\r\n <MenuComponent slots={{ popperProps: { placement: 'bottom-start' } }} />\r\n <SortComponent slots={{ popperProps: { placement: 'bottom-start' } }} />\r\n <InputComponent onAdd={this.onAddFilter} slots={{ popperProps: { placement: 'bottom-start' } }} />\r\n </div>\r\n {configs.enableSummary !== false && <SummaryComponent sx={{ mt: 1 }} />}\r\n </FilterBarStyled>\r\n {/* <Box style={{ border: '1px solid red', marginTop: '16px', padding: '8px' }}>\r\n <Typography variant='subtitle2'>For Debug - Current Filter State:</Typography>\r\n <pre>{JSON.stringify(this.filterState, null, 2)}</pre>\r\n </Box> */}\r\n </Context.Provider>\r\n )\r\n }\r\n }\r\n\r\n return FilterBar\r\n}\r\n\r\nconst filterbarClasses = {\r\n root: 'DinoFilterBar-root',\r\n inner: 'DinoFilterBar-inner'\r\n}\r\n\r\nconst FilterBarStyled = styled(Box)(({ theme }) => ({\r\n [`&.${filterbarClasses.root}`]: {\r\n backgroundColor: theme.palette.background.paper\r\n },\r\n [`.${filterbarClasses.inner}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: theme.spacing(1)\r\n }\r\n}))\r\n"],"names":["createFilterBar","configs","InputComponent","configInput","inputConfig","fields","createFilterInput","MenuComponent","configMenu","menuConfig","createFilterMenu","SummaryComponent","enableSummary","configSummary","summaryConfig","createFilterSummary","SortComponent","configSort","sortConfig","createFilterSort","defaultFilterLogic","Context","createFilterBarContext","FilterBar","props","_this","_classCallCheck","_callSuper","_defineProperty","_ref","_asyncToGenerator","_regenerator","m","_callee2","filterState","state","_t","w","_context2","p","n","setState","prev","_state$filterState","isLoading","fetchDelay","_callee","_this$props$onChange","_this$props","_context","a","onChange","call","v","_x","_x2","apply","this","arguments","value","handleChange","console","log","getInitialFilterState","_inherits","Component","_createClass","key","Object","assign","filterLogic","initialFilterState","get","_jsx","Provider","children","_jsxs","FilterBarStyled","className","filterbarClasses","root","sx","inner","slots","popperProps","placement","onAdd","onAddFilter","mt","styled","Box","_ref3","theme","concat","backgroundColor","palette","background","paper","display","alignItems","gap","spacing"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{inherits as r,createClass as e,objectSpread2 as t,classCallCheck as a,callSuper as o,defineProperty as s,asyncToGenerator as n,regenerator as l}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i}from"react/jsx-runtime";import{Box as u}from"@mui/material";import{createContext as m,Component as c}from"react";import{validateMerge as f,
|
|
1
|
+
import{inherits as r,createClass as e,objectSpread2 as t,classCallCheck as a,callSuper as o,defineProperty as s,asyncToGenerator as n,regenerator as l}from"../../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i}from"react/jsx-runtime";import{Box as u}from"@mui/material";import{createContext as m,Component as c}from"react";import{validateMerge as f,getErrorCommonFromResponse as p,getErrorFromResponse as d,convertFormDataToJson as v,trimAllStrings as E,singleValidate as g}from"./helpers.js";import{FormValidator as S,SingleRuleValidate as h}from"./validator.js";import{ApiAlertContext as b}from"../api-context/alert-global.js";var j=function(j){var A=m({setModelState:function(){},messageErrors:{},onBlur:function(){},setError:function(){},removeError:function(){},clearErrorAll:function(){}}),C=function(){function m(r){var e;return a(this,m),e=o(this,m,[r]),s(e,"refForm",null),s(e,"mapContext",function(){var r=e,t=r.setError,a=r.removeError,o=r.setModelState,s=r.clearErrorAll,n=r.onBlur,l=e.state;return{modelState:l.modelState,messageErrors:l.messageErrors,setError:t,onBlur:n,clearErrorAll:s,setModelState:o,removeError:a}}),s(e,"setModelState",function(r){var t=Object.assign({},e.state.modelState,r);e.setState({modelState:t})}),s(e,"getValidate",function(){var r=new S({});return f(r,null==j?void 0:j.validate,e.props.validate)}),s(e,"setError",function(r,t){var a=s({},r,[{rule:h.Custom,message:t}]);e.setState({messageErrors:Object.assign({},e.state.messageErrors,a)})}),s(e,"removeError",function(r){var a=t({},e.state.messageErrors);Array.isArray(r)?r.forEach(function(r){a[r]&&delete a[r]}):a[r]&&delete a[r],e.setState({messageErrors:a})}),s(e,"clearErrorAll",function(){e.setState({messageErrors:{}})}),s(e,"onSubmit",function(){var r=n(l().m(function r(a){var o,s,n,i,u,m,c,f;return l().w(function(r){for(;;)switch(r.p=r.n){case 0:if(a.preventDefault(),o=new FormData(a.currentTarget),s=v(o),n=E(s),e.setState({modelState:n}),i=e.validate.run(n),e.props.onError&&Object.keys(i).length>0&&e.props.onError(i),!i){r.n=1;break}if(e.setState({messageErrors:i}),!(Object.keys(i).length>0)){r.n=1;break}return r.a(2);case 1:return r.p=1,r.n=2,e.props.onSubmit(n,a);case 2:r.n=4;break;case 3:r.p=3,f=r.v,(m=p(f)).length>0&&(null===(u=b.ApiAlert)||void 0===u||u.PushError(m[0])),c=d(f,n),e.setState({messageErrors:t(t({},e.state.messageErrors),c||{})});case 4:return r.a(2)}},r,null,[[1,3]])}));return function(e){return r.apply(this,arguments)}}()),s(e,"onBlur",function(r){if(e.refForm){var t=e.state.messageErrors,a=new FormData(e.refForm),o=v(a),s=E(o);e.setState({modelState:s});var n=g(r,s,t,e.validate)||{};e.setState({messageErrors:n})}}),e.validate=e.getValidate(),e.state={messageErrors:{}},e}return r(m,c),e(m,[{key:"render",value:function(){var r,e=this;return i(u,t(t({component:"form",ref:function(r){return e.refForm=r},onSubmit:this.onSubmit},null===(r=this.props.slots)||void 0===r?void 0:r.formProps),{},{children:i(A.Provider,{value:this.mapContext(),children:this.props.children})}))}}])}();return{Form:C,Validator:null==j?void 0:j.validate,Context:A,mapContext:function(r){return i(A.Consumer,{children:r})}}};export{j as default};
|
|
2
2
|
//# sourceMappingURL=create.form-base.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{asyncToGenerator as r,slicedToArray as t,regenerator as n,typeof as e,objectSpread2 as o,toArray as a,arrayLikeToArray as c}from"../../_virtual/_rollupPluginBabelHelpers.js";import i from"dayjs";var u=function(r){return new Promise(function(t){return setTimeout(t,r)})},s=function(){var e=r(n().m(function r(e,o){var a,c,i;return n().w(function(r){for(;;)switch(r.n){case 0:return r.n=1,Promise.all([e(),u(o)]);case 1:return a=r.v,c=t(a,1),i=c[0],r.a(2,i)}},r)}));return function(r,t){return e.apply(this,arguments)}}(),f=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"===e(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},{})},g=function(r){try{return r?Object.entries(r).reduce(function(r,n){var e=t(n,2),o=e[0],a=e[1];return void 0!==a&&(r[o]=a),r},{}):{}}catch(r){return{}}},m=function(r){if("object"!==e(r)||null===r)return r;var n=Array.isArray(r)?[]:{};return Object.entries(r).forEach(function(r){var o=t(r,2),a=o[0],c=o[1];if(null==c||"string"==typeof c&&""===c.trim()||"number"==typeof c&&isNaN(c)||Array.isArray(c)&&0===c.length||"object"===e(c)&&!Array.isArray(c)&&0===Object.keys(m(c)).length);else if("object"!==e(c)||Array.isArray(c))n[a]=c;else{var i=m(c);Object.keys(i).length>0&&(n[a]=i)}}),n},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),""}},j=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)}},w=function(r,t){try{return r?JSON.parse(r):t}catch(r){return console.log("Try Parse Object error:",r),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),c=e%60,i=String(o).padStart(2,"0"),u=String(a).padStart(2,"0"),s=String(c).padStart(2,"0");return"".concat(i,":").concat(u,":").concat(s)},T=function(r){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(r),isNaN(n)&&(n=0)}catch(r){n=0}var a=n.toFixed(2).split("."),c=t(a,2),i=c[0],u=c[1],s=i.replace(/\B(?=(\d{3})+(?!\d))/g," "),f=s;return"00"!==u&&(f="".concat(s,".").concat(u)),"".concat(e).concat(f).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=c(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 i(r).format(e)}catch(r){return"unknown"}};export{g as cleanObject,j as decodeBase64,m as deepRemoveEmptyFields,b as encodeBase64,s as fetchDelay,N as formatCapitalizeFirstText,T as formatCurrency,D as formatDatetime,O as formatDatetimeStyles,E as formatDuration,Y as formatFileSize,x as formatNumberWithCommas,f 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,w as tryParseObject,v as windowScrollToTop};
|
|
2
2
|
//# sourceMappingURL=helpers.js.map
|
|
@@ -11,12 +11,14 @@ export interface IFieldMenuConfig<T> {
|
|
|
11
11
|
}
|
|
12
12
|
export type TFieldMenuConfigs<T> = Partial<Record<TFieldType<T>, Omit<IFieldMenuConfig<T>, 'field'>>>;
|
|
13
13
|
export interface IFilterMenuFormProps<T> {
|
|
14
|
+
isLoading?: boolean;
|
|
14
15
|
value?: TFieldValue;
|
|
15
16
|
validator?: FormValidator<Partial<TFieldModelValid<T>>>;
|
|
16
17
|
onBack: () => void;
|
|
17
18
|
onClose: () => void;
|
|
18
19
|
onSubmit: (key: TFieldType<T>, value?: TFieldValue, config?: IFieldMenuConfig<T>) => void;
|
|
19
20
|
onRemove?: (key: TFieldType<T>, value: TFieldValid) => void;
|
|
21
|
+
onRemoveField?: (key: TFieldType<T>) => void;
|
|
20
22
|
}
|
|
21
23
|
export interface IFilterMenuSlots {
|
|
22
24
|
popperProps?: Partial<PopperProps>;
|
|
@@ -14,6 +14,7 @@ export declare const filterSortClasses: {
|
|
|
14
14
|
root: string;
|
|
15
15
|
menu: string;
|
|
16
16
|
menuItem: string;
|
|
17
|
+
menuItemInner: string;
|
|
17
18
|
};
|
|
18
19
|
export declare const FilterSortStyled: import("@emotion/styled").StyledComponent<import("@mui/system").BoxOwnProps<import("@mui/material").Theme> & Omit<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & {
|
|
19
20
|
ref?: ((instance: HTMLDivElement | null) => void) | import("react").RefObject<HTMLDivElement> | null | undefined;
|
|
@@ -10,7 +10,7 @@ export declare const useFilterActions: <T>(context: IFilterBarContext<T>) => {
|
|
|
10
10
|
removeFilter: (field: TFieldType<T>) => void;
|
|
11
11
|
removeFilterByFieldValue: (field: TFieldType<T>, value: TFieldValid) => void;
|
|
12
12
|
clearAllFilters: () => void;
|
|
13
|
-
|
|
13
|
+
getFieldInfo: (field: TFieldType<T>) => TFieldValue | undefined;
|
|
14
14
|
getTotalCount: () => number;
|
|
15
15
|
hasSortByField: (field: TFieldType<T>) => boolean;
|
|
16
16
|
getSort: () => TFieldSort<T> | undefined;
|
|
@@ -4,6 +4,7 @@ export interface IFilterBarContextActions<T> {
|
|
|
4
4
|
setFilterState: (state: TFilterState<T>) => void;
|
|
5
5
|
}
|
|
6
6
|
export interface IFilterBarContextState<T> {
|
|
7
|
+
isLoading?: boolean;
|
|
7
8
|
filterState: TFilterState<T>;
|
|
8
9
|
}
|
|
9
10
|
export interface IFilterBarContext<T> extends IFilterBarContextState<T>, IFilterBarContextActions<T> {
|
|
@@ -10,21 +10,21 @@ export interface IFilterBarConfigs<T> {
|
|
|
10
10
|
initialFilterState?: TFilterState<T>;
|
|
11
11
|
/** Default filter logic, can be overridden by individual filters @default "and" */
|
|
12
12
|
defaultFilterLogic?: 'and' | 'or';
|
|
13
|
-
|
|
13
|
+
InputComponent?: ComponentType<IFilterInputProps<T>>;
|
|
14
14
|
inputConfig?: IFilterInputConfig<T>;
|
|
15
|
-
|
|
15
|
+
MenuComponent?: ComponentType<IFilterMenuProps<T>>;
|
|
16
16
|
menuConfig?: IFilterMenuConfig<T>;
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
sortConfig?: IFilterSortConfig<T>;
|
|
18
|
+
SortComponent?: ComponentType<IFilterSortProps<T>>;
|
|
19
19
|
/** Enable or disable the summary component. Default is true. */
|
|
20
20
|
enableSummary?: boolean;
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
SummaryComponent?: ComponentType<IFilterSummaryProps<T>>;
|
|
22
|
+
summaryConfig?: IFilterSummaryConfig<T>;
|
|
23
23
|
}
|
|
24
24
|
export interface IFilterBarProps<T> {
|
|
25
25
|
sx?: BoxProps['sx'];
|
|
26
26
|
value?: TFilterState<T>;
|
|
27
|
-
onChange?: (state: TFilterState<T>) => void;
|
|
27
|
+
onChange?: (state: TFilterState<T>) => Promise<void> | void;
|
|
28
28
|
}
|
|
29
29
|
interface IFilterBarState<T> extends IFilterBarContextState<T> {
|
|
30
30
|
}
|
|
@@ -32,12 +32,14 @@ export declare function createFilterBar<T>(configs: IFilterBarConfigs<T>): {
|
|
|
32
32
|
new (props: IFilterBarProps<T>): {
|
|
33
33
|
getInitialFilterState(): IFilterBarState<T>;
|
|
34
34
|
readonly filterState: TFilterState<T>;
|
|
35
|
+
readonly isLoading: boolean;
|
|
36
|
+
handleChange: (filterState: TFilterState<T>, state?: Partial<IFilterBarState<T>>) => Promise<void>;
|
|
35
37
|
setFilterState: (state: TFilterState<T>) => void;
|
|
36
38
|
onAddFilter: () => void;
|
|
37
39
|
onAddRemove: () => void;
|
|
38
40
|
render(): import("react/jsx-runtime").JSX.Element;
|
|
39
41
|
context: unknown;
|
|
40
|
-
setState<K extends
|
|
42
|
+
setState<K extends keyof IFilterBarState<T>>(state: IFilterBarState<T> | ((prevState: Readonly<IFilterBarState<T>>, props: Readonly<IFilterBarProps<T>>) => IFilterBarState<T> | Pick<IFilterBarState<T>, K> | null) | Pick<IFilterBarState<T>, K> | null, callback?: (() => void) | undefined): void;
|
|
41
43
|
forceUpdate(callback?: (() => void) | undefined): void;
|
|
42
44
|
readonly props: Readonly<IFilterBarProps<T>>;
|
|
43
45
|
state: Readonly<IFilterBarState<T>>;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ComponentType, FC } from 'react';
|
|
2
|
+
import { DataSurfaceViewMode } from './types';
|
|
3
|
+
import { IViewGridConfig, IViewGridProps } from './view-grid';
|
|
4
|
+
export interface IDataSurfaceProps<T> {
|
|
5
|
+
value?: T[];
|
|
6
|
+
totalValue?: number;
|
|
7
|
+
viewMode?: DataSurfaceViewMode;
|
|
8
|
+
}
|
|
9
|
+
export interface IDataSurfaceConfig<T> {
|
|
10
|
+
defaultViewMode?: DataSurfaceViewMode;
|
|
11
|
+
enableSingleViewTransition?: boolean;
|
|
12
|
+
listConfig?: any;
|
|
13
|
+
ListComponent?: ComponentType<any>;
|
|
14
|
+
gridConfig?: IViewGridConfig<T>;
|
|
15
|
+
GridComponent?: ComponentType<IViewGridProps<T>>;
|
|
16
|
+
}
|
|
17
|
+
export declare function createDataSurface<T>(config: IDataSurfaceConfig<T>): FC<IDataSurfaceProps<T>>;
|
|
18
|
+
export default createDataSurface;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './types';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import createDataSurface from './index.create';
|
|
2
|
+
import createViewGrid from './view-grid';
|
|
3
|
+
export declare class DinoDataSurFace {
|
|
4
|
+
createDataSurface: typeof createDataSurface;
|
|
5
|
+
createViewGrid: typeof createViewGrid;
|
|
6
|
+
}
|
|
7
|
+
export declare const dinoDataSurface: DinoDataSurFace;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { RenderStrategyRule } from "./view-grid.types";
|
|
2
|
+
export type TGetterId<T> = (item: T, index: number) => string | number;
|
|
3
|
+
/**
|
|
4
|
+
* Controls how the list is displayed.
|
|
5
|
+
* - `list` — items are displayed in a single column
|
|
6
|
+
* - `grid` — items are displayed in multiple columns (number of columns is determined by the available width)
|
|
7
|
+
*/
|
|
8
|
+
export declare const DataSurfaceViewMode: {
|
|
9
|
+
readonly list: "list";
|
|
10
|
+
readonly grid: "grid";
|
|
11
|
+
};
|
|
12
|
+
export type DataSurfaceViewMode = keyof typeof DataSurfaceViewMode;
|
|
13
|
+
/**
|
|
14
|
+
* Controls how the data is loaded and when the loading indicator is shown.
|
|
15
|
+
* - `pagination` — loading indicator is shown when the user clicks on the pagination controls
|
|
16
|
+
* - `infiniteScroll` — loading indicator is shown when the user scrolls to the end of the list
|
|
17
|
+
*/
|
|
18
|
+
export declare const DataSurfaceLoadingType: {
|
|
19
|
+
readonly pagination: "pagination";
|
|
20
|
+
readonly infiniteScroll: "infiniteScroll";
|
|
21
|
+
};
|
|
22
|
+
export type DataSurfaceLoadingType = keyof typeof DataSurfaceLoadingType;
|
|
23
|
+
export type TDataSurfaceState = {
|
|
24
|
+
viewMode?: DataSurfaceViewMode;
|
|
25
|
+
loadingType?: DataSurfaceLoadingType;
|
|
26
|
+
renderStrategy?: RenderStrategyRule;
|
|
27
|
+
};
|