dinocollab-core 1.1.4 → 1.1.5

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.
Files changed (30) hide show
  1. package/dist/data-view/convert-filter-to-graphql.js +1 -1
  2. package/dist/data-view/convert-filter-to-graphql.js.map +1 -1
  3. package/dist/data-view/create.active-filters-panel.js +1 -1
  4. package/dist/data-view/create.active-filters-panel.js.map +1 -1
  5. package/dist/data-view/create.data-view.js.map +1 -1
  6. package/dist/data-view/create.filter-bar.js +1 -1
  7. package/dist/data-view/create.filter-bar.js.map +1 -1
  8. package/dist/data-view/create.filter-menu.js +1 -1
  9. package/dist/data-view/create.filter-menu.js.map +1 -1
  10. package/dist/data-view/dino.js +1 -1
  11. package/dist/data-view/dino.js.map +1 -1
  12. package/dist/data-view/filter-store.js +1 -1
  13. package/dist/data-view/filter-store.js.map +1 -1
  14. package/dist/data-view/helpers.js +1 -1
  15. package/dist/data-view/helpers.js.map +1 -1
  16. package/dist/data-view/query-param-url.js +1 -1
  17. package/dist/data-view/query-param-url.js.map +1 -1
  18. package/dist/data-view/types.js.map +1 -1
  19. package/dist/data-view/ui.units.js +1 -1
  20. package/dist/data-view/ui.units.js.map +1 -1
  21. package/dist/data-view/view-mode.units.js +1 -1
  22. package/dist/data-view/view-mode.units.js.map +1 -1
  23. package/dist/types/data-view/convert-filter-to-graphql.d.ts +2 -1
  24. package/dist/types/data-view/create.data-view.d.ts +4 -10
  25. package/dist/types/data-view/dino.d.ts +1 -1
  26. package/dist/types/data-view/filter-store.d.ts +1 -1
  27. package/dist/types/data-view/helpers.d.ts +7 -1
  28. package/dist/types/data-view/query-param-url.d.ts +1 -1
  29. package/dist/types/data-view/types.d.ts +1 -1
  30. package/package.json +1 -1
@@ -1,2 +1,2 @@
1
- import{createClass as e,classCallCheck as i,defineProperty as r,createForOfIteratorHelper as t}from"../_virtual/_rollupPluginBabelHelpers.js";import{getKeyConverter as n,createRequestBuilder as l}from"dinocollab-http-service";var o=e((function e(o){var a=this;i(this,e),r(this,"fromFilter",(function(e){return a.filterStateStore=e,a})),r(this,"applySingleFilterCondition",(function(e,i){var r,t,n,l=null!==(r=null===(t=i.value)||void 0===t?void 0:t.toString())&&void 0!==r?r:"",o=null!==(n=i.keyConvert.deep)&&void 0!==n?n:i.keyConvert.field,a=i.keyConvert.custom;a?e.filterCustom(a(l),i.option):o&&e.filterContains(o,l,i.option)})),r(this,"applyMulFilterCondition",(function(e,i,r){if(0!==i.length)if(1===i.length){var n=i[0];r&&(n.option=r),a.applySingleFilterCondition(e,n)}else e.scope((function(e){var r,n=t(i);try{for(n.s();!(r=n.n()).done;){var l=r.value;a.applySingleFilterCondition(e,l)}}catch(e){n.e(e)}finally{n.f()}return e}),r)})),r(this,"handleFilter",(function(e){var i,r=null===(i=a.filterStateStore)||void 0===i?void 0:i.filter;if(r){var l=Object.keys(r).filter(Boolean),o=l.reduce((function(e,i){var l,o,u=n(i,a.keyConverter),v=null!==(l=r[i])&&void 0!==l?l:[],c=t(u);try{for(c.s();!(o=c.n()).done;){var f,d=o.value,s=t(v);try{for(s.s();!(f=s.n()).done;){var h,p=f.value;if(p.value){var y=null!==(h=e[i])&&void 0!==h?h:[];y.push({value:p.value,keyConvert:d,option:{logic:"Or"}}),e[i]=y}}}catch(e){s.e(e)}finally{s.f()}}}catch(e){c.e(e)}finally{c.f()}return e}),{});e.scope((function(i){for(var r in o){var t=o[r];t&&0!==t.length&&a.applyMulFilterCondition(1===l.length?e:i,t,{logic:"And"})}return i}),{logic:"And"})}})),r(this,"handleQuickSearch",(function(e){var i,r=null===(i=a.filterStateStore)||void 0===i?void 0:i.quickSearch;if(r&&a.quickSearchFields&&0!==a.quickSearchFields.length){var l=(Array.isArray(r)?r:[r]).map((function(e){return null==e?void 0:e.toString().trim()})).filter(Boolean);if(0!==l.length){var o=a.quickSearchFields.reduce((function(e,i){var r,o=n(i,a.keyConverter),u=t(o);try{for(u.s();!(r=u.n()).done;){var v,c=r.value,f=t(l);try{for(f.s();!(v=f.n()).done;){var d=v.value;d&&e.push({value:d,keyConvert:c})}}catch(e){f.e(e)}finally{f.f()}}}catch(e){u.e(e)}finally{u.f()}return e}),[]);o.length>0&&e.scope((function(e){var i,r=t(o);try{for(r.s();!(i=r.n()).done;){var n=i.value;a.applySingleFilterCondition(e,n)}}catch(e){r.e(e)}finally{r.f()}return e}))}}})),r(this,"handlePagination",(function(e){var i,r=null===(i=a.filterStateStore)||void 0===i?void 0:i.pagination;if(r)if(void 0!==r.page&&void 0!==r.pageSize){var t=r.page*r.pageSize;e.skip(t),e.take(r.pageSize)}else void 0!==r.pageSize&&e.take(r.pageSize)})),r(this,"handleSort",(function(e){var i,r=null===(i=a.filterStateStore)||void 0===i?void 0:i.sort;if(r){var t=n(r.field,a.keyConverter);if(t.length>0){var l,o=t[0],u=null!==(l=o.deep)&&void 0!==l?l:o.field;u&&e.sort(u,{direction:"asc"===r.direction?"ASC":"DESC"})}}})),r(this,"prebuild",(function(e){return a.prebuildFunc=e,a})),r(this,"build",(function(){var e=l({ignoreEmpty:!0});return a.handleSort(e),a.handlePagination(e),a.handleQuickSearch(e),a.handleFilter(e),a.prebuildFunc&&a.prebuildFunc(e),e.build()})),this.keyConverter=o.keyConverter,this.quickSearchFields=o.quickSearchFields})),a=function(e){return new o(e)};export{a as createConvertFilterToGraphQL,o as default};
1
+ import{createClass as e,classCallCheck as i,defineProperty as t,createForOfIteratorHelper as r}from"../_virtual/_rollupPluginBabelHelpers.js";import{getKeyConverter as n,createRequestBuilder as l}from"dinocollab-http-service";import{mapDateLogic as o}from"./helpers.js";var a=e((function e(a){var u=this;i(this,e),t(this,"fromFilter",(function(e){return u.filterStateStore=e,u})),t(this,"applySingleFilterCondition",(function(e,i){var t,r,n,l,a=null!==(t=null===(r=i.value)||void 0===r?void 0:r.toString())&&void 0!==t?t:"",u=null!==(n=i.keyConvert.deep)&&void 0!==n?n:i.keyConvert.field,c=i.keyConvert.custom;if(c)e.filterCustom(c(a),i.option);else if(u)if("date"===(null===(l=i.filter)||void 0===l?void 0:l.type)&&i.filter.dateLogic){var f=o[i.filter.dateLogic];e.filterCustom("".concat(u.toString()).concat(f,'"').concat(a,'"'),i.option)}else e.filterContains(u,a,i.option)})),t(this,"applyMulFilterCondition",(function(e,i,t){if(0!==i.length)if(1===i.length){var n=i[0];t&&(n.option=t),u.applySingleFilterCondition(e,n)}else e.scope((function(e){var t,n=r(i);try{for(n.s();!(t=n.n()).done;){var l=t.value;u.applySingleFilterCondition(e,l)}}catch(e){n.e(e)}finally{n.f()}return e}),t)})),t(this,"handleFilter",(function(e){var i,t=null===(i=u.filterStateStore)||void 0===i?void 0:i.filter;if(t){var l=Object.keys(t).filter(Boolean),o=l.reduce((function(e,i){var l,o,a=n(i,u.keyConverter),c=null!==(l=t[i])&&void 0!==l?l:[],f=r(a);try{for(f.s();!(o=f.n()).done;){var v,d=o.value,s=r(c);try{for(s.s();!(v=s.n()).done;){var p,h=v.value;if(h.value){var y=null!==(p=e[i])&&void 0!==p?p:[];y.push({value:h.value,keyConvert:d,filter:h,option:{logic:"Or"}}),e[i]=y}}}catch(e){s.e(e)}finally{s.f()}}}catch(e){f.e(e)}finally{f.f()}return e}),{});e.scope((function(i){for(var t in o){var r=o[t];r&&0!==r.length&&u.applyMulFilterCondition(1===l.length?e:i,r,{logic:"And"})}return i}),{logic:"And"})}})),t(this,"handleQuickSearch",(function(e){var i,t=null===(i=u.filterStateStore)||void 0===i?void 0:i.quickSearch;if(t&&u.quickSearchFields&&0!==u.quickSearchFields.length){var l=(Array.isArray(t)?t:[t]).map((function(e){return null==e?void 0:e.toString().trim()})).filter(Boolean);if(0!==l.length){var o=u.quickSearchFields.reduce((function(e,i){var t,o=n(i,u.keyConverter),a=r(o);try{for(a.s();!(t=a.n()).done;){var c,f=t.value,v=r(l);try{for(v.s();!(c=v.n()).done;){var d=c.value;d&&e.push({value:d,keyConvert:f})}}catch(e){v.e(e)}finally{v.f()}}}catch(e){a.e(e)}finally{a.f()}return e}),[]);o.length>0&&e.scope((function(e){var i,t=r(o);try{for(t.s();!(i=t.n()).done;){var n=i.value;u.applySingleFilterCondition(e,n)}}catch(e){t.e(e)}finally{t.f()}return e}))}}})),t(this,"handlePagination",(function(e){var i,t=null===(i=u.filterStateStore)||void 0===i?void 0:i.pagination;if(t)if(void 0!==t.page&&void 0!==t.pageSize){var r=t.page*t.pageSize;e.skip(r),e.take(t.pageSize)}else void 0!==t.pageSize&&e.take(t.pageSize)})),t(this,"handleSort",(function(e){var i,t=null===(i=u.filterStateStore)||void 0===i?void 0:i.sort;if(t){var r=n(t.field,u.keyConverter);if(r.length>0){var l,o=r[0],a=null!==(l=o.deep)&&void 0!==l?l:o.field;a&&e.sort(a,{direction:"asc"===t.direction?"ASC":"DESC"})}}})),t(this,"prebuild",(function(e){return u.prebuildFunc=e,u})),t(this,"build",(function(){var e=l({ignoreEmpty:!0});return u.handleSort(e),u.handlePagination(e),u.handleQuickSearch(e),u.handleFilter(e),u.prebuildFunc&&u.prebuildFunc(e),e.build()})),this.keyConverter=a.keyConverter,this.quickSearchFields=a.quickSearchFields})),u=function(e){return new a(e)};export{u as createConvertFilterToGraphQL,a as default};
2
2
  //# sourceMappingURL=convert-filter-to-graphql.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"convert-filter-to-graphql.js","sources":["../../src/data-view/convert-filter-to-graphql.ts"],"sourcesContent":["import { createRequestBuilder, getKeyConverter, RequestParam } from 'dinocollab-http-service'\r\nimport type { IFilterOption, IKeyConverterDef, IKeyConverterModel } from 'dinocollab-http-service'\r\nimport { IFilterState } from './types'\r\n\r\nexport interface ISingleFilterCondition<G extends object> {\r\n value: any\r\n keyConvert: IKeyConverterDef<G>\r\n option?: Partial<IFilterOption>\r\n}\r\n\r\nexport interface IFilterToGraphQLParams<T, G extends object> {\r\n keyConverter: IKeyConverterModel<T, G>\r\n quickSearchFields?: (keyof T)[]\r\n}\r\n\r\nclass ConvertFilterToGraphQL<T, G extends object> {\r\n private keyConverter\r\n private quickSearchFields?: (keyof T)[]\r\n\r\n constructor(params: IFilterToGraphQLParams<T, G>) {\r\n this.keyConverter = params.keyConverter\r\n this.quickSearchFields = params.quickSearchFields\r\n }\r\n\r\n private filterStateStore?: IFilterState<T>\r\n fromFilter = (filterState: IFilterState<T>) => {\r\n this.filterStateStore = filterState\r\n return this\r\n }\r\n\r\n private applySingleFilterCondition = (rp: RequestParam<G>, params: ISingleFilterCondition<G>) => {\r\n const val = params.value?.toString() ?? ''\r\n const targetField = (params.keyConvert.deep ?? params.keyConvert.field) as keyof G\r\n const custom = params.keyConvert.custom\r\n if (custom) rp.filterCustom(custom(val), params.option)\r\n else if (targetField) rp.filterContains(targetField, val, params.option)\r\n }\r\n\r\n private applyMulFilterCondition = (rp: RequestParam<G>, items: ISingleFilterCondition<G>[], option?: Partial<IFilterOption>) => {\r\n if (items.length === 0) return\r\n else if (items.length === 1) {\r\n const i = items[0]\r\n if (option) i.option = option\r\n this.applySingleFilterCondition(rp, i)\r\n } else {\r\n rp.scope((q) => {\r\n for (const item of items) {\r\n this.applySingleFilterCondition(q, item)\r\n }\r\n return q\r\n }, option)\r\n }\r\n }\r\n\r\n private handleFilter = (rp: RequestParam<G>) => {\r\n const filter = this.filterStateStore?.filter\r\n if (!filter) return\r\n\r\n const keys = Object.keys(filter).filter(Boolean) as (keyof T)[]\r\n const list = keys.reduce<{ [key in keyof T]?: ISingleFilterCondition<G>[] }>((a, k) => {\r\n const keyConverteds = getKeyConverter(k, this.keyConverter)\r\n const items = filter[k] ?? []\r\n for (const keyConverted of keyConverteds) {\r\n for (const item of items) {\r\n if (!item.value) continue\r\n const list: ISingleFilterCondition<G>[] = a[k] ?? []\r\n list.push({ value: item.value, keyConvert: keyConverted, option: { logic: 'Or' } })\r\n a[k] = list\r\n }\r\n }\r\n return a\r\n }, {})\r\n\r\n rp.scope(\r\n (q) => {\r\n for (const key in list) {\r\n const items = list[key]\r\n if (!items || items.length === 0) continue\r\n this.applyMulFilterCondition(keys.length === 1 ? rp : q, items, { logic: 'And' })\r\n }\r\n return q\r\n },\r\n { logic: 'And' }\r\n )\r\n }\r\n\r\n private handleQuickSearch = (rp: RequestParam<G>) => {\r\n const quickSearch = this.filterStateStore?.quickSearch\r\n if (!quickSearch || !this.quickSearchFields || this.quickSearchFields.length === 0) return\r\n\r\n // Convert quickSearch to array of strings\r\n const values = Array.isArray(quickSearch) ? quickSearch : [quickSearch]\r\n const trimmedValues = values.map((v) => v?.toString().trim()).filter(Boolean)\r\n\r\n if (trimmedValues.length === 0) return\r\n\r\n const list = this.quickSearchFields.reduce<ISingleFilterCondition<G>[]>((a, field) => {\r\n const keyConverteds = getKeyConverter(field, this.keyConverter)\r\n for (const keyConverted of keyConverteds) {\r\n for (const val of trimmedValues) {\r\n if (!val) continue\r\n a.push({ value: val, keyConvert: keyConverted })\r\n }\r\n }\r\n return a\r\n }, [])\r\n\r\n // Apply quick search with OR logic (scope)\r\n if (list.length > 0) {\r\n rp.scope((q) => {\r\n for (const item of list) {\r\n this.applySingleFilterCondition(q, item)\r\n }\r\n return q\r\n })\r\n }\r\n }\r\n\r\n private handlePagination = (rp: RequestParam<G>) => {\r\n const pagination = this.filterStateStore?.pagination\r\n if (!pagination) return\r\n\r\n // Convert page-based pagination to skip/take\r\n if (pagination.page !== undefined && pagination.pageSize !== undefined) {\r\n const skip = pagination.page * pagination.pageSize\r\n rp.skip(skip)\r\n rp.take(pagination.pageSize)\r\n } else if (pagination.pageSize !== undefined) {\r\n rp.take(pagination.pageSize)\r\n }\r\n }\r\n\r\n private handleSort = (rp: RequestParam<G>) => {\r\n const sort = this.filterStateStore?.sort\r\n if (!sort) return\r\n\r\n const keyConverteds = getKeyConverter(sort.field, this.keyConverter)\r\n if (keyConverteds.length > 0) {\r\n const keyConverted = keyConverteds[0] // Use first converter for sorting\r\n const targetField = (keyConverted.deep ?? keyConverted.field) as keyof G\r\n\r\n if (targetField) {\r\n rp.sort(targetField, { direction: sort.direction === 'asc' ? 'ASC' : 'DESC' })\r\n }\r\n }\r\n }\r\n\r\n private prebuildFunc?: (rp: RequestParam<G>) => RequestParam<G>\r\n prebuild = (func: (requestParam: RequestParam<G>) => RequestParam<G>) => {\r\n this.prebuildFunc = func\r\n return this\r\n }\r\n\r\n build = () => {\r\n const requestBuilder = createRequestBuilder<G>({ ignoreEmpty: true })\r\n this.handleSort(requestBuilder)\r\n this.handlePagination(requestBuilder)\r\n this.handleQuickSearch(requestBuilder)\r\n this.handleFilter(requestBuilder)\r\n if (this.prebuildFunc) this.prebuildFunc(requestBuilder)\r\n return requestBuilder.build()\r\n }\r\n}\r\nexport default ConvertFilterToGraphQL\r\n\r\nexport const createConvertFilterToGraphQL = <T, G extends object>(params: IFilterToGraphQLParams<T, G>) => {\r\n return new ConvertFilterToGraphQL<T, G>(params)\r\n}\r\n"],"names":["ConvertFilterToGraphQL","_createClass","params","_this","this","_classCallCheck","_defineProperty","filterState","filterStateStore","rp","_params$value$toStrin","_params$value","_params$keyConvert$de","val","value","toString","targetField","keyConvert","deep","field","custom","filterCustom","option","filterContains","items","length","i","applySingleFilterCondition","scope","q","_step","_iterator","_createForOfIteratorHelper","s","n","done","item","err","e","f","_this$filterStateStor","filter","keys","Object","Boolean","list","reduce","a","k","_filter$k","_step2","keyConverteds","getKeyConverter","keyConverter","_iterator2","_step3","keyConverted","_iterator3","_a$k","push","logic","key","applyMulFilterCondition","_this$filterStateStor2","quickSearch","quickSearchFields","trimmedValues","Array","isArray","map","v","trim","_step4","_iterator4","_step5","_iterator5","_step6","_iterator6","_this$filterStateStor3","pagination","undefined","page","pageSize","skip","take","_this$filterStateStor4","sort","_keyConverted$deep","direction","func","prebuildFunc","requestBuilder","createRequestBuilder","ignoreEmpty","handleSort","handlePagination","handleQuickSearch","handleFilter","build","createConvertFilterToGraphQL"],"mappings":"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"}
1
+ {"version":3,"file":"convert-filter-to-graphql.js","sources":["../../src/data-view/convert-filter-to-graphql.ts"],"sourcesContent":["import { createRequestBuilder, getKeyConverter, RequestParam } from 'dinocollab-http-service'\r\nimport type { IFilterOption, IKeyConverterDef, IKeyConverterModel } from 'dinocollab-http-service'\r\nimport { IFilterDateLogic, IFilterItem, IFilterState } from './types'\r\nimport { mapDateLogic } from './helpers'\r\n\r\nexport interface ISingleFilterCondition<G extends object> {\r\n value: any\r\n keyConvert: IKeyConverterDef<G>\r\n option?: Partial<IFilterOption>\r\n filter?: IFilterItem\r\n}\r\n\r\nexport interface IFilterToGraphQLParams<T, G extends object> {\r\n keyConverter: IKeyConverterModel<T, G>\r\n quickSearchFields?: (keyof T)[]\r\n}\r\n\r\nclass ConvertFilterToGraphQL<T, G extends object> {\r\n private keyConverter\r\n private quickSearchFields?: (keyof T)[]\r\n\r\n constructor(params: IFilterToGraphQLParams<T, G>) {\r\n this.keyConverter = params.keyConverter\r\n this.quickSearchFields = params.quickSearchFields\r\n }\r\n\r\n private filterStateStore?: IFilterState<T>\r\n fromFilter = (filterState: IFilterState<T>) => {\r\n this.filterStateStore = filterState\r\n return this\r\n }\r\n\r\n private applySingleFilterCondition = (rp: RequestParam<G>, params: ISingleFilterCondition<G>) => {\r\n const val = params.value?.toString() ?? ''\r\n const targetField = (params.keyConvert.deep ?? params.keyConvert.field) as keyof G\r\n const custom = params.keyConvert.custom\r\n if (custom) {\r\n rp.filterCustom(custom(val), params.option)\r\n return\r\n }\r\n if (!targetField) return\r\n if (params.filter?.type === 'date' && params.filter.dateLogic) {\r\n const logic = mapDateLogic[params.filter.dateLogic]\r\n rp.filterCustom(`${targetField.toString()}${logic}\"${val}\"`, params.option)\r\n return\r\n }\r\n rp.filterContains(targetField, val, params.option)\r\n }\r\n\r\n private applyMulFilterCondition = (rp: RequestParam<G>, items: ISingleFilterCondition<G>[], option?: Partial<IFilterOption>) => {\r\n if (items.length === 0) return\r\n else if (items.length === 1) {\r\n const i = items[0]\r\n if (option) i.option = option\r\n this.applySingleFilterCondition(rp, i)\r\n } else {\r\n rp.scope((q) => {\r\n for (const item of items) {\r\n this.applySingleFilterCondition(q, item)\r\n }\r\n return q\r\n }, option)\r\n }\r\n }\r\n\r\n private handleFilter = (rp: RequestParam<G>) => {\r\n const filter = this.filterStateStore?.filter\r\n if (!filter) return\r\n\r\n const keys = Object.keys(filter).filter(Boolean) as (keyof T)[]\r\n const list = keys.reduce<{ [key in keyof T]?: ISingleFilterCondition<G>[] }>((a, k) => {\r\n const keyConverteds = getKeyConverter(k, this.keyConverter)\r\n const items = filter[k] ?? []\r\n for (const keyConverted of keyConverteds) {\r\n for (const item of items) {\r\n if (!item.value) continue\r\n const list: ISingleFilterCondition<G>[] = a[k] ?? []\r\n list.push({ value: item.value, keyConvert: keyConverted, filter: item, option: { logic: 'Or' } })\r\n a[k] = list\r\n }\r\n }\r\n return a\r\n }, {})\r\n\r\n rp.scope(\r\n (q) => {\r\n for (const key in list) {\r\n const items = list[key]\r\n if (!items || items.length === 0) continue\r\n this.applyMulFilterCondition(keys.length === 1 ? rp : q, items, { logic: 'And' })\r\n }\r\n return q\r\n },\r\n { logic: 'And' }\r\n )\r\n }\r\n\r\n private handleQuickSearch = (rp: RequestParam<G>) => {\r\n const quickSearch = this.filterStateStore?.quickSearch\r\n if (!quickSearch || !this.quickSearchFields || this.quickSearchFields.length === 0) return\r\n\r\n // Convert quickSearch to array of strings\r\n const values = Array.isArray(quickSearch) ? quickSearch : [quickSearch]\r\n const trimmedValues = values.map((v) => v?.toString().trim()).filter(Boolean)\r\n\r\n if (trimmedValues.length === 0) return\r\n\r\n const list = this.quickSearchFields.reduce<ISingleFilterCondition<G>[]>((a, field) => {\r\n const keyConverteds = getKeyConverter(field, this.keyConverter)\r\n for (const keyConverted of keyConverteds) {\r\n for (const val of trimmedValues) {\r\n if (!val) continue\r\n a.push({ value: val, keyConvert: keyConverted })\r\n }\r\n }\r\n return a\r\n }, [])\r\n\r\n // Apply quick search with OR logic (scope)\r\n if (list.length > 0) {\r\n rp.scope((q) => {\r\n for (const item of list) {\r\n this.applySingleFilterCondition(q, item)\r\n }\r\n return q\r\n })\r\n }\r\n }\r\n\r\n private handlePagination = (rp: RequestParam<G>) => {\r\n const pagination = this.filterStateStore?.pagination\r\n if (!pagination) return\r\n\r\n // Convert page-based pagination to skip/take\r\n if (pagination.page !== undefined && pagination.pageSize !== undefined) {\r\n const skip = pagination.page * pagination.pageSize\r\n rp.skip(skip)\r\n rp.take(pagination.pageSize)\r\n } else if (pagination.pageSize !== undefined) {\r\n rp.take(pagination.pageSize)\r\n }\r\n }\r\n\r\n private handleSort = (rp: RequestParam<G>) => {\r\n const sort = this.filterStateStore?.sort\r\n if (!sort) return\r\n\r\n const keyConverteds = getKeyConverter(sort.field, this.keyConverter)\r\n if (keyConverteds.length > 0) {\r\n const keyConverted = keyConverteds[0] // Use first converter for sorting\r\n const targetField = (keyConverted.deep ?? keyConverted.field) as keyof G\r\n\r\n if (targetField) {\r\n rp.sort(targetField, { direction: sort.direction === 'asc' ? 'ASC' : 'DESC' })\r\n }\r\n }\r\n }\r\n\r\n private prebuildFunc?: (rp: RequestParam<G>) => RequestParam<G>\r\n prebuild = (func: (requestParam: RequestParam<G>) => RequestParam<G>) => {\r\n this.prebuildFunc = func\r\n return this\r\n }\r\n\r\n build = () => {\r\n const requestBuilder = createRequestBuilder<G>({ ignoreEmpty: true })\r\n this.handleSort(requestBuilder)\r\n this.handlePagination(requestBuilder)\r\n this.handleQuickSearch(requestBuilder)\r\n this.handleFilter(requestBuilder)\r\n if (this.prebuildFunc) this.prebuildFunc(requestBuilder)\r\n return requestBuilder.build()\r\n }\r\n}\r\nexport default ConvertFilterToGraphQL\r\n\r\nexport const createConvertFilterToGraphQL = <T, G extends object>(params: IFilterToGraphQLParams<T, G>) => {\r\n return new ConvertFilterToGraphQL<T, G>(params)\r\n}\r\n"],"names":["ConvertFilterToGraphQL","_createClass","params","_this","this","_classCallCheck","_defineProperty","filterState","filterStateStore","rp","_params$value$toStrin","_params$value","_params$keyConvert$de","_params$filter","val","value","toString","targetField","keyConvert","deep","field","custom","filterCustom","option","filter","type","dateLogic","logic","mapDateLogic","concat","filterContains","items","length","i","applySingleFilterCondition","scope","q","_step","_iterator","_createForOfIteratorHelper","s","n","done","item","err","e","f","_this$filterStateStor","keys","Object","Boolean","list","reduce","a","k","_filter$k","_step2","keyConverteds","getKeyConverter","keyConverter","_iterator2","_step3","keyConverted","_iterator3","_a$k","push","key","applyMulFilterCondition","_this$filterStateStor2","quickSearch","quickSearchFields","trimmedValues","Array","isArray","map","v","trim","_step4","_iterator4","_step5","_iterator5","_step6","_iterator6","_this$filterStateStor3","pagination","undefined","page","pageSize","skip","take","_this$filterStateStor4","sort","_keyConverted$deep","direction","func","prebuildFunc","requestBuilder","createRequestBuilder","ignoreEmpty","handleSort","handlePagination","handleQuickSearch","handleFilter","build","createConvertFilterToGraphQL"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as e,inherits as t,createClass as i,classCallCheck as r,callSuper as a}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as n,Fragment as l,jsxs as o}from"react/jsx-runtime";import{Component as c,Fragment as s}from"react";import{styled as d,Box as u,Collapse as m,Typography as v,Chip as f}from"@mui/material";import{createFilterStore as h}from"./filter-store.js";import{ClearAllButton as p,mapSortConfigs as C}from"./ui.units.js";import{mapDataViewContext as x}from"./context.js";var S={root:"ActiveFiltersPanel-root",content:"ActiveFiltersPanel-content",item:"ActiveFiltersPanel-item",itemContent:"ActiveFiltersPanel-itemContent",itemChip:"ActiveFiltersPanel-itemChip",removeButton:"ActiveFiltersPanel-removeButton",overlay:"ActiveFiltersPanel-overlay"};function g(){return function(){function d(t){var i;return r(this,d),i=a(this,d,[t]),e(i,"handleAnimationExited",(function(){i.setState({isClosing:!0})})),e(i,"renderItems",(function(e){var t;return o(u,{className:S.item,children:[o(v,{variant:"caption",sx:{fontWeight:700},children:[e.label||(null===(t=e.field)||void 0===t?void 0:t.toString()),":"]}),n(u,{className:S.itemContent,children:e.items.map((function(t){return n(f,{clickable:!0,size:"small",label:t.label||t.value,className:S.itemChip,onDelete:function(){e.isQuickSearch?i.removeQuickSearch(t):e.field&&i.removeFilter(e.field,t)}},t.value)}))})]})})),e(i,"renderFilters",(function(){var e,t=(null===(e=i.dataViewContext.filterState)||void 0===e?void 0:e.filter)||{},r=Object.keys(t);return 0===r.length?n(l,{}):r.map((function(e){var r,a=(null!==(r=t[e])&&void 0!==r?r:[]).reduce((function(e,t){var i;return t.value&&e.push({value:null===(i=t.value)||void 0===i?void 0:i.toString(),label:t.label}),e}),[]);return n(s,{children:i.renderItems({field:e,label:e.toString(),items:a})},e.toString())}))})),e(i,"renderSort",(function(){var e,t,r=null===(e=i.dataViewContext.filterState)||void 0===e?void 0:e.sort;if(!r)return n(l,{});var a=null===(t=i.dataViewContext.filterBarConfigs.fields)||void 0===t?void 0:t[r.field],c=(null==a?void 0:a.label)||r.field.toString(),s=C[r.direction];return o(u,{className:S.item,children:[n(v,{variant:"caption",sx:{fontWeight:700},children:"Sort:"}),n(u,{className:S.itemContent,children:n(f,{clickable:!0,size:"small",label:o(u,{sx:{display:"flex",alignItems:"center",gap:.5},children:[n("span",{children:c}),s.icon]}),className:S.itemChip,onClick:i.toggleSortDirection,onDelete:function(){return i.removeSort()},title:"".concat(c," - ").concat(s.title)})})]})})),e(i,"removeFilter",(function(e,t){var r=h(i.dataViewContext.filterState).removeFilterItem(e,t.value,{reason:"field"});i.dataViewContext.onFilterStateChange(r.build())})),e(i,"removeQuickSearch",(function(e){var t=h(i.dataViewContext.filterState).removeQuickSearchItem(e.value,{reason:"quickSearch"});i.dataViewContext.onFilterStateChange(t.build())})),e(i,"removeSort",(function(){var e=h(i.dataViewContext.filterState).removeSort({reason:"sort"});i.dataViewContext.onFilterStateChange(e.build())})),e(i,"toggleSortDirection",(function(){var e=h(i.dataViewContext.filterState).toggleSortDirection({reason:"sort"});i.dataViewContext.onFilterStateChange(e.build())})),e(i,"handleClearAll",(function(){var e=h(i.dataViewContext.filterState).reset();i.dataViewContext.onFilterStateChange(e.build())})),i.state={data:null,isClosing:!1},i}return t(d,c),i(d,[{key:"render",value:function(){var e=this;return x((function(t){if(e.dataViewContext=t,!e.dataViewContext)return n(l,{});var i=e.dataViewContext.filterBarConfigs.defaultValue,r=h(e.dataViewContext.filterState,i).isEmpty();return n(m,{in:!r,timeout:300,unmountOnExit:!0,orientation:"vertical",onExited:e.handleAnimationExited,children:o(b,{className:S.root,children:[o(u,{className:S.content,children:[e.renderSort(),e.renderQuickSearch(),e.renderFilters(),!r&&n(p,{className:S.removeButton,onClick:e.handleClearAll})]}),e.props.loading&&n(u,{className:S.overlay})]})})}))}},{key:"renderQuickSearch",value:function(){var e,t=(null===(e=this.dataViewContext.filterState)||void 0===e?void 0:e.quickSearch)||[],i=(Array.isArray(t)?t:[t]).map((function(e){return{value:e}}));return i&&0!==i.length?this.renderItems({label:"Quick search",items:i,isQuickSearch:!0}):n(l,{})}}])}()}var b=d(u)(e(e(e(e(e({position:"relative"},".".concat(S.content),{display:"flex",alignItems:"center",flexWrap:"wrap",gap:"8px"}),".".concat(S.item),{display:"flex",border:"dashed 1px var(--color-divider, rgba(145 160 170 / 20%))",borderRadius:"4px",alignItems:"center",padding:"6px 8px",gap:"8px"}),".".concat(S.itemContent),{display:"flex",gap:"4px"}),".".concat(S.itemChip),{borderRadius:"4px"}),".".concat(S.overlay),{position:"absolute",top:0,left:0,width:"100%",height:"100%",backdropFilter:"blur(1px)"}));export{S as activeFiltersPanelClasses,g as default};
1
+ import{defineProperty as e,inherits as t,createClass as i,classCallCheck as r,callSuper as a}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as n,Fragment as l,jsxs as o}from"react/jsx-runtime";import{Component as c,Fragment as s}from"react";import{styled as d,Box as u,Collapse as m,Typography as v,Chip as f}from"@mui/material";import{createFilterStore as p}from"./filter-store.js";import{ClearAllButton as h,mapSortConfigs as C}from"./ui.units.js";import{mapDataViewContext as g}from"./context.js";import{formatDatetime as x}from"../utils/helpers.js";import"../utils/dayjs-config.js";import"react-router-dom";import"../utils/query-param.js";import{mapDateLogicText as S}from"./helpers.js";var b={root:"ActiveFiltersPanel-root",content:"ActiveFiltersPanel-content",item:"ActiveFiltersPanel-item",itemContent:"ActiveFiltersPanel-itemContent",itemChip:"ActiveFiltersPanel-itemChip",removeButton:"ActiveFiltersPanel-removeButton",overlay:"ActiveFiltersPanel-overlay"};function w(){return function(){function d(t){var i;return r(this,d),i=a(this,d,[t]),e(i,"handleAnimationExited",(function(){i.setState({isClosing:!0})})),e(i,"renderItems",(function(e){var t;return o(u,{className:b.item,children:[o(v,{variant:"caption",sx:{fontWeight:700},children:[e.label||(null===(t=e.field)||void 0===t?void 0:t.toString()),":"]}),n(u,{className:b.itemContent,children:e.items.map((function(t){return n(f,{clickable:!0,size:"small",label:t.label||t.value,className:b.itemChip,onDelete:function(){e.isQuickSearch?i.removeQuickSearch(t):e.field&&i.removeFilter(e.field,t)}},t.value)}))})]})})),e(i,"renderFilters",(function(){var e,t=(null===(e=i.dataViewContext.filterState)||void 0===e?void 0:e.filter)||{},r=Object.keys(t);return 0===r.length?n(l,{}):r.map((function(e){var r,a=(null!==(r=t[e])&&void 0!==r?r:[]).reduce((function(e,t){var i,r,a,n,l=t.label||(null===(i=t.value)||void 0===i?void 0:i.toString());"date"===t.type&&t.dateLogic&&(l="".concat(S[t.dateLogic]," ").concat(x(null!==(a=null===(n=t.value)||void 0===n?void 0:n.toString())&&void 0!==a?a:"","style2")));return t.value&&e.push({value:null===(r=t.value)||void 0===r?void 0:r.toString(),label:l}),e}),[]);return n(s,{children:i.renderItems({field:e,label:e.toString(),items:a})},e.toString())}))})),e(i,"renderSort",(function(){var e,t,r=null===(e=i.dataViewContext.filterState)||void 0===e?void 0:e.sort;if(!r)return n(l,{});var a=null===(t=i.dataViewContext.filterBarConfigs.fields)||void 0===t?void 0:t[r.field],c=(null==a?void 0:a.label)||r.field.toString(),s=C[r.direction];return o(u,{className:b.item,children:[n(v,{variant:"caption",sx:{fontWeight:700},children:"Sort:"}),n(u,{className:b.itemContent,children:n(f,{clickable:!0,size:"small",label:o(u,{sx:{display:"flex",alignItems:"center",gap:.5},children:[n("span",{children:c}),s.icon]}),className:b.itemChip,onClick:i.toggleSortDirection,onDelete:function(){return i.removeSort()},title:"".concat(c," - ").concat(s.title)})})]})})),e(i,"removeFilter",(function(e,t){var r=p(i.dataViewContext.filterState).removeFilterItem(e,t.value,{reason:"field"});i.dataViewContext.onFilterStateChange(r.build())})),e(i,"removeQuickSearch",(function(e){var t=p(i.dataViewContext.filterState).removeQuickSearchItem(e.value,{reason:"quickSearch"});i.dataViewContext.onFilterStateChange(t.build())})),e(i,"removeSort",(function(){var e=p(i.dataViewContext.filterState).removeSort({reason:"sort"});i.dataViewContext.onFilterStateChange(e.build())})),e(i,"toggleSortDirection",(function(){var e=p(i.dataViewContext.filterState).toggleSortDirection({reason:"sort"});i.dataViewContext.onFilterStateChange(e.build())})),e(i,"handleClearAll",(function(){var e=i.dataViewContext.filterBarConfigs.defaultValue||{},t=p(i.dataViewContext.filterState,e).reset();i.dataViewContext.onFilterStateChange(t.build())})),i.state={data:null,isClosing:!1},i}return t(d,c),i(d,[{key:"render",value:function(){var e=this;return g((function(t){if(e.dataViewContext=t,!e.dataViewContext)return n(l,{});var i=e.dataViewContext.filterBarConfigs.defaultValue,r=p(e.dataViewContext.filterState,i).isEmpty();return n(m,{in:!r,timeout:300,unmountOnExit:!0,orientation:"vertical",onExited:e.handleAnimationExited,children:o(V,{className:b.root,children:[o(u,{className:b.content,children:[e.renderSort(),e.renderQuickSearch(),e.renderFilters(),!r&&n(h,{className:b.removeButton,onClick:e.handleClearAll})]}),e.props.loading&&n(u,{className:b.overlay})]})})}))}},{key:"renderQuickSearch",value:function(){var e,t=(null===(e=this.dataViewContext.filterState)||void 0===e?void 0:e.quickSearch)||[],i=(Array.isArray(t)?t:[t]).map((function(e){return{value:e}}));return i&&0!==i.length?this.renderItems({label:"Quick search",items:i,isQuickSearch:!0}):n(l,{})}}])}()}var V=d(u)(e(e(e(e(e({position:"relative"},".".concat(b.content),{display:"flex",alignItems:"center",flexWrap:"wrap",gap:"8px"}),".".concat(b.item),{display:"flex",border:"dashed 1px var(--color-divider, rgba(145 160 170 / 20%))",borderRadius:"4px",alignItems:"center",padding:"6px 8px",gap:"8px"}),".".concat(b.itemContent),{display:"flex",gap:"4px"}),".".concat(b.itemChip),{borderRadius:"4px"}),".".concat(b.overlay),{position:"absolute",top:0,left:0,width:"100%",height:"100%",backdropFilter:"blur(1px)"}));export{b as activeFiltersPanelClasses,w as default};
2
2
  //# sourceMappingURL=create.active-filters-panel.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.active-filters-panel.js","sources":["../../src/data-view/create.active-filters-panel.tsx"],"sourcesContent":["import React, { Component, ComponentType, Fragment } from 'react'\r\nimport { Box, Chip, Collapse, styled, Typography } from '@mui/material'\r\nimport { createFilterStore } from './filter-store'\r\nimport { ClearAllButton, mapSortConfigs } from './ui.units'\r\nimport { IDataViewContext, mapDataViewContext } from './context'\r\nimport { IFilterItem, IFilterMap, IFilterState, IItemBase } from './types'\r\n\r\nexport const activeFiltersPanelClasses = {\r\n root: 'ActiveFiltersPanel-root',\r\n content: 'ActiveFiltersPanel-content',\r\n item: 'ActiveFiltersPanel-item',\r\n itemContent: 'ActiveFiltersPanel-itemContent',\r\n itemChip: 'ActiveFiltersPanel-itemChip',\r\n removeButton: 'ActiveFiltersPanel-removeButton',\r\n overlay: 'ActiveFiltersPanel-overlay'\r\n}\r\n\r\ninterface IRenderItemsParams<T> {\r\n field?: keyof T\r\n label?: string\r\n items: IItemBase[]\r\n isQuickSearch?: boolean\r\n}\r\n\r\nexport interface IActiveFiltersPanelProps {\r\n loading?: boolean\r\n}\r\n\r\nexport interface IActiveFiltersPanelState<T> {\r\n data: IFilterState<T> | null\r\n isClosing: boolean\r\n}\r\n\r\nfunction createActiveFiltersPanel<T>(): ComponentType<IActiveFiltersPanelProps> {\r\n class ActiveFiltersPanel extends Component<IActiveFiltersPanelProps, IActiveFiltersPanelState<T>> {\r\n declare dataViewContext: IDataViewContext<T>\r\n\r\n constructor(props: IActiveFiltersPanelProps) {\r\n super(props)\r\n this.state = {\r\n data: null,\r\n isClosing: false\r\n }\r\n }\r\n\r\n // Handle animation completion\r\n private handleAnimationExited = () => {\r\n this.setState({ isClosing: true })\r\n }\r\n\r\n render() {\r\n return mapDataViewContext((context) => {\r\n this.dataViewContext = context\r\n if (!this.dataViewContext) return <></>\r\n const { defaultValue } = this.dataViewContext.filterBarConfigs\r\n const isEmpty = createFilterStore(this.dataViewContext.filterState, defaultValue).isEmpty()\r\n return (\r\n <Collapse in={!isEmpty} timeout={300} unmountOnExit orientation='vertical' onExited={this.handleAnimationExited}>\r\n <Wrap className={activeFiltersPanelClasses.root}>\r\n <Box className={activeFiltersPanelClasses.content}>\r\n {this.renderSort()}\r\n {this.renderQuickSearch()}\r\n {this.renderFilters()}\r\n {!isEmpty && <ClearAllButton className={activeFiltersPanelClasses.removeButton} onClick={this.handleClearAll} />}\r\n </Box>\r\n {this.props.loading && <Box className={activeFiltersPanelClasses.overlay} />}\r\n </Wrap>\r\n </Collapse>\r\n )\r\n })\r\n }\r\n\r\n renderItems = (p: IRenderItemsParams<T>) => (\r\n <Box className={activeFiltersPanelClasses.item}>\r\n <Typography variant='caption' sx={{ fontWeight: 700 }}>\r\n {p.label || p.field?.toString()}:\r\n </Typography>\r\n <Box className={activeFiltersPanelClasses.itemContent}>\r\n {p.items.map((item) => (\r\n <Chip\r\n key={item.value}\r\n clickable\r\n size='small'\r\n label={item.label || item.value}\r\n className={activeFiltersPanelClasses.itemChip}\r\n onDelete={() => {\r\n if (p.isQuickSearch) {\r\n this.removeQuickSearch(item)\r\n return\r\n }\r\n if (!p.field) return\r\n this.removeFilter(p.field, item)\r\n }}\r\n />\r\n ))}\r\n </Box>\r\n </Box>\r\n )\r\n\r\n renderQuickSearch() {\r\n const val = this.dataViewContext.filterState?.quickSearch || []\r\n const list = (Array.isArray(val) ? val : [val]).map((value) => ({ value }))\r\n if (!list || list.length === 0) return <></>\r\n return this.renderItems({ label: 'Quick search', items: list, isQuickSearch: true })\r\n }\r\n\r\n renderFilters = () => {\r\n const filter: IFilterMap<T> = this.dataViewContext.filterState?.filter || {}\r\n const keys = Object.keys(filter) as Array<keyof T>\r\n if (keys.length === 0) return <></>\r\n return keys.map((key) => {\r\n const filterItems = (filter[key] ?? []) as IFilterItem[]\r\n const items = filterItems.reduce<IItemBase[]>((acc, item) => {\r\n if (!!item.value) acc.push({ value: item.value?.toString(), label: item.label })\r\n return acc\r\n }, [])\r\n return <Fragment key={key.toString()}>{this.renderItems({ field: key, label: key.toString(), items })}</Fragment>\r\n })\r\n }\r\n\r\n renderSort = () => {\r\n const sort = this.dataViewContext.filterState?.sort\r\n if (!sort) return <></>\r\n\r\n const fieldConfig = this.dataViewContext.filterBarConfigs.fields?.[sort.field]\r\n const fieldLabel = fieldConfig?.label || sort.field.toString()\r\n const sortConfig = mapSortConfigs[sort.direction]\r\n\r\n return (\r\n <Box className={activeFiltersPanelClasses.item}>\r\n <Typography variant='caption' sx={{ fontWeight: 700 }}>\r\n Sort:\r\n </Typography>\r\n <Box className={activeFiltersPanelClasses.itemContent}>\r\n <Chip\r\n clickable\r\n size='small'\r\n label={\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\r\n <span>{fieldLabel}</span>\r\n {sortConfig.icon}\r\n </Box>\r\n }\r\n className={activeFiltersPanelClasses.itemChip}\r\n onClick={this.toggleSortDirection}\r\n onDelete={() => this.removeSort()}\r\n title={`${fieldLabel} - ${sortConfig.title}`}\r\n />\r\n </Box>\r\n </Box>\r\n )\r\n }\r\n\r\n removeFilter = (field: keyof T, item: IItemBase) => {\r\n const store = createFilterStore(this.dataViewContext.filterState).removeFilterItem(field, item.value, { reason: 'field' })\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n\r\n removeQuickSearch = (item: IItemBase) => {\r\n const store = createFilterStore(this.dataViewContext.filterState).removeQuickSearchItem(item.value, { reason: 'quickSearch' })\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n\r\n removeSort = () => {\r\n const store = createFilterStore(this.dataViewContext.filterState).removeSort({ reason: 'sort' })\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n\r\n toggleSortDirection = () => {\r\n const store = createFilterStore(this.dataViewContext.filterState).toggleSortDirection({ reason: 'sort' })\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n\r\n handleClearAll = () => {\r\n // Trực tiếp clear data, logic đóng sẽ được xử lý tự động\r\n const store = createFilterStore(this.dataViewContext.filterState).reset()\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n }\r\n\r\n return ActiveFiltersPanel\r\n}\r\n\r\nexport default createActiveFiltersPanel\r\n\r\nconst Wrap = styled(Box)({\r\n position: 'relative',\r\n [`.${activeFiltersPanelClasses.content}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexWrap: 'wrap',\r\n gap: '8px'\r\n },\r\n [`.${activeFiltersPanelClasses.item}`]: {\r\n display: 'flex',\r\n border: 'dashed 1px var(--color-divider, rgba(145 160 170 / 20%))',\r\n borderRadius: '4px',\r\n alignItems: 'center',\r\n padding: '6px 8px',\r\n gap: '8px'\r\n },\r\n [`.${activeFiltersPanelClasses.itemContent}`]: {\r\n display: 'flex',\r\n gap: '4px'\r\n },\r\n [`.${activeFiltersPanelClasses.itemChip}`]: {\r\n borderRadius: '4px'\r\n },\r\n [`.${activeFiltersPanelClasses.overlay}`]: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n backdropFilter: 'blur(1px)'\r\n }\r\n})\r\n"],"names":["activeFiltersPanelClasses","root","content","item","itemContent","itemChip","removeButton","overlay","createActiveFiltersPanel","ActiveFiltersPanel","props","_this","_classCallCheck","_callSuper","_defineProperty","setState","isClosing","p","_p$field","_jsxs","Box","className","children","Typography","variant","sx","fontWeight","label","field","toString","_jsx","items","map","Chip","clickable","size","value","onDelete","isQuickSearch","removeQuickSearch","removeFilter","_this$dataViewContext","filter","dataViewContext","filterState","keys","Object","length","key","_filter$key","reduce","acc","_item$value","push","Fragment","renderItems","_this$dataViewContext2","_this$dataViewContext3","sort","fieldConfig","filterBarConfigs","fields","fieldLabel","sortConfig","mapSortConfigs","direction","display","alignItems","gap","icon","onClick","toggleSortDirection","removeSort","title","concat","store","createFilterStore","removeFilterItem","reason","onFilterStateChange","build","removeQuickSearchItem","reset","state","data","_inherits","Component","_createClass","_this2","this","mapDataViewContext","context","defaultValue","isEmpty","Collapse","in","timeout","unmountOnExit","orientation","onExited","handleAnimationExited","Wrap","renderSort","renderQuickSearch","renderFilters","ClearAllButton","handleClearAll","loading","_this$dataViewContext4","val","quickSearch","list","Array","isArray","styled","position","flexWrap","border","borderRadius","padding","top","left","width","height","backdropFilter"],"mappings":"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"}
1
+ {"version":3,"file":"create.active-filters-panel.js","sources":["../../src/data-view/create.active-filters-panel.tsx"],"sourcesContent":["import React, { Component, ComponentType, Fragment } from 'react'\r\nimport { Box, Chip, Collapse, styled, Typography } from '@mui/material'\r\nimport { createFilterStore } from './filter-store'\r\nimport { ClearAllButton, mapSortConfigs } from './ui.units'\r\nimport { IDataViewContext, mapDataViewContext } from './context'\r\nimport { IFilterItem, IFilterMap, IFilterState, IItemBase } from './types'\r\nimport { formatDatetime } from '../utils'\r\nimport { mapDateLogicText } from './helpers'\r\n\r\nexport const activeFiltersPanelClasses = {\r\n root: 'ActiveFiltersPanel-root',\r\n content: 'ActiveFiltersPanel-content',\r\n item: 'ActiveFiltersPanel-item',\r\n itemContent: 'ActiveFiltersPanel-itemContent',\r\n itemChip: 'ActiveFiltersPanel-itemChip',\r\n removeButton: 'ActiveFiltersPanel-removeButton',\r\n overlay: 'ActiveFiltersPanel-overlay'\r\n}\r\n\r\ninterface IRenderItemsParams<T> {\r\n field?: keyof T\r\n label?: string\r\n items: IItemBase[]\r\n isQuickSearch?: boolean\r\n}\r\n\r\nexport interface IActiveFiltersPanelProps {\r\n loading?: boolean\r\n}\r\n\r\nexport interface IActiveFiltersPanelState<T> {\r\n data: IFilterState<T> | null\r\n isClosing: boolean\r\n}\r\n\r\nfunction createActiveFiltersPanel<T>(): ComponentType<IActiveFiltersPanelProps> {\r\n class ActiveFiltersPanel extends Component<IActiveFiltersPanelProps, IActiveFiltersPanelState<T>> {\r\n declare dataViewContext: IDataViewContext<T>\r\n\r\n constructor(props: IActiveFiltersPanelProps) {\r\n super(props)\r\n this.state = {\r\n data: null,\r\n isClosing: false\r\n }\r\n }\r\n\r\n // Handle animation completion\r\n private handleAnimationExited = () => {\r\n this.setState({ isClosing: true })\r\n }\r\n\r\n render() {\r\n return mapDataViewContext((context) => {\r\n this.dataViewContext = context\r\n if (!this.dataViewContext) return <></>\r\n const { defaultValue } = this.dataViewContext.filterBarConfigs\r\n const isEmpty = createFilterStore(this.dataViewContext.filterState, defaultValue).isEmpty()\r\n return (\r\n <Collapse in={!isEmpty} timeout={300} unmountOnExit orientation='vertical' onExited={this.handleAnimationExited}>\r\n <Wrap className={activeFiltersPanelClasses.root}>\r\n <Box className={activeFiltersPanelClasses.content}>\r\n {this.renderSort()}\r\n {this.renderQuickSearch()}\r\n {this.renderFilters()}\r\n {!isEmpty && <ClearAllButton className={activeFiltersPanelClasses.removeButton} onClick={this.handleClearAll} />}\r\n </Box>\r\n {this.props.loading && <Box className={activeFiltersPanelClasses.overlay} />}\r\n </Wrap>\r\n </Collapse>\r\n )\r\n })\r\n }\r\n\r\n renderItems = (p: IRenderItemsParams<T>) => (\r\n <Box className={activeFiltersPanelClasses.item}>\r\n <Typography variant='caption' sx={{ fontWeight: 700 }}>\r\n {p.label || p.field?.toString()}:\r\n </Typography>\r\n <Box className={activeFiltersPanelClasses.itemContent}>\r\n {p.items.map((item) => (\r\n <Chip\r\n key={item.value}\r\n clickable\r\n size='small'\r\n label={item.label || item.value}\r\n className={activeFiltersPanelClasses.itemChip}\r\n onDelete={() => {\r\n if (p.isQuickSearch) {\r\n this.removeQuickSearch(item)\r\n return\r\n }\r\n if (!p.field) return\r\n this.removeFilter(p.field, item)\r\n }}\r\n />\r\n ))}\r\n </Box>\r\n </Box>\r\n )\r\n\r\n renderQuickSearch() {\r\n const val = this.dataViewContext.filterState?.quickSearch || []\r\n const list = (Array.isArray(val) ? val : [val]).map((value) => ({ value }))\r\n if (!list || list.length === 0) return <></>\r\n return this.renderItems({ label: 'Quick search', items: list, isQuickSearch: true })\r\n }\r\n\r\n renderFilters = () => {\r\n const filter: IFilterMap<T> = this.dataViewContext.filterState?.filter || {}\r\n const keys = Object.keys(filter) as Array<keyof T>\r\n if (keys.length === 0) return <></>\r\n return keys.map((key) => {\r\n const filterItems = (filter[key] ?? []) as IFilterItem[]\r\n const items = filterItems.reduce<IItemBase[]>((acc, item) => {\r\n let label = item.label || item.value?.toString()\r\n if (item.type === 'date' && item.dateLogic) {\r\n label = `${mapDateLogicText[item.dateLogic]} ${formatDatetime(item.value?.toString() ?? '', 'style2')}`\r\n }\r\n if (!!item.value) acc.push({ value: item.value?.toString(), label })\r\n return acc\r\n }, [])\r\n return <Fragment key={key.toString()}>{this.renderItems({ field: key, label: key.toString(), items })}</Fragment>\r\n })\r\n }\r\n\r\n renderSort = () => {\r\n const sort = this.dataViewContext.filterState?.sort\r\n if (!sort) return <></>\r\n\r\n const fieldConfig = this.dataViewContext.filterBarConfigs.fields?.[sort.field]\r\n const fieldLabel = fieldConfig?.label || sort.field.toString()\r\n const sortConfig = mapSortConfigs[sort.direction]\r\n\r\n return (\r\n <Box className={activeFiltersPanelClasses.item}>\r\n <Typography variant='caption' sx={{ fontWeight: 700 }}>\r\n Sort:\r\n </Typography>\r\n <Box className={activeFiltersPanelClasses.itemContent}>\r\n <Chip\r\n clickable\r\n size='small'\r\n label={\r\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5 }}>\r\n <span>{fieldLabel}</span>\r\n {sortConfig.icon}\r\n </Box>\r\n }\r\n className={activeFiltersPanelClasses.itemChip}\r\n onClick={this.toggleSortDirection}\r\n onDelete={() => this.removeSort()}\r\n title={`${fieldLabel} - ${sortConfig.title}`}\r\n />\r\n </Box>\r\n </Box>\r\n )\r\n }\r\n\r\n removeFilter = (field: keyof T, item: IItemBase) => {\r\n const store = createFilterStore(this.dataViewContext.filterState).removeFilterItem(field, item.value, { reason: 'field' })\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n\r\n removeQuickSearch = (item: IItemBase) => {\r\n const store = createFilterStore(this.dataViewContext.filterState).removeQuickSearchItem(item.value, { reason: 'quickSearch' })\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n\r\n removeSort = () => {\r\n const store = createFilterStore(this.dataViewContext.filterState).removeSort({ reason: 'sort' })\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n\r\n toggleSortDirection = () => {\r\n const store = createFilterStore(this.dataViewContext.filterState).toggleSortDirection({ reason: 'sort' })\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n\r\n handleClearAll = () => {\r\n const fValue = this.dataViewContext.filterBarConfigs.defaultValue || {}\r\n // Trực tiếp clear data, logic đóng sẽ được xử lý tự động\r\n const store = createFilterStore(this.dataViewContext.filterState, fValue).reset()\r\n this.dataViewContext.onFilterStateChange(store.build())\r\n }\r\n }\r\n\r\n return ActiveFiltersPanel\r\n}\r\n\r\nexport default createActiveFiltersPanel\r\n\r\nconst Wrap = styled(Box)({\r\n position: 'relative',\r\n [`.${activeFiltersPanelClasses.content}`]: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n flexWrap: 'wrap',\r\n gap: '8px'\r\n },\r\n [`.${activeFiltersPanelClasses.item}`]: {\r\n display: 'flex',\r\n border: 'dashed 1px var(--color-divider, rgba(145 160 170 / 20%))',\r\n borderRadius: '4px',\r\n alignItems: 'center',\r\n padding: '6px 8px',\r\n gap: '8px'\r\n },\r\n [`.${activeFiltersPanelClasses.itemContent}`]: {\r\n display: 'flex',\r\n gap: '4px'\r\n },\r\n [`.${activeFiltersPanelClasses.itemChip}`]: {\r\n borderRadius: '4px'\r\n },\r\n [`.${activeFiltersPanelClasses.overlay}`]: {\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n height: '100%',\r\n backdropFilter: 'blur(1px)'\r\n }\r\n})\r\n"],"names":["activeFiltersPanelClasses","root","content","item","itemContent","itemChip","removeButton","overlay","createActiveFiltersPanel","ActiveFiltersPanel","props","_this","_classCallCheck","_callSuper","_defineProperty","setState","isClosing","p","_p$field","_jsxs","Box","className","children","Typography","variant","sx","fontWeight","label","field","toString","_jsx","items","map","Chip","clickable","size","value","onDelete","isQuickSearch","removeQuickSearch","removeFilter","_this$dataViewContext","filter","dataViewContext","filterState","keys","Object","length","key","_filter$key","reduce","acc","_item$value","_item$value3","_item$value$toString","_item$value2","type","dateLogic","concat","mapDateLogicText","formatDatetime","push","Fragment","renderItems","_this$dataViewContext2","_this$dataViewContext3","sort","fieldConfig","filterBarConfigs","fields","fieldLabel","sortConfig","mapSortConfigs","direction","display","alignItems","gap","icon","onClick","toggleSortDirection","removeSort","title","store","createFilterStore","removeFilterItem","reason","onFilterStateChange","build","removeQuickSearchItem","fValue","defaultValue","reset","state","data","_inherits","Component","_createClass","_this2","this","mapDataViewContext","context","isEmpty","Collapse","in","timeout","unmountOnExit","orientation","onExited","handleAnimationExited","Wrap","renderSort","renderQuickSearch","renderFilters","ClearAllButton","handleClearAll","loading","_this$dataViewContext4","val","quickSearch","list","Array","isArray","styled","position","flexWrap","border","borderRadius","padding","top","left","width","height","backdropFilter"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"create.data-view.js","sources":["../../src/data-view/create.data-view.tsx"],"sourcesContent":["import React, { Component, ComponentType } from 'react'\r\nimport { Box, BoxProps, styled } from '@mui/material'\r\nimport { SortButton } from './ui.units'\r\nimport { createViewMode } from './create.view-mode'\r\nimport { defaultViewMode, ViewModeButtons } from './view-mode.units'\r\nimport { getViewModeFromURL, syncViewModeToURL } from './query-param-url'\r\nimport { EViewMode, IViewModeConfigs, IViewModeValidModel } from './view-mode.types'\r\nimport { IFilterBarConfigs, IFilterState, IFilterStateChangeHandler, IViewData } from './types'\r\nimport { defaultFilterBarState, DataViewContext, IDataViewState, IDataViewContext, OnPanelValueChange } from './context'\r\nimport createFilterBar, { IFilterBarSlots } from './create.filter-bar'\r\nimport ScrollTracking, { IScrollTrackingData } from './scroll-tracking'\r\nimport createPaginationBar, { IPaginationBarConfigs } from './create.pagination-bar'\r\nimport createPopperPanel from './create.popper-panel'\r\nimport createActiveFiltersPanel from './create.active-filters-panel'\r\n\r\nexport const filterBarClasses = {\r\n root: 'FilterBar-root',\r\n content: 'FilterBar-content',\r\n input: 'FilterBar-input',\r\n inputWrap: 'FilterBar-inputWrap',\r\n label: 'FilterBar-label',\r\n button: 'FilterBar-button',\r\n spacing: 'FilterBar-spacing',\r\n panel: 'FilterBar-panel',\r\n sticky: 'FilterBar-sticky',\r\n shadow: 'FilterBar-shadow'\r\n}\r\n\r\nexport interface IFilterBarInsertSlots {\r\n below?: React.ReactNode\r\n above?: React.ReactNode\r\n left?: React.ReactNode\r\n right?: React.ReactNode\r\n}\r\n\r\nexport interface IDataViewSlots<T extends IViewModeValidModel> {\r\n filterWrapProps?: BoxProps\r\n filterSlots?: IFilterBarInsertSlots\r\n activeFiltersPanelSlots?: IFilterBarInsertSlots\r\n primaryInputSlots?: IFilterBarSlots\r\n filterBarConfigs?: IFilterBarConfigs<T>\r\n viewModeConfigs?: IViewModeConfigs<T>\r\n paginationBarConfigs?: IPaginationBarConfigs\r\n footerProps?: {\r\n wrapProps?: BoxProps\r\n enablePagination?: boolean\r\n }\r\n}\r\n\r\nexport interface IDataViewProps<T extends IViewModeValidModel> {\r\n loading?: boolean\r\n error?: string\r\n data?: IViewData<T>\r\n filter?: IFilterState<T>\r\n onFilterChange?: (value: IFilterState<T>) => void\r\n viewMode?: EViewMode\r\n onViewModeChange?: (value: EViewMode) => void\r\n syncViewModeToURL?: boolean\r\n enablePaginationTop?: boolean\r\n slots?: IDataViewSlots<T>\r\n}\r\n\r\nexport interface IDataViewConfigs<T extends IViewModeValidModel> {\r\n filterBar?: IFilterBarConfigs<T>\r\n viewMode?: IViewModeConfigs<T>\r\n paginationBar?: IPaginationBarConfigs\r\n}\r\n\r\nfunction createDataView<T extends IViewModeValidModel>(configs: IDataViewConfigs<T>): ComponentType<IDataViewProps<T>> {\r\n const InputInstance = createFilterBar<T>()\r\n const PopperPanelInstance = createPopperPanel<T>()\r\n const ActiveFiltersPanelInstance = createActiveFiltersPanel<T>()\r\n const ViewModeInstance = createViewMode<T>(configs.viewMode)\r\n const PaginationBarInstance = createPaginationBar<T>()\r\n\r\n class DataView extends Component<IDataViewProps<T>, IDataViewState<T>> {\r\n constructor(props: IDataViewProps<T>) {\r\n super(props)\r\n this.mergeConfig(props)\r\n this.state = this.getDefaultState(props)\r\n }\r\n\r\n private getDefaultState(currentProps: IDataViewProps<T>): IDataViewState<T> {\r\n const defaultValue = currentProps.slots?.viewModeConfigs?.defaultValue ?? configs.viewMode?.defaultValue ?? defaultViewMode\r\n const viewMode = currentProps.syncViewModeToURL ? getViewModeFromURL<T>({ defaultViewMode: defaultValue }) : defaultValue\r\n return {\r\n ...defaultFilterBarState,\r\n filterState: this.internalConfig.filterBar?.defaultValue ?? {},\r\n viewMode\r\n }\r\n }\r\n\r\n get filterState(): IFilterState<T> {\r\n return this.props.filter ?? this.state.filterState\r\n }\r\n\r\n get viewMode(): EViewMode | undefined {\r\n return this.props.viewMode ?? this.state.viewMode\r\n }\r\n\r\n private mergeConfig = (currentProps: IDataViewProps<T>) => {\r\n this.configCache = {\r\n filterBar: Object.assign({}, configs.filterBar, currentProps.slots?.filterBarConfigs),\r\n viewMode: currentProps.slots?.viewModeConfigs,\r\n paginationBar: Object.assign({}, configs.paginationBar, currentProps.slots?.paginationBarConfigs)\r\n }\r\n }\r\n\r\n private configCache: IDataViewConfigs<T> = {}\r\n get internalConfig() {\r\n return this.configCache\r\n }\r\n\r\n shouldComponentUpdate(nextProps: Readonly<IDataViewProps<T>>): boolean {\r\n const filterDiff = JSON.stringify(nextProps.slots?.filterBarConfigs) !== JSON.stringify(this.props.slots?.filterBarConfigs)\r\n const viewModeDiff = JSON.stringify(nextProps.slots?.viewModeConfigs) !== JSON.stringify(this.props.slots?.viewModeConfigs)\r\n if (filterDiff || viewModeDiff) this.mergeConfig(nextProps)\r\n return true\r\n }\r\n\r\n refFilterButton: HTMLButtonElement | null = null\r\n refSortButton: HTMLButtonElement | null = null\r\n render() {\r\n const mapContext: IDataViewContext<T> = {\r\n keyword: this.state.keyword.trim(),\r\n filterBarConfigs: this.internalConfig.filterBar ?? {},\r\n filterState: this.filterState,\r\n anchorEl: this.state.anchorEl,\r\n area: this.state.area,\r\n viewMode: this.state.viewMode,\r\n scrolled: this.state.scrolled,\r\n onFilterStateChange: this.onFilterStateChangeHandler,\r\n onKeywordChange: this.onKeywordChangeHandler,\r\n onPopperPanelChange: this.onPopperPanelChangeHandler,\r\n onPanelClose: this.onPanelCloseHandler,\r\n onClear: this.onClearHandler\r\n }\r\n return (\r\n <DataViewContext.Provider value={mapContext}>\r\n {this.internalConfig.filterBar?.enableSticky && <ScrollTracking onChange={this.onScrollChangeHandler} />}\r\n {this.props.slots?.filterSlots?.above}\r\n <InputInstance\r\n slots={{\r\n ...this.props.slots?.primaryInputSlots,\r\n right: (\r\n <>\r\n {this.internalConfig.filterBar?.enableSort && <SortButton />}\r\n {this.props.slots?.primaryInputSlots?.right}\r\n </>\r\n )\r\n }}\r\n >\r\n <PopperPanelInstance />\r\n </InputInstance>\r\n {this.props.slots?.filterSlots?.below}\r\n {this.props.slots?.activeFiltersPanelSlots?.above}\r\n <FilterBarPanel>\r\n <ViewModeButtons value={this.state.viewMode} onChange={this.onViewModeChangeHandler} />\r\n {this.props.slots?.activeFiltersPanelSlots?.left}\r\n <ActiveFiltersPanelInstance loading={this.props.loading} />\r\n <Box sx={{ flex: 1 }} />\r\n {this.props.enablePaginationTop && (\r\n <PaginationBarInstance\r\n count={this.props.data?.totalItems ?? 0}\r\n defaultFilter={this.internalConfig.filterBar?.defaultValue}\r\n filter={this.filterState}\r\n onChange={this.onFilterStateChangeHandler}\r\n {...this.internalConfig.paginationBar}\r\n />\r\n )}\r\n {this.props.slots?.activeFiltersPanelSlots?.right}\r\n </FilterBarPanel>\r\n {this.props.slots?.activeFiltersPanelSlots?.below}\r\n <ViewModeInstance\r\n data={this.props.data?.items ?? []}\r\n viewMode={this.viewMode}\r\n loading={this.props.loading}\r\n error={this.props.error}\r\n slots={this.internalConfig.viewMode}\r\n />\r\n {this.renderFooter()}\r\n </DataViewContext.Provider>\r\n )\r\n }\r\n\r\n renderFooter = () => {\r\n const temp = this.props.slots?.footerProps || {}\r\n return (\r\n <FooterWrap {...temp.wrapProps}>\r\n {temp.enablePagination !== false && (\r\n <PaginationBarInstance\r\n count={this.props.data?.totalItems ?? 0}\r\n defaultFilter={this.internalConfig.filterBar?.defaultValue}\r\n filter={this.filterState}\r\n onChange={this.onFilterStateChangeHandler}\r\n {...this.internalConfig.paginationBar}\r\n />\r\n )}\r\n </FooterWrap>\r\n )\r\n }\r\n\r\n onViewModeChangeHandler = (value: EViewMode) => {\r\n this.setState({ viewMode: value }, () => {\r\n if (this.props.syncViewModeToURL) {\r\n const dViewMode = this.internalConfig.viewMode?.defaultValue ?? configs.viewMode?.defaultValue ?? defaultViewMode\r\n syncViewModeToURL({ viewMode: value, defaultViewMode: dViewMode })\r\n }\r\n this.props.onViewModeChange?.(value)\r\n })\r\n }\r\n\r\n onKeywordChangeHandler = (keyword: string) => this.setState({ keyword })\r\n\r\n onScrollChangeHandler = (data: IScrollTrackingData) => this.setState({ scrolled: data.isScrolled })\r\n\r\n onPopperPanelChangeHandler: OnPanelValueChange = (anchorEl, area) => this.setState({ anchorEl, area })\r\n\r\n onClearHandler = () => this.setState(defaultFilterBarState)\r\n\r\n onPanelCloseHandler = () => {\r\n this.setState({ anchorEl: null, area: undefined, keyword: '' })\r\n }\r\n\r\n onFilterStateChangeHandler: IFilterStateChangeHandler<T> = (filterState: IFilterState<T>) => {\r\n if (!this.props.filter) this.setState({ ...defaultFilterBarState, filterState })\r\n this.props.onFilterChange && this.props.onFilterChange(filterState)\r\n if (!!this.props.filter) this.setState(defaultFilterBarState)\r\n }\r\n }\r\n\r\n return DataView\r\n}\r\n\r\nexport default createDataView\r\n\r\nconst FilterBarPanel = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n marginBottom: '8px',\r\n minHeight: 'var(--filter-bar-height, 40px)'\r\n})\r\n\r\nconst FooterWrap = styled(Box)({\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n width: '100%'\r\n})\r\n"],"names":["createDataView","configs","InputInstance","createFilterBar","PopperPanelInstance","createPopperPanel","ActiveFiltersPanelInstance","createActiveFiltersPanel","ViewModeInstance","createViewMode","viewMode","PaginationBarInstance","createPaginationBar","DataView","props","_this","_classCallCheck","_callSuper","_defineProperty","currentProps","_currentProps$slots","_currentProps$slots2","_currentProps$slots3","configCache","filterBar","Object","assign","slots","filterBarConfigs","viewModeConfigs","paginationBar","paginationBarConfigs","_this$props$slots","_this$props$data$tota","_this$props$data","_this$internalConfig$","temp","footerProps","_jsx","FooterWrap","_objectSpread","wrapProps","children","enablePagination","count","data","totalItems","defaultFilter","internalConfig","defaultValue","filter","filterState","onChange","onFilterStateChangeHandler","value","setState","_this$props$onViewMod","_this$props","syncViewModeToURL","_ref","_this$internalConfig$2","_this$internalConfig$3","_configs$viewMode","dViewMode","defaultViewMode","onViewModeChange","call","keyword","scrolled","isScrolled","anchorEl","area","defaultFilterBarState","undefined","onFilterChange","mergeConfig","state","getDefaultState","_inherits","Component","_createClass","key","_ref2","_currentProps$slots$v","_currentProps$slots4","_configs$viewMode2","_this$internalConfig$4","_this$internalConfig$5","getViewModeFromURL","this","get","_this$props$filter","_this$props$viewMode","nextProps","_nextProps$slots","_this$props$slots2","_nextProps$slots2","_this$props$slots3","filterDiff","JSON","stringify","viewModeDiff","_this$internalConfig$6","_this$internalConfig$7","_this$props$slots4","_this$props$slots5","_this$internalConfig$8","_this$props$slots6","_this$props$slots7","_this$props$slots8","_this$props$slots9","_this$props$data$tota2","_this$props$data2","_this$internalConfig$9","_this$props$slots0","_this$props$slots1","_this$props$data$item","_this$props$data3","mapContext","trim","onFilterStateChange","onKeywordChange","onKeywordChangeHandler","onPopperPanelChange","onPopperPanelChangeHandler","onPanelClose","onPanelCloseHandler","onClear","onClearHandler","_jsxs","DataViewContext","Provider","enableSticky","ScrollTracking","onScrollChangeHandler","filterSlots","above","primaryInputSlots","right","_Fragment","enableSort","SortButton","below","activeFiltersPanelSlots","FilterBarPanel","ViewModeButtons","onViewModeChangeHandler","left","loading","Box","sx","flex","enablePaginationTop","items","error","renderFooter","styled","display","alignItems","gap","marginBottom","minHeight","justifyContent","width"],"mappings":"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"}
1
+ {"version":3,"file":"create.data-view.js","sources":["../../src/data-view/create.data-view.tsx"],"sourcesContent":["import React, { Component, ComponentType } from 'react'\r\nimport { Box, BoxProps, styled } from '@mui/material'\r\nimport { SortButton } from './ui.units'\r\nimport { createViewMode } from './create.view-mode'\r\nimport { defaultViewMode, ViewModeButtons } from './view-mode.units'\r\nimport { getViewModeFromURL, syncViewModeToURL } from './query-param-url'\r\nimport { EViewMode, IViewModeConfigs, IViewModeValidModel } from './view-mode.types'\r\nimport { IFilterBarConfigs, IFilterState, IFilterStateChangeHandler, IPositionElement, IViewData } from './types'\r\nimport { defaultFilterBarState, DataViewContext, IDataViewState, IDataViewContext, OnPanelValueChange } from './context'\r\nimport createFilterBar, { IFilterBarSlots } from './create.filter-bar'\r\nimport ScrollTracking, { IScrollTrackingData } from './scroll-tracking'\r\nimport createPaginationBar, { IPaginationBarConfigs } from './create.pagination-bar'\r\nimport createPopperPanel from './create.popper-panel'\r\nimport createActiveFiltersPanel from './create.active-filters-panel'\r\n\r\nexport const filterBarClasses = {\r\n root: 'FilterBar-root',\r\n content: 'FilterBar-content',\r\n input: 'FilterBar-input',\r\n inputWrap: 'FilterBar-inputWrap',\r\n label: 'FilterBar-label',\r\n button: 'FilterBar-button',\r\n spacing: 'FilterBar-spacing',\r\n panel: 'FilterBar-panel',\r\n sticky: 'FilterBar-sticky',\r\n shadow: 'FilterBar-shadow'\r\n}\r\n\r\nexport interface IDataViewSlots<T extends IViewModeValidModel> {\r\n filterWrapProps?: BoxProps\r\n filterSlots?: IPositionElement\r\n activeFiltersPanelSlots?: IPositionElement\r\n primaryInputSlots?: IFilterBarSlots\r\n filterBarConfigs?: IFilterBarConfigs<T>\r\n viewModeConfigs?: IViewModeConfigs<T>\r\n paginationBarConfigs?: IPaginationBarConfigs\r\n footerProps?: {\r\n wrapProps?: BoxProps\r\n enablePagination?: boolean\r\n }\r\n}\r\n\r\nexport interface IDataViewProps<T extends IViewModeValidModel> {\r\n loading?: boolean\r\n error?: string\r\n data?: IViewData<T>\r\n filter?: IFilterState<T>\r\n onFilterChange?: (value: IFilterState<T>) => void\r\n viewMode?: EViewMode\r\n onViewModeChange?: (value: EViewMode) => void\r\n syncViewModeToURL?: boolean\r\n enablePaginationTop?: boolean\r\n slots?: IDataViewSlots<T>\r\n}\r\n\r\nexport interface IDataViewConfigs<T extends IViewModeValidModel> {\r\n filterBar?: IFilterBarConfigs<T>\r\n viewMode?: IViewModeConfigs<T>\r\n paginationBar?: IPaginationBarConfigs\r\n}\r\n\r\nfunction createDataView<T extends IViewModeValidModel>(configs: IDataViewConfigs<T>): ComponentType<IDataViewProps<T>> {\r\n const InputInstance = createFilterBar<T>()\r\n const PopperPanelInstance = createPopperPanel<T>()\r\n const ActiveFiltersPanelInstance = createActiveFiltersPanel<T>()\r\n const ViewModeInstance = createViewMode<T>(configs.viewMode)\r\n const PaginationBarInstance = createPaginationBar<T>()\r\n\r\n class DataView extends Component<IDataViewProps<T>, IDataViewState<T>> {\r\n constructor(props: IDataViewProps<T>) {\r\n super(props)\r\n this.mergeConfig(props)\r\n this.state = this.getDefaultState(props)\r\n }\r\n\r\n private getDefaultState(currentProps: IDataViewProps<T>): IDataViewState<T> {\r\n const defaultValue = currentProps.slots?.viewModeConfigs?.defaultValue ?? configs.viewMode?.defaultValue ?? defaultViewMode\r\n const viewMode = currentProps.syncViewModeToURL ? getViewModeFromURL<T>({ defaultViewMode: defaultValue }) : defaultValue\r\n return {\r\n ...defaultFilterBarState,\r\n filterState: this.internalConfig.filterBar?.defaultValue ?? {},\r\n viewMode\r\n }\r\n }\r\n\r\n get filterState(): IFilterState<T> {\r\n return this.props.filter ?? this.state.filterState\r\n }\r\n\r\n get viewMode(): EViewMode | undefined {\r\n return this.props.viewMode ?? this.state.viewMode\r\n }\r\n\r\n private mergeConfig = (currentProps: IDataViewProps<T>) => {\r\n this.configCache = {\r\n filterBar: Object.assign({}, configs.filterBar, currentProps.slots?.filterBarConfigs),\r\n viewMode: currentProps.slots?.viewModeConfigs,\r\n paginationBar: Object.assign({}, configs.paginationBar, currentProps.slots?.paginationBarConfigs)\r\n }\r\n }\r\n\r\n private configCache: IDataViewConfigs<T> = {}\r\n get internalConfig() {\r\n return this.configCache\r\n }\r\n\r\n shouldComponentUpdate(nextProps: Readonly<IDataViewProps<T>>): boolean {\r\n const filterDiff = JSON.stringify(nextProps.slots?.filterBarConfigs) !== JSON.stringify(this.props.slots?.filterBarConfigs)\r\n const viewModeDiff = JSON.stringify(nextProps.slots?.viewModeConfigs) !== JSON.stringify(this.props.slots?.viewModeConfigs)\r\n if (filterDiff || viewModeDiff) this.mergeConfig(nextProps)\r\n return true\r\n }\r\n\r\n refFilterButton: HTMLButtonElement | null = null\r\n refSortButton: HTMLButtonElement | null = null\r\n render() {\r\n const mapContext: IDataViewContext<T> = {\r\n keyword: this.state.keyword.trim(),\r\n filterBarConfigs: this.internalConfig.filterBar ?? {},\r\n filterState: this.filterState,\r\n anchorEl: this.state.anchorEl,\r\n area: this.state.area,\r\n viewMode: this.state.viewMode,\r\n scrolled: this.state.scrolled,\r\n onFilterStateChange: this.onFilterStateChangeHandler,\r\n onKeywordChange: this.onKeywordChangeHandler,\r\n onPopperPanelChange: this.onPopperPanelChangeHandler,\r\n onPanelClose: this.onPanelCloseHandler,\r\n onClear: this.onClearHandler\r\n }\r\n return (\r\n <DataViewContext.Provider value={mapContext}>\r\n {this.internalConfig.filterBar?.enableSticky && <ScrollTracking onChange={this.onScrollChangeHandler} />}\r\n {this.props.slots?.filterSlots?.above}\r\n <InputInstance\r\n slots={{\r\n ...this.props.slots?.primaryInputSlots,\r\n right: (\r\n <>\r\n {this.internalConfig.filterBar?.enableSort && <SortButton />}\r\n {this.props.slots?.primaryInputSlots?.right}\r\n </>\r\n )\r\n }}\r\n >\r\n <PopperPanelInstance />\r\n </InputInstance>\r\n {this.props.slots?.filterSlots?.below}\r\n {this.props.slots?.activeFiltersPanelSlots?.above}\r\n <FilterBarPanel>\r\n <ViewModeButtons value={this.state.viewMode} onChange={this.onViewModeChangeHandler} />\r\n {this.props.slots?.activeFiltersPanelSlots?.left}\r\n <ActiveFiltersPanelInstance loading={this.props.loading} />\r\n <Box sx={{ flex: 1 }} />\r\n {this.props.enablePaginationTop && (\r\n <PaginationBarInstance\r\n count={this.props.data?.totalItems ?? 0}\r\n defaultFilter={this.internalConfig.filterBar?.defaultValue}\r\n filter={this.filterState}\r\n onChange={this.onFilterStateChangeHandler}\r\n {...this.internalConfig.paginationBar}\r\n />\r\n )}\r\n {this.props.slots?.activeFiltersPanelSlots?.right}\r\n </FilterBarPanel>\r\n {this.props.slots?.activeFiltersPanelSlots?.below}\r\n <ViewModeInstance\r\n data={this.props.data?.items ?? []}\r\n viewMode={this.viewMode}\r\n loading={this.props.loading}\r\n error={this.props.error}\r\n slots={this.internalConfig.viewMode}\r\n />\r\n {this.renderFooter()}\r\n </DataViewContext.Provider>\r\n )\r\n }\r\n\r\n renderFooter = () => {\r\n const temp = this.props.slots?.footerProps || {}\r\n return (\r\n <FooterWrap {...temp.wrapProps}>\r\n {temp.enablePagination !== false && (\r\n <PaginationBarInstance\r\n count={this.props.data?.totalItems ?? 0}\r\n defaultFilter={this.internalConfig.filterBar?.defaultValue}\r\n filter={this.filterState}\r\n onChange={this.onFilterStateChangeHandler}\r\n {...this.internalConfig.paginationBar}\r\n />\r\n )}\r\n </FooterWrap>\r\n )\r\n }\r\n\r\n onViewModeChangeHandler = (value: EViewMode) => {\r\n this.setState({ viewMode: value }, () => {\r\n if (this.props.syncViewModeToURL) {\r\n const dViewMode = this.internalConfig.viewMode?.defaultValue ?? configs.viewMode?.defaultValue ?? defaultViewMode\r\n syncViewModeToURL({ viewMode: value, defaultViewMode: dViewMode })\r\n }\r\n this.props.onViewModeChange?.(value)\r\n })\r\n }\r\n\r\n onKeywordChangeHandler = (keyword: string) => this.setState({ keyword })\r\n\r\n onScrollChangeHandler = (data: IScrollTrackingData) => this.setState({ scrolled: data.isScrolled })\r\n\r\n onPopperPanelChangeHandler: OnPanelValueChange = (anchorEl, area) => this.setState({ anchorEl, area })\r\n\r\n onClearHandler = () => this.setState(defaultFilterBarState)\r\n\r\n onPanelCloseHandler = () => {\r\n this.setState({ anchorEl: null, area: undefined, keyword: '' })\r\n }\r\n\r\n onFilterStateChangeHandler: IFilterStateChangeHandler<T> = (filterState: IFilterState<T>) => {\r\n if (!this.props.filter) this.setState({ ...defaultFilterBarState, filterState })\r\n this.props.onFilterChange && this.props.onFilterChange(filterState)\r\n if (!!this.props.filter) this.setState(defaultFilterBarState)\r\n }\r\n }\r\n\r\n return DataView\r\n}\r\n\r\nexport default createDataView\r\n\r\nconst FilterBarPanel = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n gap: '8px',\r\n marginBottom: '8px',\r\n minHeight: 'var(--filter-bar-height, 40px)'\r\n})\r\n\r\nconst FooterWrap = styled(Box)({\r\n display: 'flex',\r\n justifyContent: 'flex-end',\r\n width: '100%'\r\n})\r\n"],"names":["createDataView","configs","InputInstance","createFilterBar","PopperPanelInstance","createPopperPanel","ActiveFiltersPanelInstance","createActiveFiltersPanel","ViewModeInstance","createViewMode","viewMode","PaginationBarInstance","createPaginationBar","DataView","props","_this","_classCallCheck","_callSuper","_defineProperty","currentProps","_currentProps$slots","_currentProps$slots2","_currentProps$slots3","configCache","filterBar","Object","assign","slots","filterBarConfigs","viewModeConfigs","paginationBar","paginationBarConfigs","_this$props$slots","_this$props$data$tota","_this$props$data","_this$internalConfig$","temp","footerProps","_jsx","FooterWrap","_objectSpread","wrapProps","children","enablePagination","count","data","totalItems","defaultFilter","internalConfig","defaultValue","filter","filterState","onChange","onFilterStateChangeHandler","value","setState","_this$props$onViewMod","_this$props","syncViewModeToURL","_ref","_this$internalConfig$2","_this$internalConfig$3","_configs$viewMode","dViewMode","defaultViewMode","onViewModeChange","call","keyword","scrolled","isScrolled","anchorEl","area","defaultFilterBarState","undefined","onFilterChange","mergeConfig","state","getDefaultState","_inherits","Component","_createClass","key","_ref2","_currentProps$slots$v","_currentProps$slots4","_configs$viewMode2","_this$internalConfig$4","_this$internalConfig$5","getViewModeFromURL","this","get","_this$props$filter","_this$props$viewMode","nextProps","_nextProps$slots","_this$props$slots2","_nextProps$slots2","_this$props$slots3","filterDiff","JSON","stringify","viewModeDiff","_this$internalConfig$6","_this$internalConfig$7","_this$props$slots4","_this$props$slots5","_this$internalConfig$8","_this$props$slots6","_this$props$slots7","_this$props$slots8","_this$props$slots9","_this$props$data$tota2","_this$props$data2","_this$internalConfig$9","_this$props$slots0","_this$props$slots1","_this$props$data$item","_this$props$data3","mapContext","trim","onFilterStateChange","onKeywordChange","onKeywordChangeHandler","onPopperPanelChange","onPopperPanelChangeHandler","onPanelClose","onPanelCloseHandler","onClear","onClearHandler","_jsxs","DataViewContext","Provider","enableSticky","ScrollTracking","onScrollChangeHandler","filterSlots","above","primaryInputSlots","right","_Fragment","enableSort","SortButton","below","activeFiltersPanelSlots","FilterBarPanel","ViewModeButtons","onViewModeChangeHandler","left","loading","Box","sx","flex","enablePaginationTop","items","error","renderFooter","styled","display","alignItems","gap","marginBottom","minHeight","justifyContent","width"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as e,inherits as t,createClass as r,classCallCheck as n,callSuper as a,objectSpread2 as o}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i,jsxs as l}from"react/jsx-runtime";import{Component as p}from"react";import{styled as s,Box as c,colors as u,ClickAwayListener as d}from"@mui/material";import{createFilterStore as f}from"./filter-store.js";import{FilterButton as h,FilterInput as g,FilterInputAdornment as v}from"./ui.units.js";import{mapDataViewContext as b,defaultDataViewContext as C}from"./context.js";var m={root:"FilterBar-root",content:"FilterBar-content",input:"FilterBar-input",inputWrap:"FilterBar-inputWrap",label:"FilterBar-label",button:"FilterBar-button",spacing:"FilterBar-spacing",sticky:"FilterBar-sticky",shadow:"FilterBar-shadow"};function x(){var s=function(){function s(){var t;n(this,s);for(var r=arguments.length,o=new Array(r),i=0;i<r;i++)o[i]=arguments[i];return t=a(this,s,[].concat(o)),e(t,"dataViewContext",C),e(t,"refInput",null),e(t,"refBeforeInput",null),e(t,"getRootClasses",(function(){var e,r=null!==(e=t.dataViewContext.filterBarConfigs.enableSticky)&&void 0!==e&&e,n=[m.root];return r&&n.push(m.sticky),t.dataViewContext.scrolled&&n.push(m.shadow),n.join(" ")})),e(t,"handleKeyDown",(function(e){var r=e.keyCode;if(13===r)e.stopPropagation(),e.preventDefault(),t.handleEnterSearch();else if(27===r){var n;e.stopPropagation(),e.preventDefault(),null===(n=t.refInput)||void 0===n||n.blur(),t.dataViewContext.onPanelClose()}})),e(t,"handleEnterSearch",(function(){var e;if(t.dataViewContext.keyword){var r=f(t.dataViewContext.filterState);r.addQuickSearch(t.dataViewContext.keyword,{reason:"quickSearch",area:"input"});var n,a=r.build();if(null!==(e=a.details)&&void 0!==e&&e.isChanged)null===(n=t.refInput)||void 0===n||n.blur(),t.dataViewContext.onFilterStateChange(a)}})),e(t,"handleClear",(function(){var e;null===(e=t.refInput)||void 0===e||e.blur(),t.dataViewContext.onClear()})),t}return t(s,p),r(s,[{key:"render",value:function(){var e=this;return b((function(t){var r,n,a,p=t.filterBarConfigs,s=p.id;return e.dataViewContext=t,i(d,{onClickAway:function(){return t.onPopperPanelChange(null)},children:l(k,o(o({className:e.getRootClasses()},null===(r=e.props.slots)||void 0===r?void 0:r.wrapProps),{},{children:[l("div",{className:m.content,children:[null===(n=e.props.slots)||void 0===n?void 0:n.left,l("div",{className:m.inputWrap,children:[i(h,{className:m.button,onClick:function(e){t.onPopperPanelChange(e.currentTarget,"filterButton")}}),l(c,{component:"label",htmlFor:s,className:m.label,children:[i(c,{ref:function(t){e.refBeforeInput=t}}),i(g,{ref:function(t){e.refInput=t},id:s,className:m.input,placeholder:p.placeholder,onChange:function(e){return t.onKeywordChange(e.target.value)},value:t.keyword,onFocus:function(){e.refBeforeInput&&t.onPopperPanelChange(e.refBeforeInput,"input")},onKeyDown:e.handleKeyDown,endAdornment:i(v,{notes:p.notes,keyword:t.keyword,onEnterSearch:e.handleEnterSearch,onClear:e.handleClear})})]})]}),null===(a=e.props.slots)||void 0===a?void 0:a.right]}),e.props.children]}))})}))}}])}();return s}var k=s(c)((function(t){var r=t.theme;return e(e(e(e(e(e(e({marginBottom:"4px"},"&.".concat(m.sticky),{position:"sticky",top:"var(--height-header, 0)",zIndex:r.zIndex.appBar-1,backgroundColor:r.palette.background.paper}),".".concat(m.content),{display:"flex",gap:"8px",alignItems:"center",flexWrap:"wrap",padding:r.spacing(1.5,0,.75),position:"relative",backgroundColor:"#fff","&::after":{content:'""',position:"absolute",top:"100%",left:0,width:"100%",height:"6px",pointerEvents:"none",background:"linear-gradient(to bottom, rgba(0, 0, 0, 0.2), transparent)",maskImage:"linear-gradient(to right, transparent, black 20%, black 80%, transparent)",WebkitMaskImage:"linear-gradient(to right, transparent, black 20%, black 80%, transparent)",opacity:0}}),"&.".concat(m.shadow," .").concat(m.content),{"&::after":{transition:"opacity 0.2s ease-in-out",transitionDelay:"0.2s",opacity:1}}),".".concat(m.input),{input:{padding:"4px 0 5px"}}),".".concat(m.inputWrap),{flex:1,display:"flex",alignItems:"center",minHeight:"var(--filter-bar-height, 40px)",gap:"8px",borderRadius:"6px",transition:"all linear 0.2s",padding:"0 8px",backgroundColor:u.grey[50],border:"1px solid var(--color-divider, rgba(145 158 171 / 20%))","&:hover":{backgroundColor:u.grey[50],borderColor:u.blue[200]},"&:focus-within":{backgroundColor:u.grey[50],borderColor:u.blue[400],boxShadow:"0 0 0 2px ".concat(u.blue[100])}}),".".concat(m.label),{flex:1,display:"flex",alignItems:"flex-end"}),".".concat(m.spacing),{flex:1,height:"var(--filter-bar-height, 40px)"})}));export{x as createFilterBar,x as default,m as filterBarClasses};
1
+ import{defineProperty as e,inherits as t,createClass as r,classCallCheck as n,callSuper as a,objectSpread2 as o}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as i,jsxs as l}from"react/jsx-runtime";import{Component as p}from"react";import{styled as s,Box as c,colors as u,ClickAwayListener as d}from"@mui/material";import{createFilterStore as f}from"./filter-store.js";import{FilterButton as h,FilterInput as g,FilterInputAdornment as v}from"./ui.units.js";import{mapDataViewContext as b,defaultDataViewContext as m}from"./context.js";var C={root:"FilterBar-root",content:"FilterBar-content",input:"FilterBar-input",inputWrap:"FilterBar-inputWrap",label:"FilterBar-label",button:"FilterBar-button",spacing:"FilterBar-spacing",sticky:"FilterBar-sticky",shadow:"FilterBar-shadow"};function x(){var s=function(){function s(){var t;n(this,s);for(var r=arguments.length,o=new Array(r),i=0;i<r;i++)o[i]=arguments[i];return t=a(this,s,[].concat(o)),e(t,"dataViewContext",m),e(t,"refInput",null),e(t,"refBeforeInput",null),e(t,"getRootClasses",(function(){var e,r=null!==(e=t.dataViewContext.filterBarConfigs.enableSticky)&&void 0!==e&&e,n=[C.root];return r&&n.push(C.sticky),t.dataViewContext.scrolled&&n.push(C.shadow),n.join(" ")})),e(t,"handleKeyDown",(function(e){var r=e.keyCode;if(13===r)e.stopPropagation(),e.preventDefault(),t.handleEnterSearch();else if(27===r){var n;e.stopPropagation(),e.preventDefault(),null===(n=t.refInput)||void 0===n||n.blur(),t.dataViewContext.onPanelClose()}})),e(t,"handleEnterSearch",(function(){var e;if(t.dataViewContext.keyword){var r=f(t.dataViewContext.filterState);r.addQuickSearch(t.dataViewContext.keyword,{reason:"quickSearch",area:"input"});var n,a=r.build();if(null!==(e=a.details)&&void 0!==e&&e.isChanged)null===(n=t.refInput)||void 0===n||n.blur(),t.dataViewContext.onFilterStateChange(a)}})),e(t,"handleClear",(function(){var e;null===(e=t.refInput)||void 0===e||e.blur(),t.dataViewContext.onClear()})),t}return t(s,p),r(s,[{key:"render",value:function(){var e=this;return b((function(t){var r,n,a,p=t.filterBarConfigs,s=p.id;return e.dataViewContext=t,i(d,{onClickAway:function(){return t.onPopperPanelChange(null)},children:l(k,o(o({className:e.getRootClasses()},null===(r=e.props.slots)||void 0===r?void 0:r.wrapProps),{},{children:[l("div",{className:C.content,children:[null===(n=e.props.slots)||void 0===n?void 0:n.left,l("div",{className:C.inputWrap,children:[i(h,{className:C.button,onClick:function(e){t.onPopperPanelChange(e.currentTarget,"filterButton")}}),l(c,{component:"label",htmlFor:s,className:C.label,children:[i(c,{ref:function(t){e.refBeforeInput=t}}),i(g,{ref:function(t){e.refInput=t},id:s,className:C.input,placeholder:p.placeholder,onChange:function(e){return t.onKeywordChange(e.target.value)},value:t.keyword,onFocus:function(){e.refBeforeInput&&t.onPopperPanelChange(e.refBeforeInput,"input")},onKeyDown:e.handleKeyDown,endAdornment:i(v,{notes:p.notes,keyword:t.keyword,onEnterSearch:e.handleEnterSearch,onClear:e.handleClear})})]})]}),null===(a=e.props.slots)||void 0===a?void 0:a.right]}),e.props.children]}))})}))}}])}();return s}var k=s(c)((function(t){var r=t.theme;return e(e(e(e(e(e(e({marginBottom:"4px",marginLeft:"-6px",marginRight:"-6px"},"&.".concat(C.sticky),{position:"sticky",top:"var(--height-header, 0)",zIndex:r.zIndex.appBar-1,backgroundColor:r.palette.background.paper}),".".concat(C.content),{display:"flex",gap:"8px",alignItems:"center",flexWrap:"wrap",padding:r.spacing(1.5,0,.75),position:"relative",backgroundColor:"#fff","&::after":{content:'""',position:"absolute",top:"100%",left:0,width:"100%",height:"6px",pointerEvents:"none",background:"linear-gradient(to bottom, rgba(0, 0, 0, 0.2), transparent)",maskImage:"linear-gradient(to right, transparent, black 20%, black 80%, transparent)",WebkitMaskImage:"linear-gradient(to right, transparent, black 20%, black 80%, transparent)",opacity:0}}),"&.".concat(C.shadow," .").concat(C.content),{"&::after":{transition:"opacity 0.2s ease-in-out",transitionDelay:"0.2s",opacity:1}}),".".concat(C.input),{input:{padding:"4px 0 5px"}}),".".concat(C.inputWrap),{flex:1,display:"flex",alignItems:"center",minHeight:"var(--filter-bar-height, 40px)",gap:"8px",borderRadius:"6px",transition:"all linear 0.2s",padding:"0 8px",backgroundColor:u.grey[50],border:"1px solid var(--color-divider, rgba(145 158 171 / 20%))","&:hover":{backgroundColor:u.grey[50],borderColor:u.blue[200]},"&:focus-within":{backgroundColor:u.grey[50],borderColor:u.blue[400],boxShadow:"0 0 0 2px ".concat(u.blue[100])}}),".".concat(C.label),{flex:1,display:"flex",alignItems:"flex-end"}),".".concat(C.spacing),{flex:1,height:"var(--filter-bar-height, 40px)"})}));export{x as createFilterBar,x as default,C as filterBarClasses};
2
2
  //# sourceMappingURL=create.filter-bar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.filter-bar.js","sources":["../../src/data-view/create.filter-bar.tsx"],"sourcesContent":["import React, { Component, PropsWithChildren } from 'react'\r\nimport { Box, BoxProps, ClickAwayListener, colors, styled } from '@mui/material'\r\nimport { IPositionElement } from './types'\r\nimport { createFilterStore } from './filter-store'\r\nimport { FilterButton, FilterInput, FilterInputAdornment } from './ui.units'\r\nimport { defaultDataViewContext, IDataViewContext, mapDataViewContext } from './context'\r\n\r\nexport const filterBarClasses = {\r\n root: 'FilterBar-root',\r\n content: 'FilterBar-content',\r\n input: 'FilterBar-input',\r\n inputWrap: 'FilterBar-inputWrap',\r\n label: 'FilterBar-label',\r\n button: 'FilterBar-button',\r\n spacing: 'FilterBar-spacing',\r\n panel: 'FilterBar-panel',\r\n sticky: 'FilterBar-sticky',\r\n shadow: 'FilterBar-shadow',\r\n helpText: 'FilterBar-helpText'\r\n}\r\n\r\nexport interface IFilterBarSlots extends IPositionElement<'left' | 'right'> {\r\n wrapProps?: BoxProps\r\n}\r\n\r\nexport interface IFilterBarProps extends PropsWithChildren {\r\n slots?: IFilterBarSlots\r\n}\r\n\r\nexport function createFilterBar<T>() {\r\n class FilterBar extends Component<IFilterBarProps> {\r\n dataViewContext: IDataViewContext<T> = defaultDataViewContext\r\n\r\n refInput: HTMLInputElement | null = null\r\n refBeforeInput: HTMLElement | null = null\r\n render() {\r\n return mapDataViewContext((context) => {\r\n const configs = context.filterBarConfigs\r\n const id = configs.id\r\n this.dataViewContext = context\r\n return (\r\n <ClickAwayListener onClickAway={() => context.onPopperPanelChange(null)}>\r\n <FilterWrapper className={this.getRootClasses()} {...this.props.slots?.wrapProps}>\r\n <div className={filterBarClasses.content}>\r\n {this.props.slots?.left}\r\n <div className={filterBarClasses.inputWrap}>\r\n <FilterButton\r\n className={filterBarClasses.button}\r\n onClick={(e) => {\r\n context.onPopperPanelChange(e.currentTarget, 'filterButton')\r\n }}\r\n />\r\n <Box component='label' htmlFor={id} className={filterBarClasses.label}>\r\n <Box\r\n ref={(ref: HTMLElement) => {\r\n this.refBeforeInput = ref\r\n }}\r\n />\r\n <FilterInput\r\n ref={(ref: HTMLInputElement) => {\r\n this.refInput = ref\r\n }}\r\n id={id}\r\n className={filterBarClasses.input}\r\n placeholder={configs.placeholder}\r\n onChange={(e) => context.onKeywordChange(e.target.value)}\r\n value={context.keyword}\r\n onFocus={() => {\r\n if (!this.refBeforeInput) return\r\n context.onPopperPanelChange(this.refBeforeInput, 'input')\r\n }}\r\n onKeyDown={this.handleKeyDown}\r\n endAdornment={\r\n <FilterInputAdornment\r\n notes={configs.notes}\r\n keyword={context.keyword}\r\n onEnterSearch={this.handleEnterSearch}\r\n onClear={this.handleClear}\r\n />\r\n }\r\n />\r\n </Box>\r\n </div>\r\n {this.props.slots?.right}\r\n </div>\r\n {this.props.children}\r\n </FilterWrapper>\r\n </ClickAwayListener>\r\n )\r\n })\r\n }\r\n\r\n getRootClasses = () => {\r\n const enableSticky = this.dataViewContext.filterBarConfigs.enableSticky ?? false\r\n const classes: string[] = [filterBarClasses.root]\r\n if (enableSticky) classes.push(filterBarClasses.sticky)\r\n if (this.dataViewContext.scrolled) classes.push(filterBarClasses.shadow)\r\n return classes.join(' ')\r\n }\r\n\r\n handleKeyDown: React.KeyboardEventHandler<HTMLInputElement | HTMLTextAreaElement> = (event) => {\r\n const keyCode: number = event.keyCode\r\n if (keyCode === 13) {\r\n event.stopPropagation()\r\n event.preventDefault()\r\n this.handleEnterSearch()\r\n } else if (keyCode === 27) {\r\n event.stopPropagation()\r\n event.preventDefault()\r\n this.refInput?.blur()\r\n this.dataViewContext.onPanelClose()\r\n }\r\n }\r\n\r\n handleEnterSearch = () => {\r\n if (!this.dataViewContext.keyword) return\r\n const store = createFilterStore<T>(this.dataViewContext.filterState)\r\n store.addQuickSearch(this.dataViewContext.keyword, { reason: 'quickSearch', area: 'input' })\r\n const temp = store.build()\r\n if (!!temp.details?.isChanged) {\r\n this.refInput?.blur()\r\n this.dataViewContext.onFilterStateChange(temp)\r\n }\r\n }\r\n\r\n handleClear = () => {\r\n this.refInput?.blur()\r\n this.dataViewContext.onClear()\r\n }\r\n }\r\n return FilterBar\r\n}\r\n\r\nexport default createFilterBar\r\n\r\nconst FilterWrapper = styled(Box)(({ theme }) => ({\r\n marginBottom: '4px',\r\n [`&.${filterBarClasses.sticky}`]: {\r\n position: 'sticky',\r\n top: 'var(--height-header, 0)',\r\n zIndex: theme.zIndex.appBar - 1,\r\n backgroundColor: theme.palette.background.paper\r\n },\r\n [`.${filterBarClasses.content}`]: {\r\n display: 'flex',\r\n gap: '8px',\r\n alignItems: 'center',\r\n flexWrap: 'wrap',\r\n padding: theme.spacing(1.5, 0, 0.75),\r\n position: 'relative',\r\n backgroundColor: '#fff',\r\n '&::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n top: '100%',\r\n left: 0,\r\n width: '100%',\r\n height: '6px',\r\n pointerEvents: 'none',\r\n\r\n background: 'linear-gradient(to bottom, rgba(0, 0, 0, 0.2), transparent)',\r\n\r\n maskImage: 'linear-gradient(to right, transparent, black 20%, black 80%, transparent)',\r\n WebkitMaskImage: 'linear-gradient(to right, transparent, black 20%, black 80%, transparent)',\r\n\r\n opacity: 0\r\n }\r\n },\r\n [`&.${filterBarClasses.shadow} .${filterBarClasses.content}`]: {\r\n '&::after': {\r\n transition: 'opacity 0.2s ease-in-out',\r\n transitionDelay: '0.2s',\r\n opacity: 1\r\n }\r\n },\r\n [`.${filterBarClasses.input}`]: {\r\n input: {\r\n padding: '4px 0 5px'\r\n }\r\n },\r\n [`.${filterBarClasses.inputWrap}`]: {\r\n flex: 1,\r\n display: 'flex',\r\n alignItems: 'center',\r\n minHeight: 'var(--filter-bar-height, 40px)',\r\n gap: '8px',\r\n borderRadius: '6px',\r\n transition: 'all linear 0.2s',\r\n padding: '0 8px',\r\n backgroundColor: colors.grey[50],\r\n border: '1px solid var(--color-divider, rgba(145 158 171 / 20%))',\r\n '&:hover': {\r\n backgroundColor: colors.grey[50],\r\n borderColor: colors.blue[200]\r\n },\r\n '&:focus-within': {\r\n backgroundColor: colors.grey[50],\r\n borderColor: colors.blue[400],\r\n boxShadow: `0 0 0 2px ${colors.blue[100]}`\r\n }\r\n },\r\n [`.${filterBarClasses.label}`]: {\r\n flex: 1,\r\n display: 'flex',\r\n alignItems: 'flex-end'\r\n },\r\n [`.${filterBarClasses.spacing}`]: {\r\n flex: 1,\r\n height: 'var(--filter-bar-height, 40px)'\r\n }\r\n}))\r\n"],"names":["filterBarClasses","root","content","input","inputWrap","label","button","spacing","sticky","shadow","createFilterBar","FilterBar","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","defaultDataViewContext","_this$dataViewContext","enableSticky","dataViewContext","filterBarConfigs","classes","push","scrolled","join","event","keyCode","stopPropagation","preventDefault","handleEnterSearch","_this$refInput","refInput","blur","onPanelClose","_temp$details","keyword","store","createFilterStore","filterState","addQuickSearch","reason","area","_this$refInput2","temp","build","details","isChanged","onFilterStateChange","_this$refInput3","onClear","_inherits","Component","_createClass","key","value","_this2","mapDataViewContext","context","_this2$props$slots","_this2$props$slots2","_this2$props$slots3","configs","id","_jsx","ClickAwayListener","onClickAway","onPopperPanelChange","children","_jsxs","FilterWrapper","_objectSpread","className","getRootClasses","props","slots","wrapProps","left","FilterButton","onClick","e","currentTarget","Box","component","htmlFor","ref","refBeforeInput","FilterInput","placeholder","onChange","onKeywordChange","target","onFocus","onKeyDown","handleKeyDown","endAdornment","FilterInputAdornment","notes","onEnterSearch","handleClear","right","styled","_ref3","theme","marginBottom","position","top","zIndex","appBar","backgroundColor","palette","background","paper","display","gap","alignItems","flexWrap","padding","width","height","pointerEvents","maskImage","WebkitMaskImage","opacity","transition","transitionDelay","flex","minHeight","borderRadius","colors","grey","border","borderColor","blue","boxShadow"],"mappings":"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"}
1
+ {"version":3,"file":"create.filter-bar.js","sources":["../../src/data-view/create.filter-bar.tsx"],"sourcesContent":["import React, { Component, PropsWithChildren } from 'react'\r\nimport { Box, BoxProps, ClickAwayListener, colors, styled } from '@mui/material'\r\nimport { IPositionElement } from './types'\r\nimport { createFilterStore } from './filter-store'\r\nimport { FilterButton, FilterInput, FilterInputAdornment } from './ui.units'\r\nimport { defaultDataViewContext, IDataViewContext, mapDataViewContext } from './context'\r\n\r\nexport const filterBarClasses = {\r\n root: 'FilterBar-root',\r\n content: 'FilterBar-content',\r\n input: 'FilterBar-input',\r\n inputWrap: 'FilterBar-inputWrap',\r\n label: 'FilterBar-label',\r\n button: 'FilterBar-button',\r\n spacing: 'FilterBar-spacing',\r\n panel: 'FilterBar-panel',\r\n sticky: 'FilterBar-sticky',\r\n shadow: 'FilterBar-shadow',\r\n helpText: 'FilterBar-helpText'\r\n}\r\n\r\nexport interface IFilterBarSlots extends IPositionElement<'left' | 'right'> {\r\n wrapProps?: BoxProps\r\n}\r\n\r\nexport interface IFilterBarProps extends PropsWithChildren {\r\n slots?: IFilterBarSlots\r\n}\r\n\r\nexport function createFilterBar<T>() {\r\n class FilterBar extends Component<IFilterBarProps> {\r\n dataViewContext: IDataViewContext<T> = defaultDataViewContext\r\n\r\n refInput: HTMLInputElement | null = null\r\n refBeforeInput: HTMLElement | null = null\r\n render() {\r\n return mapDataViewContext((context) => {\r\n const configs = context.filterBarConfigs\r\n const id = configs.id\r\n this.dataViewContext = context\r\n return (\r\n <ClickAwayListener onClickAway={() => context.onPopperPanelChange(null)}>\r\n <FilterWrapper className={this.getRootClasses()} {...this.props.slots?.wrapProps}>\r\n <div className={filterBarClasses.content}>\r\n {this.props.slots?.left}\r\n <div className={filterBarClasses.inputWrap}>\r\n <FilterButton\r\n className={filterBarClasses.button}\r\n onClick={(e) => {\r\n context.onPopperPanelChange(e.currentTarget, 'filterButton')\r\n }}\r\n />\r\n <Box component='label' htmlFor={id} className={filterBarClasses.label}>\r\n <Box\r\n ref={(ref: HTMLElement) => {\r\n this.refBeforeInput = ref\r\n }}\r\n />\r\n <FilterInput\r\n ref={(ref: HTMLInputElement) => {\r\n this.refInput = ref\r\n }}\r\n id={id}\r\n className={filterBarClasses.input}\r\n placeholder={configs.placeholder}\r\n onChange={(e) => context.onKeywordChange(e.target.value)}\r\n value={context.keyword}\r\n onFocus={() => {\r\n if (!this.refBeforeInput) return\r\n context.onPopperPanelChange(this.refBeforeInput, 'input')\r\n }}\r\n onKeyDown={this.handleKeyDown}\r\n endAdornment={\r\n <FilterInputAdornment\r\n notes={configs.notes}\r\n keyword={context.keyword}\r\n onEnterSearch={this.handleEnterSearch}\r\n onClear={this.handleClear}\r\n />\r\n }\r\n />\r\n </Box>\r\n </div>\r\n {this.props.slots?.right}\r\n </div>\r\n {this.props.children}\r\n </FilterWrapper>\r\n </ClickAwayListener>\r\n )\r\n })\r\n }\r\n\r\n getRootClasses = () => {\r\n const enableSticky = this.dataViewContext.filterBarConfigs.enableSticky ?? false\r\n const classes: string[] = [filterBarClasses.root]\r\n if (enableSticky) classes.push(filterBarClasses.sticky)\r\n if (this.dataViewContext.scrolled) classes.push(filterBarClasses.shadow)\r\n return classes.join(' ')\r\n }\r\n\r\n handleKeyDown: React.KeyboardEventHandler<HTMLInputElement | HTMLTextAreaElement> = (event) => {\r\n const keyCode: number = event.keyCode\r\n if (keyCode === 13) {\r\n event.stopPropagation()\r\n event.preventDefault()\r\n this.handleEnterSearch()\r\n } else if (keyCode === 27) {\r\n event.stopPropagation()\r\n event.preventDefault()\r\n this.refInput?.blur()\r\n this.dataViewContext.onPanelClose()\r\n }\r\n }\r\n\r\n handleEnterSearch = () => {\r\n if (!this.dataViewContext.keyword) return\r\n const store = createFilterStore<T>(this.dataViewContext.filterState)\r\n store.addQuickSearch(this.dataViewContext.keyword, { reason: 'quickSearch', area: 'input' })\r\n const temp = store.build()\r\n if (!!temp.details?.isChanged) {\r\n this.refInput?.blur()\r\n this.dataViewContext.onFilterStateChange(temp)\r\n }\r\n }\r\n\r\n handleClear = () => {\r\n this.refInput?.blur()\r\n this.dataViewContext.onClear()\r\n }\r\n }\r\n return FilterBar\r\n}\r\n\r\nexport default createFilterBar\r\n\r\nconst FilterWrapper = styled(Box)(({ theme }) => ({\r\n marginBottom: '4px',\r\n marginLeft: '-6px',\r\n marginRight: '-6px',\r\n [`&.${filterBarClasses.sticky}`]: {\r\n position: 'sticky',\r\n top: 'var(--height-header, 0)',\r\n zIndex: theme.zIndex.appBar - 1,\r\n backgroundColor: theme.palette.background.paper\r\n },\r\n [`.${filterBarClasses.content}`]: {\r\n display: 'flex',\r\n gap: '8px',\r\n alignItems: 'center',\r\n flexWrap: 'wrap',\r\n padding: theme.spacing(1.5, 0, 0.75),\r\n position: 'relative',\r\n backgroundColor: '#fff',\r\n '&::after': {\r\n content: '\"\"',\r\n position: 'absolute',\r\n top: '100%',\r\n left: 0,\r\n width: '100%',\r\n height: '6px',\r\n pointerEvents: 'none',\r\n\r\n background: 'linear-gradient(to bottom, rgba(0, 0, 0, 0.2), transparent)',\r\n\r\n maskImage: 'linear-gradient(to right, transparent, black 20%, black 80%, transparent)',\r\n WebkitMaskImage: 'linear-gradient(to right, transparent, black 20%, black 80%, transparent)',\r\n\r\n opacity: 0\r\n }\r\n },\r\n [`&.${filterBarClasses.shadow} .${filterBarClasses.content}`]: {\r\n '&::after': {\r\n transition: 'opacity 0.2s ease-in-out',\r\n transitionDelay: '0.2s',\r\n opacity: 1\r\n }\r\n },\r\n [`.${filterBarClasses.input}`]: {\r\n input: {\r\n padding: '4px 0 5px'\r\n }\r\n },\r\n [`.${filterBarClasses.inputWrap}`]: {\r\n flex: 1,\r\n display: 'flex',\r\n alignItems: 'center',\r\n minHeight: 'var(--filter-bar-height, 40px)',\r\n gap: '8px',\r\n borderRadius: '6px',\r\n transition: 'all linear 0.2s',\r\n padding: '0 8px',\r\n backgroundColor: colors.grey[50],\r\n border: '1px solid var(--color-divider, rgba(145 158 171 / 20%))',\r\n '&:hover': {\r\n backgroundColor: colors.grey[50],\r\n borderColor: colors.blue[200]\r\n },\r\n '&:focus-within': {\r\n backgroundColor: colors.grey[50],\r\n borderColor: colors.blue[400],\r\n boxShadow: `0 0 0 2px ${colors.blue[100]}`\r\n }\r\n },\r\n [`.${filterBarClasses.label}`]: {\r\n flex: 1,\r\n display: 'flex',\r\n alignItems: 'flex-end'\r\n },\r\n [`.${filterBarClasses.spacing}`]: {\r\n flex: 1,\r\n height: 'var(--filter-bar-height, 40px)'\r\n }\r\n}))\r\n"],"names":["filterBarClasses","root","content","input","inputWrap","label","button","spacing","sticky","shadow","createFilterBar","FilterBar","_this","_classCallCheck","_len","arguments","length","args","Array","_key","_callSuper","this","concat","_defineProperty","defaultDataViewContext","_this$dataViewContext","enableSticky","dataViewContext","filterBarConfigs","classes","push","scrolled","join","event","keyCode","stopPropagation","preventDefault","handleEnterSearch","_this$refInput","refInput","blur","onPanelClose","_temp$details","keyword","store","createFilterStore","filterState","addQuickSearch","reason","area","_this$refInput2","temp","build","details","isChanged","onFilterStateChange","_this$refInput3","onClear","_inherits","Component","_createClass","key","value","_this2","mapDataViewContext","context","_this2$props$slots","_this2$props$slots2","_this2$props$slots3","configs","id","_jsx","ClickAwayListener","onClickAway","onPopperPanelChange","children","_jsxs","FilterWrapper","_objectSpread","className","getRootClasses","props","slots","wrapProps","left","FilterButton","onClick","e","currentTarget","Box","component","htmlFor","ref","refBeforeInput","FilterInput","placeholder","onChange","onKeywordChange","target","onFocus","onKeyDown","handleKeyDown","endAdornment","FilterInputAdornment","notes","onEnterSearch","handleClear","right","styled","_ref3","theme","marginBottom","marginLeft","marginRight","position","top","zIndex","appBar","backgroundColor","palette","background","paper","display","gap","alignItems","flexWrap","padding","width","height","pointerEvents","maskImage","WebkitMaskImage","opacity","transition","transitionDelay","flex","minHeight","borderRadius","colors","grey","border","borderColor","blue","boxShadow"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{defineProperty as t,inherits as e,createClass as i,classCallCheck as n,callSuper as r}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as l,jsxs as a}from"react/jsx-runtime";import{Fragment as o,Component as d}from"react";import{styled as s,MenuList as u,Box as f,MenuItem as v,Button as c}from"@mui/material";import{createFilterStore as g}from"./filter-store.js";import{mapDataViewContext as m}from"./context.js";import{filterMenuClasses as p,getFieldsValidation as S,convertFormDataToJson as h,filterFieldValidated as y}from"./helpers.js";import{MenuWithTypeString as C,MenuWithTypeDateRange as b,MenuWithTypeDate as R,MenuWithTypeSelectMulti as x,MenuWithTypeSelect as B}from"./ui.units.js";function j(){return function(){function s(e){var i;return n(this,s),i=r(this,s,[e]),t(i,"renderForm",(function(t,e){return a("form",{onSubmit:function(n){return i.handleSubmit(n,t,e)},children:[i.renderWithMode(t,e),a(E,{children:[l(c,{size:"small",color:"inherit",onClick:t.onPanelClose,children:"Cancel"}),l(c,{size:"small",color:"primary",type:"submit",sx:{fontWeight:700},children:"Apply"})]})]})})),t(i,"renderWithMode",(function(t,e){var n,r=null===(n=t.filterBarConfigs.fields)||void 0===n?void 0:n[e];switch(null==r?void 0:r.type){case"select":return l(B,{name:e.toString(),fieldConfig:r,validationResult:i.state.validationResult,onChange:function(){return i.setState({validationResult:void 0})}});case"select-multi":return l(x,{name:e.toString(),fieldConfig:r,validationResult:i.state.validationResult,onChange:function(){return i.setState({validationResult:void 0})}});case"date":return l(R,{name:e.toString(),fieldConfig:r,validationResult:i.state.validationResult});case"date-range":return l(b,{name:e.toString(),fieldConfig:r,validationResult:i.state.validationResult});default:return l(C,{name:e.toString(),fieldConfig:r,validationResult:i.state.validationResult})}})),t(i,"handleSubmit",(function(t,e,n){null==t||t.preventDefault(),null==t||t.stopPropagation();var r=new FormData(null==t?void 0:t.currentTarget),l=i.formValidate(r,n,e);l.hasError?i.setState({validationResult:l}):i.addFilter(r,e,n)})),t(i,"formValidate",(function(t,e,i){var n=h(t),r=S(i.filterBarConfigs.fields||{})[e];if("select-multi"===(null==r?void 0:r.type)){if(0===t.getAll(e.toString()).length)return{hasError:!0,message:"Please select at least one option"}}else if("date-range"===(null==r?void 0:r.type)){var l,a,o=null===(l=t.get("".concat(e.toString(),"_start")))||void 0===l?void 0:l.toString(),d=null===(a=t.get("".concat(e.toString(),"_end")))||void 0===a?void 0:a.toString();if(!o||!d)return{hasError:!0,message:"Please select both start and end dates"};if(new Date(o)>new Date(d))return{hasError:!0,message:"Start date must be before end date"}}else{var s,u=null===(s=n[e])||void 0===s?void 0:s.toString(),f=y(null!=u?u:"",e,r);if(f.error)return{hasError:!0,message:f.message}}return{hasError:!1}})),t(i,"addFilter",(function(t,e,i){var n,r,l,a=S(e.filterBarConfigs.fields||{})[i],o=g((null==e?void 0:e.filterState)||{}),d=h(t),s=(null===(n=t.get("filterLogic"))||void 0===n?void 0:n.toString())||"and",u=(null===(r=t.get("dateLogic"))||void 0===r?void 0:r.toString())||"equals",f=(null===(l=t.get("dateRangeLogic"))||void 0===l?void 0:l.toString())||"between";if("date-range"===(null==a?void 0:a.type)){var v,c,m=null===(v=t.get("".concat(i.toString(),"_start")))||void 0===v?void 0:v.toString(),p=null===(c=t.get("".concat(i.toString(),"_end")))||void 0===c?void 0:c.toString();if(m&&p){var y={type:"date-range",startDate:m,endDate:p,dateRangeLogic:f,label:"".concat(m," to ").concat(p)};o.addFilterItem(i,y,{reason:"field",area:"filterButton"})}}else{var C=[];if("select-multi"===(null==a?void 0:a.type)){var b=d[i];Array.isArray(b)?C=b.map((function(t){return t.toString()})):b&&(C=[b.toString()])}else{var R,x=null===(R=d[i])||void 0===R?void 0:R.toString();x&&(C=[x])}C.forEach((function(t){var e,n=void 0;"select"!==(null==a?void 0:a.type)&&"select-multi"!==(null==a?void 0:a.type)||(n=null===(e=a.options.find((function(e){return e.value===t})))||void 0===e?void 0:e.label);var r={type:(null==a?void 0:a.type)||"string",value:t,label:n};"string"!==(null==a?void 0:a.type)&&(r.type=null==a?void 0:a.type),"select-multi"===(null==a?void 0:a.type)&&(r.logic=s),"date"===(null==a?void 0:a.type)&&(r.dateLogic=u),o.addFilterItem(i,r,{reason:"field",area:"filterButton"})}))}e.onFilterStateChange(o.build())})),i.state={fieldSelected:null},i}return e(s,d),i(s,[{key:"render",value:function(){var t=this;return m((function(e){var i=t.state.fieldSelected;if(i)return t.renderForm(e,i);var n=S(e.filterBarConfigs.fields||{}),r=Object.keys(n);return l(F,{className:p.list,sx:{minWidth:"200px"},children:r.map((function(i,n){var r,a,d=null===(r=e.filterBarConfigs.fields)||void 0===r?void 0:r[i];return d?l(v,{className:p.item,onClick:function(){return t.setState({fieldSelected:i,validationResult:void 0})},children:null!==(a=null==d?void 0:d.label)&&void 0!==a?a:i.toString()},i.toString()+n):l(o,{},i.toString()+n)}))})}))}}])}()}var F=s(u)(t({padding:0},".".concat(p.item),{height:"var(--filter-item-height, 40px)",padding:"0 16px","&:not(:last-child)":{borderBottom:"1px solid var(--color-divider, rgba(145 160 170 / 10%))"}})),E=s(f)({display:"flex",alignItems:"center",justifyContent:"flex-end",padding:"8px"});export{j as default};
1
+ import{defineProperty as t,inherits as e,createClass as i,classCallCheck as r,callSuper as n}from"../_virtual/_rollupPluginBabelHelpers.js";import{jsx as l,jsxs as a}from"react/jsx-runtime";import{Fragment as o,Component as d}from"react";import{styled as s,MenuList as u,Box as f,MenuItem as v,Button as c}from"@mui/material";import{createFilterStore as g}from"./filter-store.js";import{mapDataViewContext as m}from"./context.js";import{filterMenuClasses as p,getFieldsValidation as S,convertFormDataToJson as h,filterFieldValidated as y}from"./helpers.js";import{MenuWithTypeString as C,MenuWithTypeDateRange as b,MenuWithTypeDate as R,MenuWithTypeSelectMulti as x,MenuWithTypeSelect as F}from"./ui.units.js";function B(){return function(){function s(e){var i;return r(this,s),i=n(this,s,[e]),t(i,"renderForm",(function(t,e){return a("form",{onSubmit:function(r){return i.handleSubmit(r,t,e)},children:[i.renderWithMode(t,e),a(E,{children:[l(c,{size:"small",color:"inherit",onClick:t.onPanelClose,children:"Cancel"}),l(c,{size:"small",color:"primary",type:"submit",sx:{fontWeight:700},children:"Apply"})]})]})})),t(i,"renderWithMode",(function(t,e){var r,n=null===(r=t.filterBarConfigs.fields)||void 0===r?void 0:r[e];switch(null==n?void 0:n.type){case"select":return l(F,{name:e.toString(),fieldConfig:n,validationResult:i.state.validationResult,onChange:function(){return i.setState({validationResult:void 0})}});case"select-multi":return l(x,{name:e.toString(),fieldConfig:n,validationResult:i.state.validationResult,onChange:function(){return i.setState({validationResult:void 0})}});case"date":return l(R,{name:e.toString(),fieldConfig:n,validationResult:i.state.validationResult});case"date-range":return l(b,{name:e.toString(),fieldConfig:n,validationResult:i.state.validationResult});default:return l(C,{name:e.toString(),fieldConfig:n,validationResult:i.state.validationResult})}})),t(i,"handleSubmit",(function(t,e,r){null==t||t.preventDefault(),null==t||t.stopPropagation();var n=new FormData(null==t?void 0:t.currentTarget),l=i.formValidate(n,r,e);l.hasError?i.setState({validationResult:l}):i.addFilter(n,e,r)})),t(i,"formValidate",(function(t,e,i){var r=h(t),n=S(i.filterBarConfigs.fields||{})[e];if("select-multi"===(null==n?void 0:n.type)){if(0===t.getAll(e.toString()).length)return{hasError:!0,message:"Please select at least one option"}}else if("date-range"===(null==n?void 0:n.type)){var l,a,o=null===(l=t.get("".concat(e.toString(),"_start")))||void 0===l?void 0:l.toString(),d=null===(a=t.get("".concat(e.toString(),"_end")))||void 0===a?void 0:a.toString();if(!o||!d)return{hasError:!0,message:"Please select both start and end dates"};if(new Date(o)>new Date(d))return{hasError:!0,message:"Start date must be before end date"}}else{var s,u=null===(s=r[e])||void 0===s?void 0:s.toString(),f=y(null!=u?u:"",e,n);if(f.error)return{hasError:!0,message:f.message}}return{hasError:!1}})),t(i,"addFilter",(function(t,e,i){var r,n,l=S(e.filterBarConfigs.fields||{})[i],a=g((null==e?void 0:e.filterState)||{}),o=h(t),d=(null===(r=t.get("filterLogic"))||void 0===r?void 0:r.toString())||"and",s=(null===(n=t.get("dateRangeLogic"))||void 0===n?void 0:n.toString())||"between";if("date-range"===(null==l?void 0:l.type)){var u,f,v=null===(u=t.get("".concat(i.toString(),"_start")))||void 0===u?void 0:u.toString(),c=null===(f=t.get("".concat(i.toString(),"_end")))||void 0===f?void 0:f.toString();if(v&&c){var m={type:"date-range",startDate:v,endDate:c,dateRangeLogic:s,label:"".concat(v," to ").concat(c)};a.addFilterItem(i,m,{reason:"field",area:"filterButton"})}}else if("date"===(null==l?void 0:l.type)){var p,y=null===(p=o[i])||void 0===p?void 0:p.toString();if(y){var C,b={type:"date",value:y,dateLogic:(null===(C=t.get("dateLogic"))||void 0===C?void 0:C.toString())||"before"};a.removeFilterField(i,{reason:"field"}),a.addFilterItem(i,b,{reason:"field",area:"filterButton"})}}else{var R=[];if("select-multi"===(null==l?void 0:l.type)){var x=o[i];Array.isArray(x)?R=x.map((function(t){return t.toString()})):x&&(R=[x.toString()])}else{var F,B=null===(F=o[i])||void 0===F?void 0:F.toString();B&&(R=[B])}R.forEach((function(t){var e,r=void 0;"select"!==(null==l?void 0:l.type)&&"select-multi"!==(null==l?void 0:l.type)||(r=null===(e=l.options.find((function(e){return e.value===t})))||void 0===e?void 0:e.label);var n={type:(null==l?void 0:l.type)||"string",value:t,label:r};"string"!==(null==l?void 0:l.type)&&(n.type=null==l?void 0:l.type),"select-multi"===(null==l?void 0:l.type)&&(n.logic=d),a.addFilterItem(i,n,{reason:"field",area:"filterButton"})}))}e.onFilterStateChange(a.build())})),i.state={fieldSelected:null},i}return e(s,d),i(s,[{key:"render",value:function(){var t=this;return m((function(e){var i=t.state.fieldSelected;if(i)return t.renderForm(e,i);var r=S(e.filterBarConfigs.fields||{}),n=Object.keys(r);return l(j,{className:p.list,sx:{minWidth:"200px"},children:n.map((function(i,r){var n,a,d=null===(n=e.filterBarConfigs.fields)||void 0===n?void 0:n[i];return d?l(v,{className:p.item,onClick:function(){return t.setState({fieldSelected:i,validationResult:void 0})},children:null!==(a=null==d?void 0:d.label)&&void 0!==a?a:i.toString()},i.toString()+r):l(o,{},i.toString()+r)}))})}))}}])}()}var j=s(u)(t({padding:0},".".concat(p.item),{height:"var(--filter-item-height, 40px)",padding:"0 16px","&:not(:last-child)":{borderBottom:"1px solid var(--color-divider, rgba(145 160 170 / 10%))"}})),E=s(f)({display:"flex",alignItems:"center",justifyContent:"flex-end",padding:"8px"});export{B as default};
2
2
  //# sourceMappingURL=create.filter-menu.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create.filter-menu.js","sources":["../../src/data-view/create.filter-menu.tsx"],"sourcesContent":["import React, { Component, ComponentType, Fragment } from 'react'\r\nimport { Box, Button, MenuItem, MenuList, styled } from '@mui/material'\r\nimport { createFilterStore } from './filter-store'\r\nimport { IDataViewContext, mapDataViewContext } from './context'\r\nimport { convertFormDataToJson, filterFieldValidated, filterMenuClasses, getFieldsValidation } from './helpers'\r\nimport { IFilterConfigs, IValidationResult, IFilterLogic, IFilterItem, IFilterDateLogic, IFilterDateRangeLogic } from './types'\r\nimport { MenuWithTypeSelect, MenuWithTypeSelectMulti, MenuWithTypeString, MenuWithTypeDate, MenuWithTypeDateRange } from './ui.units'\r\n\r\nexport interface IFilterMenuProps {}\r\n\r\nexport interface IFilterMenuState<T> {\r\n fieldSelected: keyof IFilterConfigs<T> | null\r\n validationResult?: IValidationResult\r\n}\r\n\r\nfunction createFilterMenu<T>(): ComponentType<IFilterMenuProps> {\r\n class FilterMenu extends Component<IFilterMenuProps, IFilterMenuState<T>> {\r\n constructor(props: IFilterMenuProps) {\r\n super(props)\r\n this.state = {\r\n fieldSelected: null\r\n }\r\n }\r\n\r\n render() {\r\n return mapDataViewContext<T>((context) => {\r\n const { fieldSelected } = this.state\r\n if (!!fieldSelected) return this.renderForm(context, fieldSelected)\r\n const fieldsValidation = getFieldsValidation<T>(context.filterBarConfigs.fields || {})\r\n const keys = Object.keys(fieldsValidation) as (keyof T)[]\r\n return (\r\n <MenuListCustom className={filterMenuClasses.list} sx={{ minWidth: '200px' }}>\r\n {keys.map((x, i) => {\r\n const item = context.filterBarConfigs.fields?.[x]\r\n if (!item) return <Fragment key={x.toString() + i} />\r\n return (\r\n <MenuItem\r\n key={x.toString() + i}\r\n className={filterMenuClasses.item}\r\n onClick={() =>\r\n this.setState({\r\n fieldSelected: x,\r\n validationResult: undefined\r\n })\r\n }\r\n >\r\n {item?.label ?? x.toString()}\r\n </MenuItem>\r\n )\r\n })}\r\n </MenuListCustom>\r\n )\r\n })\r\n }\r\n\r\n renderForm = (context: IDataViewContext<T>, fieldSelected: keyof T) => (\r\n <form onSubmit={(e) => this.handleSubmit(e, context, fieldSelected)}>\r\n {this.renderWithMode(context, fieldSelected)}\r\n <ActionWrapper>\r\n <Button size='small' color='inherit' onClick={context.onPanelClose}>\r\n Cancel\r\n </Button>\r\n <Button size='small' color='primary' type='submit' sx={{ fontWeight: 700 }}>\r\n Apply\r\n </Button>\r\n </ActionWrapper>\r\n </form>\r\n )\r\n\r\n renderWithMode = (context: IDataViewContext<T>, fieldSelected: keyof T) => {\r\n const fieldConfig = context.filterBarConfigs.fields?.[fieldSelected]\r\n switch (fieldConfig?.type) {\r\n case 'select':\r\n return (\r\n <MenuWithTypeSelect\r\n name={fieldSelected.toString()}\r\n fieldConfig={fieldConfig}\r\n validationResult={this.state.validationResult}\r\n onChange={() => this.setState({ validationResult: undefined })}\r\n />\r\n )\r\n case 'select-multi':\r\n return (\r\n <MenuWithTypeSelectMulti\r\n name={fieldSelected.toString()}\r\n fieldConfig={fieldConfig}\r\n validationResult={this.state.validationResult}\r\n onChange={() => this.setState({ validationResult: undefined })}\r\n />\r\n )\r\n case 'date':\r\n return <MenuWithTypeDate name={fieldSelected.toString()} fieldConfig={fieldConfig} validationResult={this.state.validationResult} />\r\n case 'date-range':\r\n return <MenuWithTypeDateRange name={fieldSelected.toString()} fieldConfig={fieldConfig} validationResult={this.state.validationResult} />\r\n case 'string':\r\n default:\r\n return <MenuWithTypeString name={fieldSelected.toString()} fieldConfig={fieldConfig} validationResult={this.state.validationResult} />\r\n }\r\n }\r\n\r\n /**\r\n * Handle form submission\r\n * @param event - The form submit event\r\n * @param context - The filter bar context\r\n * @param fieldSelected - The selected field to filter\r\n */\r\n handleSubmit = (event: React.FormEvent<HTMLFormElement>, context: IDataViewContext<T>, fieldSelected: keyof IFilterConfigs<T>) => {\r\n event?.preventDefault()\r\n event?.stopPropagation()\r\n\r\n const formData = new FormData(event?.currentTarget as HTMLFormElement)\r\n\r\n // Validate form data\r\n const validation = this.formValidate(formData, fieldSelected, context)\r\n if (validation.hasError) {\r\n this.setState({ validationResult: validation })\r\n return\r\n }\r\n\r\n // If validation passes, add filter\r\n this.addFilter(formData, context, fieldSelected)\r\n }\r\n\r\n /**\r\n * Validate form data based on field type and configuration\r\n * @param formData - The form data to validate\r\n * @param fieldSelected - The selected field to validate\r\n * @param context - The filter bar context\r\n * @returns Validation result with error status and message\r\n */\r\n formValidate = (formData: FormData, fieldSelected: keyof IFilterConfigs<T>, context: IDataViewContext<T>): IValidationResult => {\r\n const obj = convertFormDataToJson<T>(formData)\r\n const fieldsValidation = getFieldsValidation<T>(context.filterBarConfigs.fields || {})\r\n const fieldConfig = fieldsValidation[fieldSelected]\r\n\r\n if (fieldConfig?.type === 'select-multi') {\r\n const values = formData.getAll(fieldSelected.toString())\r\n if (values.length === 0) {\r\n return { hasError: true, message: 'Please select at least one option' }\r\n }\r\n } else if (fieldConfig?.type === 'date-range') {\r\n const startDate = formData.get(`${fieldSelected.toString()}_start`)?.toString()\r\n const endDate = formData.get(`${fieldSelected.toString()}_end`)?.toString()\r\n\r\n if (!startDate || !endDate) {\r\n return { hasError: true, message: 'Please select both start and end dates' }\r\n }\r\n\r\n if (new Date(startDate) > new Date(endDate)) {\r\n return { hasError: true, message: 'Start date must be before end date' }\r\n }\r\n } else {\r\n const value = obj[fieldSelected as keyof T]?.toString()\r\n const validate = filterFieldValidated(value ?? '', fieldSelected, fieldConfig)\r\n if (validate.error) {\r\n return { hasError: true, message: validate.message }\r\n }\r\n }\r\n\r\n return { hasError: false }\r\n }\r\n\r\n /**\r\n * Add filter based on field type and form data\r\n * @param formData - The form data containing field values\r\n * @param context - The filter bar context\r\n * @param fieldSelected - The selected field to filter\r\n */\r\n addFilter = (formData: FormData, context: IDataViewContext<T>, fieldSelected: keyof IFilterConfigs<T>) => {\r\n const fieldsValidation = getFieldsValidation<T>(context.filterBarConfigs.fields || {})\r\n const fieldConfig = fieldsValidation[fieldSelected]\r\n const store = createFilterStore<T>(context?.filterState || {})\r\n const formDataJson = convertFormDataToJson<T>(formData)\r\n\r\n // Get logic values from form data\r\n const filterLogic = (formData.get('filterLogic')?.toString() as IFilterLogic) || 'and'\r\n const dateLogic = (formData.get('dateLogic')?.toString() as IFilterDateLogic) || 'equals'\r\n const dateRangeLogic = (formData.get('dateRangeLogic')?.toString() as IFilterDateRangeLogic) || 'between'\r\n\r\n // Handle date-range separately\r\n if (fieldConfig?.type === 'date-range') {\r\n const startDate = formData.get(`${fieldSelected.toString()}_start`)?.toString()\r\n const endDate = formData.get(`${fieldSelected.toString()}_end`)?.toString()\r\n\r\n if (startDate && endDate) {\r\n const filterItem: IFilterItem = {\r\n type: 'date-range',\r\n startDate,\r\n endDate,\r\n dateRangeLogic: dateRangeLogic,\r\n label: `${startDate} to ${endDate}`\r\n }\r\n\r\n store.addFilterItem(fieldSelected as keyof T, filterItem, { reason: 'field', area: 'filterButton' })\r\n }\r\n } else {\r\n // Get all values based on field type\r\n let values: string[] = []\r\n\r\n if (fieldConfig?.type === 'select-multi') {\r\n // For multi-select, obj[fieldSelected] should be an array\r\n const fieldValue = formDataJson[fieldSelected]\r\n if (Array.isArray(fieldValue)) {\r\n values = fieldValue.map((v) => v.toString())\r\n } else if (fieldValue) {\r\n values = [fieldValue.toString()]\r\n }\r\n } else {\r\n // For single select and string\r\n const value = formDataJson[fieldSelected as keyof T]?.toString()\r\n if (value) {\r\n values = [value]\r\n }\r\n }\r\n\r\n // Add all values to store\r\n values.forEach((value) => {\r\n let label: string | undefined = undefined\r\n\r\n if (fieldConfig?.type === 'select' || fieldConfig?.type === 'select-multi') {\r\n label = fieldConfig.options.find((x) => x.value === value)?.label\r\n }\r\n\r\n // Create filter item with type and logic\r\n const filterItem: IFilterItem = { type: fieldConfig?.type || 'string', value, label }\r\n if (fieldConfig?.type !== 'string') filterItem.type = fieldConfig?.type\r\n if (fieldConfig?.type === 'select-multi') filterItem.logic = filterLogic\r\n if (fieldConfig?.type === 'date') filterItem.dateLogic = dateLogic\r\n\r\n store.addFilterItem(fieldSelected as keyof T, filterItem, { reason: 'field', area: 'filterButton' })\r\n })\r\n }\r\n\r\n context.onFilterStateChange(store.build())\r\n }\r\n }\r\n\r\n return FilterMenu\r\n}\r\n\r\nexport default createFilterMenu\r\n\r\nconst MenuListCustom = styled(MenuList)({\r\n padding: 0,\r\n [`.${filterMenuClasses.item}`]: {\r\n height: 'var(--filter-item-height, 40px)',\r\n padding: '0 16px',\r\n '&:not(:last-child)': {\r\n borderBottom: '1px solid var(--color-divider, rgba(145 160 170 / 10%))'\r\n }\r\n }\r\n})\r\n\r\nconst ActionWrapper = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n padding: '8px'\r\n})\r\n"],"names":["createFilterMenu","FilterMenu","props","_this","_classCallCheck","_callSuper","_defineProperty","context","fieldSelected","_jsxs","onSubmit","e","handleSubmit","children","renderWithMode","ActionWrapper","_jsx","Button","size","color","onClick","onPanelClose","type","sx","fontWeight","_context$filterBarCon","fieldConfig","filterBarConfigs","fields","MenuWithTypeSelect","name","toString","validationResult","state","onChange","setState","undefined","MenuWithTypeSelectMulti","MenuWithTypeDate","MenuWithTypeDateRange","MenuWithTypeString","event","preventDefault","stopPropagation","formData","FormData","currentTarget","validation","formValidate","hasError","addFilter","obj","convertFormDataToJson","getFieldsValidation","getAll","length","message","_formData$get","_formData$get2","startDate","get","concat","endDate","Date","_obj$fieldSelected","value","validate","filterFieldValidated","error","_formData$get3","_formData$get4","_formData$get5","store","createFilterStore","filterState","formDataJson","filterLogic","dateLogic","dateRangeLogic","_formData$get6","_formData$get7","filterItem","label","addFilterItem","reason","area","values","fieldValue","Array","isArray","map","v","_formDataJson$fieldSe","forEach","_fieldConfig$options$","options","find","x","logic","onFilterStateChange","build","_inherits","Component","_createClass","key","_this2","this","mapDataViewContext","renderForm","fieldsValidation","keys","Object","MenuListCustom","className","filterMenuClasses","list","minWidth","i","_context$filterBarCon2","_item$label","item","MenuItem","Fragment","styled","MenuList","padding","height","borderBottom","Box","display","alignItems","justifyContent"],"mappings":"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"}
1
+ {"version":3,"file":"create.filter-menu.js","sources":["../../src/data-view/create.filter-menu.tsx"],"sourcesContent":["import React, { Component, ComponentType, Fragment } from 'react'\r\nimport { Box, Button, MenuItem, MenuList, styled } from '@mui/material'\r\nimport { createFilterStore } from './filter-store'\r\nimport { IDataViewContext, mapDataViewContext } from './context'\r\nimport { convertFormDataToJson, filterFieldValidated, filterMenuClasses, getFieldsValidation } from './helpers'\r\nimport { IFilterConfigs, IValidationResult, IFilterLogic, IFilterItem, IFilterDateLogic, IFilterDateRangeLogic } from './types'\r\nimport { MenuWithTypeSelect, MenuWithTypeSelectMulti, MenuWithTypeString, MenuWithTypeDate, MenuWithTypeDateRange } from './ui.units'\r\n\r\nexport interface IFilterMenuProps {}\r\n\r\nexport interface IFilterMenuState<T> {\r\n fieldSelected: keyof IFilterConfigs<T> | null\r\n validationResult?: IValidationResult\r\n}\r\n\r\nfunction createFilterMenu<T>(): ComponentType<IFilterMenuProps> {\r\n class FilterMenu extends Component<IFilterMenuProps, IFilterMenuState<T>> {\r\n constructor(props: IFilterMenuProps) {\r\n super(props)\r\n this.state = {\r\n fieldSelected: null\r\n }\r\n }\r\n\r\n render() {\r\n return mapDataViewContext<T>((context) => {\r\n const { fieldSelected } = this.state\r\n if (!!fieldSelected) return this.renderForm(context, fieldSelected)\r\n const fieldsValidation = getFieldsValidation<T>(context.filterBarConfigs.fields || {})\r\n const keys = Object.keys(fieldsValidation) as (keyof T)[]\r\n return (\r\n <MenuListCustom className={filterMenuClasses.list} sx={{ minWidth: '200px' }}>\r\n {keys.map((x, i) => {\r\n const item = context.filterBarConfigs.fields?.[x]\r\n if (!item) return <Fragment key={x.toString() + i} />\r\n return (\r\n <MenuItem\r\n key={x.toString() + i}\r\n className={filterMenuClasses.item}\r\n onClick={() =>\r\n this.setState({\r\n fieldSelected: x,\r\n validationResult: undefined\r\n })\r\n }\r\n >\r\n {item?.label ?? x.toString()}\r\n </MenuItem>\r\n )\r\n })}\r\n </MenuListCustom>\r\n )\r\n })\r\n }\r\n\r\n renderForm = (context: IDataViewContext<T>, fieldSelected: keyof T) => (\r\n <form onSubmit={(e) => this.handleSubmit(e, context, fieldSelected)}>\r\n {this.renderWithMode(context, fieldSelected)}\r\n <ActionWrapper>\r\n <Button size='small' color='inherit' onClick={context.onPanelClose}>\r\n Cancel\r\n </Button>\r\n <Button size='small' color='primary' type='submit' sx={{ fontWeight: 700 }}>\r\n Apply\r\n </Button>\r\n </ActionWrapper>\r\n </form>\r\n )\r\n\r\n renderWithMode = (context: IDataViewContext<T>, fieldSelected: keyof T) => {\r\n const fieldConfig = context.filterBarConfigs.fields?.[fieldSelected]\r\n switch (fieldConfig?.type) {\r\n case 'select':\r\n return (\r\n <MenuWithTypeSelect\r\n name={fieldSelected.toString()}\r\n fieldConfig={fieldConfig}\r\n validationResult={this.state.validationResult}\r\n onChange={() => this.setState({ validationResult: undefined })}\r\n />\r\n )\r\n case 'select-multi':\r\n return (\r\n <MenuWithTypeSelectMulti\r\n name={fieldSelected.toString()}\r\n fieldConfig={fieldConfig}\r\n validationResult={this.state.validationResult}\r\n onChange={() => this.setState({ validationResult: undefined })}\r\n />\r\n )\r\n case 'date':\r\n return <MenuWithTypeDate name={fieldSelected.toString()} fieldConfig={fieldConfig} validationResult={this.state.validationResult} />\r\n case 'date-range':\r\n return <MenuWithTypeDateRange name={fieldSelected.toString()} fieldConfig={fieldConfig} validationResult={this.state.validationResult} />\r\n case 'string':\r\n default:\r\n return <MenuWithTypeString name={fieldSelected.toString()} fieldConfig={fieldConfig} validationResult={this.state.validationResult} />\r\n }\r\n }\r\n\r\n /**\r\n * Handle form submission\r\n * @param event - The form submit event\r\n * @param context - The filter bar context\r\n * @param fieldSelected - The selected field to filter\r\n */\r\n handleSubmit = (event: React.FormEvent<HTMLFormElement>, context: IDataViewContext<T>, fieldSelected: keyof IFilterConfigs<T>) => {\r\n event?.preventDefault()\r\n event?.stopPropagation()\r\n\r\n const formData = new FormData(event?.currentTarget as HTMLFormElement)\r\n\r\n // Validate form data\r\n const validation = this.formValidate(formData, fieldSelected, context)\r\n if (validation.hasError) {\r\n this.setState({ validationResult: validation })\r\n return\r\n }\r\n\r\n // If validation passes, add filter\r\n this.addFilter(formData, context, fieldSelected)\r\n }\r\n\r\n /**\r\n * Validate form data based on field type and configuration\r\n * @param formData - The form data to validate\r\n * @param fieldSelected - The selected field to validate\r\n * @param context - The filter bar context\r\n * @returns Validation result with error status and message\r\n */\r\n formValidate = (formData: FormData, fieldSelected: keyof IFilterConfigs<T>, context: IDataViewContext<T>): IValidationResult => {\r\n const obj = convertFormDataToJson<T>(formData)\r\n const fieldsValidation = getFieldsValidation<T>(context.filterBarConfigs.fields || {})\r\n const fieldConfig = fieldsValidation[fieldSelected]\r\n\r\n if (fieldConfig?.type === 'select-multi') {\r\n const values = formData.getAll(fieldSelected.toString())\r\n if (values.length === 0) {\r\n return { hasError: true, message: 'Please select at least one option' }\r\n }\r\n } else if (fieldConfig?.type === 'date-range') {\r\n const startDate = formData.get(`${fieldSelected.toString()}_start`)?.toString()\r\n const endDate = formData.get(`${fieldSelected.toString()}_end`)?.toString()\r\n\r\n if (!startDate || !endDate) {\r\n return { hasError: true, message: 'Please select both start and end dates' }\r\n }\r\n\r\n if (new Date(startDate) > new Date(endDate)) {\r\n return { hasError: true, message: 'Start date must be before end date' }\r\n }\r\n } else {\r\n const value = obj[fieldSelected as keyof T]?.toString()\r\n const validate = filterFieldValidated(value ?? '', fieldSelected, fieldConfig)\r\n if (validate.error) {\r\n return { hasError: true, message: validate.message }\r\n }\r\n }\r\n\r\n return { hasError: false }\r\n }\r\n\r\n /**\r\n * Add filter based on field type and form data\r\n * @param formData - The form data containing field values\r\n * @param context - The filter bar context\r\n * @param fieldSelected - The selected field to filter\r\n */\r\n addFilter = (formData: FormData, context: IDataViewContext<T>, fieldSelected: keyof IFilterConfigs<T>) => {\r\n const fieldsValidation = getFieldsValidation<T>(context.filterBarConfigs.fields || {})\r\n const fieldConfig = fieldsValidation[fieldSelected]\r\n const store = createFilterStore<T>(context?.filterState || {})\r\n const formDataJson = convertFormDataToJson<T>(formData)\r\n\r\n // Get logic values from form data\r\n const filterLogic = (formData.get('filterLogic')?.toString() as IFilterLogic) || 'and'\r\n const dateRangeLogic = (formData.get('dateRangeLogic')?.toString() as IFilterDateRangeLogic) || 'between'\r\n\r\n // Handle date-range separately\r\n if (fieldConfig?.type === 'date-range') {\r\n const startDate = formData.get(`${fieldSelected.toString()}_start`)?.toString()\r\n const endDate = formData.get(`${fieldSelected.toString()}_end`)?.toString()\r\n\r\n if (startDate && endDate) {\r\n const filterItem: IFilterItem = {\r\n type: 'date-range',\r\n startDate,\r\n endDate,\r\n dateRangeLogic: dateRangeLogic,\r\n label: `${startDate} to ${endDate}`\r\n }\r\n\r\n store.addFilterItem(fieldSelected as keyof T, filterItem, { reason: 'field', area: 'filterButton' })\r\n }\r\n } else if (fieldConfig?.type === 'date') {\r\n const value = formDataJson[fieldSelected as keyof T]?.toString()\r\n if (value) {\r\n const dateLogic: IFilterDateLogic = (formData.get('dateLogic')?.toString() as IFilterDateLogic) || 'before'\r\n const filterItem: IFilterItem = { type: 'date', value, dateLogic }\r\n store.removeFilterField(fieldSelected as keyof T, { reason: 'field' }) // Remove existing filter for this field\r\n store.addFilterItem(fieldSelected as keyof T, filterItem, { reason: 'field', area: 'filterButton' })\r\n }\r\n } else {\r\n // Get all values based on field type\r\n let values: string[] = []\r\n\r\n if (fieldConfig?.type === 'select-multi') {\r\n // For multi-select, obj[fieldSelected] should be an array\r\n const fieldValue = formDataJson[fieldSelected]\r\n if (Array.isArray(fieldValue)) {\r\n values = fieldValue.map((v) => v.toString())\r\n } else if (fieldValue) {\r\n values = [fieldValue.toString()]\r\n }\r\n } else {\r\n // For single select and string\r\n const value = formDataJson[fieldSelected as keyof T]?.toString()\r\n if (value) {\r\n values = [value]\r\n }\r\n }\r\n\r\n // Add all values to store\r\n values.forEach((value) => {\r\n let label: string | undefined = undefined\r\n\r\n if (fieldConfig?.type === 'select' || fieldConfig?.type === 'select-multi') {\r\n label = fieldConfig.options.find((x) => x.value === value)?.label\r\n }\r\n\r\n // Create filter item with type and logic\r\n const filterItem: IFilterItem = { type: fieldConfig?.type || 'string', value, label }\r\n if (fieldConfig?.type !== 'string') filterItem.type = fieldConfig?.type\r\n if (fieldConfig?.type === 'select-multi') filterItem.logic = filterLogic\r\n store.addFilterItem(fieldSelected as keyof T, filterItem, { reason: 'field', area: 'filterButton' })\r\n })\r\n }\r\n\r\n context.onFilterStateChange(store.build())\r\n }\r\n }\r\n\r\n return FilterMenu\r\n}\r\n\r\nexport default createFilterMenu\r\n\r\nconst MenuListCustom = styled(MenuList)({\r\n padding: 0,\r\n [`.${filterMenuClasses.item}`]: {\r\n height: 'var(--filter-item-height, 40px)',\r\n padding: '0 16px',\r\n '&:not(:last-child)': {\r\n borderBottom: '1px solid var(--color-divider, rgba(145 160 170 / 10%))'\r\n }\r\n }\r\n})\r\n\r\nconst ActionWrapper = styled(Box)({\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'flex-end',\r\n padding: '8px'\r\n})\r\n"],"names":["createFilterMenu","FilterMenu","props","_this","_classCallCheck","_callSuper","_defineProperty","context","fieldSelected","_jsxs","onSubmit","e","handleSubmit","children","renderWithMode","ActionWrapper","_jsx","Button","size","color","onClick","onPanelClose","type","sx","fontWeight","_context$filterBarCon","fieldConfig","filterBarConfigs","fields","MenuWithTypeSelect","name","toString","validationResult","state","onChange","setState","undefined","MenuWithTypeSelectMulti","MenuWithTypeDate","MenuWithTypeDateRange","MenuWithTypeString","event","preventDefault","stopPropagation","formData","FormData","currentTarget","validation","formValidate","hasError","addFilter","obj","convertFormDataToJson","getFieldsValidation","getAll","length","message","_formData$get","_formData$get2","startDate","get","concat","endDate","Date","_obj$fieldSelected","value","validate","filterFieldValidated","error","_formData$get3","_formData$get4","store","createFilterStore","filterState","formDataJson","filterLogic","dateRangeLogic","_formData$get5","_formData$get6","filterItem","label","addFilterItem","reason","area","_formDataJson$fieldSe","_formData$get7","dateLogic","removeFilterField","values","fieldValue","Array","isArray","map","v","_formDataJson$fieldSe2","forEach","_fieldConfig$options$","options","find","x","logic","onFilterStateChange","build","_inherits","Component","_createClass","key","_this2","this","mapDataViewContext","renderForm","fieldsValidation","keys","Object","MenuListCustom","className","filterMenuClasses","list","minWidth","i","_context$filterBarCon2","_item$label","item","MenuItem","Fragment","styled","MenuList","padding","height","borderBottom","Box","display","alignItems","justifyContent"],"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 o from"dayjs";import"../utils/dayjs-config.js";import"react/jsx-runtime";import"react";import"react-router-dom";import"../utils/query-param.js";import{createFilterStore as i}from"./filter-store.js";import{createViewMode as a}from"./create.view-mode.js";import{createKeyConverter as s}from"./key-converter.js";import{createViewModeButtons as m}from"./view-mode.units.js";import{createConvertFilterToGraphQL as n}from"./convert-filter-to-graphql.js";import{syncQueryToURL as c,getQueryFromURL as l,getSeedKeyFromURL as u,syncViewModeToURL as f,getViewModeFromURL as p,converFilterToQueryParam as h}from"./query-param-url.js";import{createPaginationBar as v}from"./create.pagination-bar.js";import d from"./create.data-view.js";var j=new(t((function t(){var j=this;r(this,t),e(this,"createDataView",d),e(this,"createKeyConverter",s),e(this,"createConvertFilterToGraphQL",n),e(this,"createFilterStore",i),e(this,"createPaginationBar",v),e(this,"createViewMode",a),e(this,"createViewModeButtons",m),e(this,"syncQueryToURL",c),e(this,"getQueryFromURL",l),e(this,"getSeedKeyFromURL",u),e(this,"syncViewModeToURL",f),e(this,"getViewModeFromURL",p),e(this,"converFilterToQueryParam",h),e(this,"formatterDate",(function(t,r){var e,i,a=null!==(e=null==r?void 0:r.formatString)&&void 0!==e?e:"MM/DD/YYYY HH:mm",s=null!==(i=null==r?void 0:r.showRelative)&&void 0!==i&&i;try{if(!t)return"";var m=o(t),n=m.format(a);return s?"".concat(n," (").concat(o().to(m),")"):n}catch(t){return""}})),e(this,"valueFormatterDate",(function(t){return function(r){return j.formatterDate(r.value,t)}}))})));export{j as DinoDataView,j as default};
1
+ import{createClass as t,classCallCheck as r,defineProperty as e}from"../_virtual/_rollupPluginBabelHelpers.js";import o from"dayjs";import"../utils/dayjs-config.js";import"react/jsx-runtime";import"react";import"react-router-dom";import"../utils/query-param.js";import{createFilterStore as i}from"./filter-store.js";import{createViewMode as a}from"./create.view-mode.js";import{createKeyConverter as s}from"./key-converter.js";import{createViewModeButtons as m}from"./view-mode.units.js";import{createConvertFilterToGraphQL as n}from"./convert-filter-to-graphql.js";import{syncQueryToURL as c,getQueryFromURL as l,getSeedKeyFromURL as u,syncViewModeToURL as f,getViewModeFromURL as p,convertFilterToQueryParam as h}from"./query-param-url.js";import{createPaginationBar as v}from"./create.pagination-bar.js";import d from"./create.data-view.js";var j=new(t((function t(){var j=this;r(this,t),e(this,"createDataView",d),e(this,"createKeyConverter",s),e(this,"createConvertFilterToGraphQL",n),e(this,"createFilterStore",i),e(this,"createPaginationBar",v),e(this,"createViewMode",a),e(this,"createViewModeButtons",m),e(this,"syncQueryToURL",c),e(this,"getQueryFromURL",l),e(this,"getSeedKeyFromURL",u),e(this,"syncViewModeToURL",f),e(this,"getViewModeFromURL",p),e(this,"convertFilterToQueryParam",h),e(this,"formatterDate",(function(t,r){var e,i,a=null!==(e=null==r?void 0:r.formatString)&&void 0!==e?e:"MM/DD/YYYY HH:mm",s=null!==(i=null==r?void 0:r.showRelative)&&void 0!==i&&i;try{if(!t)return"";var m=o(t),n=m.format(a);return s?"".concat(n," (").concat(o().to(m),")"):n}catch(t){return""}})),e(this,"valueFormatterDate",(function(t){return function(r){return j.formatterDate(r.value,t)}}))})));export{j as DinoDataView,j as default};
2
2
  //# sourceMappingURL=dino.js.map