@servicetitan/table 41.2.0 → 42.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/demo/column-hiding/table.store.js +10 -5
- package/dist/demo/column-hiding/table.store.js.map +1 -1
- package/dist/demo/filters/table.store.js +10 -5
- package/dist/demo/filters/table.store.js.map +1 -1
- package/dist/demo/master-detail/detail-table.store.js +14 -7
- package/dist/demo/master-detail/detail-table.store.js.map +1 -1
- package/dist/demo/master-detail/master-table.store.js +14 -7
- package/dist/demo/master-detail/master-table.store.js.map +1 -1
- package/dist/demo/overview/table.store.js +14 -7
- package/dist/demo/overview/table.store.js.map +1 -1
- package/dist/demo/row-details/row-details-table.store.js +10 -5
- package/dist/demo/row-details/row-details-table.store.js.map +1 -1
- package/dist/demo/state-caching/state-caching-table.store.js +10 -5
- package/dist/demo/state-caching/state-caching-table.store.js.map +1 -1
- package/dist/filters/async-select/async-select-filter.js +14 -7
- package/dist/filters/async-select/async-select-filter.js.map +1 -1
- package/dist/filters/datetime-filter/datetime-filter.js +14 -7
- package/dist/filters/datetime-filter/datetime-filter.js.map +1 -1
- package/dist/filters/field-values-filter.js +14 -7
- package/dist/filters/field-values-filter.js.map +1 -1
- package/dist/filters/multiselect-filter/multiselect-filter.js +1 -3
- package/dist/filters/multiselect-filter/multiselect-filter.js.map +1 -1
- package/dist/filters/range-filter/range-filter.js +1 -3
- package/dist/filters/range-filter/range-filter.js.map +1 -1
- package/dist/filters/select-filter/select-filter.js +14 -7
- package/dist/filters/select-filter/select-filter.js.map +1 -1
- package/dist/filters/time-filter/time-filter.js +14 -7
- package/dist/filters/time-filter/time-filter.js.map +1 -1
- package/dist/table-state.js +14 -7
- package/dist/table-state.js.map +1 -1
- package/dist/table.js +14 -7
- package/dist/table.js.map +1 -1
- package/dist/use-observing-table-state/demo/stores/use-observing-table-state-demo.store.js +14 -7
- package/dist/use-observing-table-state/demo/stores/use-observing-table-state-demo.store.js.map +1 -1
- package/package.json +9 -11
|
@@ -6,15 +6,20 @@ function _define_property(obj, key, value) {
|
|
|
6
6
|
configurable: true,
|
|
7
7
|
writable: true
|
|
8
8
|
});
|
|
9
|
-
} else
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
9
|
+
} else obj[key] = value;
|
|
12
10
|
return obj;
|
|
13
11
|
}
|
|
14
12
|
function _ts_decorate(decorators, target, key, desc) {
|
|
15
13
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
17
|
-
|
|
14
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
|
|
15
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
16
|
+
} else {
|
|
17
|
+
for(var i = decorators.length - 1; i >= 0; i--){
|
|
18
|
+
if (d = decorators[i]) {
|
|
19
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
18
23
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
24
|
}
|
|
20
25
|
import { injectable } from '@servicetitan/react-ioc';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/demo/column-hiding/table.store.ts"],"sourcesContent":["import { injectable } from '@servicetitan/react-ioc';\nimport type { IdType } from '../..';\nimport { InMemoryDataSource, TableState } from '../..';\nimport type { Product } from './product';\nimport { UserRole, Supplier } from './product';\nimport { products } from './products';\n\n@injectable()\nexport class TableStore {\n rowIdKey: keyof Product = 'ProductID';\n\n tableState = new TableState({\n dataSource: this.getDataSource(),\n pageSize: 5,\n rowIdKey: this.rowIdKey,\n });\n\n private getDataSource() {\n return new InMemoryDataSource(products, this.idSelector, {\n Supplier: (value: Supplier) => Supplier[value],\n AvailableFor: (value: UserRole | undefined) => value && UserRole[value],\n });\n }\n\n private idSelector(row: Product) {\n return row[this.rowIdKey] as IdType;\n }\n}\n"],"names":["injectable","InMemoryDataSource","TableState","UserRole","Supplier","products","TableStore","getDataSource","idSelector","value","AvailableFor","row","rowIdKey","tableState","dataSource","pageSize"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/demo/column-hiding/table.store.ts"],"sourcesContent":["import { injectable } from '@servicetitan/react-ioc';\nimport type { IdType } from '../..';\nimport { InMemoryDataSource, TableState } from '../..';\nimport type { Product } from './product';\nimport { UserRole, Supplier } from './product';\nimport { products } from './products';\n\n@injectable()\nexport class TableStore {\n rowIdKey: keyof Product = 'ProductID';\n\n tableState = new TableState({\n dataSource: this.getDataSource(),\n pageSize: 5,\n rowIdKey: this.rowIdKey,\n });\n\n private getDataSource() {\n return new InMemoryDataSource(products, this.idSelector, {\n Supplier: (value: Supplier) => Supplier[value],\n AvailableFor: (value: UserRole | undefined) => value && UserRole[value],\n });\n }\n\n private idSelector(row: Product) {\n return row[this.rowIdKey] as IdType;\n }\n}\n"],"names":["injectable","InMemoryDataSource","TableState","UserRole","Supplier","products","TableStore","getDataSource","idSelector","value","AvailableFor","row","rowIdKey","tableState","dataSource","pageSize"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,UAAU,QAAQ,0BAA0B;AAErD,SAASC,kBAAkB,EAAEC,UAAU,QAAQ,QAAQ;AAEvD,SAASC,QAAQ,EAAEC,QAAQ,QAAQ,YAAY;AAC/C,SAASC,QAAQ,QAAQ,aAAa;AAGtC,OAAO,MAAMC;IASDC,gBAAgB;QACpB,OAAO,IAAIN,mBAAmBI,UAAU,IAAI,CAACG,UAAU,EAAE;YACrDJ,UAAU,CAACK,QAAoBL,QAAQ,CAACK,MAAM;YAC9CC,cAAc,CAACD,QAAgCA,SAASN,QAAQ,CAACM,MAAM;QAC3E;IACJ;IAEQD,WAAWG,GAAY,EAAE;QAC7B,OAAOA,GAAG,CAAC,IAAI,CAACC,QAAQ,CAAC;IAC7B;;QAjBAA,uBAAAA,YAA0B;QAE1BC,uBAAAA,cAAa,IAAIX,WAAW;YACxBY,YAAY,IAAI,CAACP,aAAa;YAC9BQ,UAAU;YACVH,UAAU,IAAI,CAACA,QAAQ;QAC3B;;AAYJ"}
|
|
@@ -6,15 +6,20 @@ function _define_property(obj, key, value) {
|
|
|
6
6
|
configurable: true,
|
|
7
7
|
writable: true
|
|
8
8
|
});
|
|
9
|
-
} else
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
9
|
+
} else obj[key] = value;
|
|
12
10
|
return obj;
|
|
13
11
|
}
|
|
14
12
|
function _ts_decorate(decorators, target, key, desc) {
|
|
15
13
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
17
|
-
|
|
14
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
|
|
15
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
16
|
+
} else {
|
|
17
|
+
for(var i = decorators.length - 1; i >= 0; i--){
|
|
18
|
+
if (d = decorators[i]) {
|
|
19
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
18
23
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
24
|
}
|
|
20
25
|
import { injectable } from '@servicetitan/react-ioc';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/demo/filters/table.store.ts"],"sourcesContent":["import { injectable } from '@servicetitan/react-ioc';\n\nimport type { AsyncSelectFilterDataFetcher, SelectFilterDataFetcher } from '../..';\nimport { InMemoryDataSource, TableState } from '../..';\nimport { products } from '../overview/products';\nimport type { Category } from './categories';\nimport { categories } from './categories';\n\n@injectable()\nexport class TableStore {\n tableState = new TableState({\n dataSource: this.getDataSource(),\n pageSize: 5,\n });\n\n get madeInOptions() {\n return Array.from(new Set(products.map(p => p.MadeIn)));\n }\n\n get packageOptions() {\n const map = products.reduce(\n (out, product) => ({\n ...out,\n ...(product.Package\n ? { [product.Package.PackageId]: product.Package.PackageName }\n : {}),\n }),\n {} as Record<number, string>\n );\n\n return Object.keys(map)\n .map(Number)\n .map(id => ({ Id: id, Name: map[id] }));\n }\n\n categoryFetcher: AsyncSelectFilterDataFetcher<number> = async opts => {\n await new Promise(resolve => setTimeout(resolve, 1500));\n\n const sv = opts.search?.trim().toLowerCase();\n\n return {\n data: categories\n .filter(cat => (sv ? cat.CategoryName.toLowerCase().includes(sv) : true))\n .map(cat => ({ value: cat.CategoryID, text: cat.CategoryName })),\n };\n };\n\n madeInFetcher: AsyncSelectFilterDataFetcher<string> = async opts => {\n await new Promise(resolve => setTimeout(resolve, 1500));\n\n const sv = opts.search?.trim().toLowerCase();\n\n return {\n data: this.madeInOptions\n .filter(opt => (sv ? opt.toLowerCase().includes(sv) : true))\n .map(opt => ({ value: opt, text: opt })),\n };\n };\n\n categoryFetcherClean: SelectFilterDataFetcher<Category> = async opts => {\n await new Promise(resolve => setTimeout(resolve, 1500));\n\n const sv = opts.search?.trim().toLowerCase();\n\n return {\n data: categories.filter(cat =>\n sv ? cat.CategoryName.toLowerCase().includes(sv) : true\n ),\n };\n };\n\n madeInFetcherClean: SelectFilterDataFetcher<string> = async opts => {\n await new Promise(resolve => setTimeout(resolve, 1500));\n\n const sv = opts.search?.trim().toLowerCase();\n\n return {\n data: this.madeInOptions.filter(opt => (sv ? opt.toLowerCase().includes(sv) : true)),\n };\n };\n\n private getDataSource() {\n return new InMemoryDataSource(products, row => row.ProductID);\n }\n}\n"],"names":["injectable","InMemoryDataSource","TableState","products","categories","TableStore","madeInOptions","Array","from","Set","map","p","MadeIn","packageOptions","reduce","out","product","Package","PackageId","PackageName","Object","keys","Number","id","Id","Name","getDataSource","row","ProductID","tableState","dataSource","pageSize","categoryFetcher","opts","Promise","resolve","setTimeout","sv","search","trim","toLowerCase","data","filter","cat","CategoryName","includes","value","CategoryID","text","madeInFetcher","opt","categoryFetcherClean","madeInFetcherClean"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/demo/filters/table.store.ts"],"sourcesContent":["import { injectable } from '@servicetitan/react-ioc';\n\nimport type { AsyncSelectFilterDataFetcher, SelectFilterDataFetcher } from '../..';\nimport { InMemoryDataSource, TableState } from '../..';\nimport { products } from '../overview/products';\nimport type { Category } from './categories';\nimport { categories } from './categories';\n\n@injectable()\nexport class TableStore {\n tableState = new TableState({\n dataSource: this.getDataSource(),\n pageSize: 5,\n });\n\n get madeInOptions() {\n return Array.from(new Set(products.map(p => p.MadeIn)));\n }\n\n get packageOptions() {\n const map = products.reduce(\n (out, product) => ({\n ...out,\n ...(product.Package\n ? { [product.Package.PackageId]: product.Package.PackageName }\n : {}),\n }),\n {} as Record<number, string>\n );\n\n return Object.keys(map)\n .map(Number)\n .map(id => ({ Id: id, Name: map[id] }));\n }\n\n categoryFetcher: AsyncSelectFilterDataFetcher<number> = async opts => {\n await new Promise(resolve => setTimeout(resolve, 1500));\n\n const sv = opts.search?.trim().toLowerCase();\n\n return {\n data: categories\n .filter(cat => (sv ? cat.CategoryName.toLowerCase().includes(sv) : true))\n .map(cat => ({ value: cat.CategoryID, text: cat.CategoryName })),\n };\n };\n\n madeInFetcher: AsyncSelectFilterDataFetcher<string> = async opts => {\n await new Promise(resolve => setTimeout(resolve, 1500));\n\n const sv = opts.search?.trim().toLowerCase();\n\n return {\n data: this.madeInOptions\n .filter(opt => (sv ? opt.toLowerCase().includes(sv) : true))\n .map(opt => ({ value: opt, text: opt })),\n };\n };\n\n categoryFetcherClean: SelectFilterDataFetcher<Category> = async opts => {\n await new Promise(resolve => setTimeout(resolve, 1500));\n\n const sv = opts.search?.trim().toLowerCase();\n\n return {\n data: categories.filter(cat =>\n sv ? cat.CategoryName.toLowerCase().includes(sv) : true\n ),\n };\n };\n\n madeInFetcherClean: SelectFilterDataFetcher<string> = async opts => {\n await new Promise(resolve => setTimeout(resolve, 1500));\n\n const sv = opts.search?.trim().toLowerCase();\n\n return {\n data: this.madeInOptions.filter(opt => (sv ? opt.toLowerCase().includes(sv) : true)),\n };\n };\n\n private getDataSource() {\n return new InMemoryDataSource(products, row => row.ProductID);\n }\n}\n"],"names":["injectable","InMemoryDataSource","TableState","products","categories","TableStore","madeInOptions","Array","from","Set","map","p","MadeIn","packageOptions","reduce","out","product","Package","PackageId","PackageName","Object","keys","Number","id","Id","Name","getDataSource","row","ProductID","tableState","dataSource","pageSize","categoryFetcher","opts","Promise","resolve","setTimeout","sv","search","trim","toLowerCase","data","filter","cat","CategoryName","includes","value","CategoryID","text","madeInFetcher","opt","categoryFetcherClean","madeInFetcherClean"],"mappings":"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"}
|
|
@@ -6,19 +6,26 @@ function _define_property(obj, key, value) {
|
|
|
6
6
|
configurable: true,
|
|
7
7
|
writable: true
|
|
8
8
|
});
|
|
9
|
-
} else
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
9
|
+
} else obj[key] = value;
|
|
12
10
|
return obj;
|
|
13
11
|
}
|
|
14
12
|
function _ts_decorate(decorators, target, key, desc) {
|
|
15
13
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
17
|
-
|
|
14
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
|
|
15
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
16
|
+
} else {
|
|
17
|
+
for(var i = decorators.length - 1; i >= 0; i--){
|
|
18
|
+
if (d = decorators[i]) {
|
|
19
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
18
23
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
24
|
}
|
|
20
|
-
function _ts_metadata(
|
|
21
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
|
|
25
|
+
function _ts_metadata(metadataKey, metadataValue) {
|
|
26
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
|
|
27
|
+
return Reflect.metadata(metadataKey, metadataValue);
|
|
28
|
+
}
|
|
22
29
|
}
|
|
23
30
|
import { injectable, inject } from '@servicetitan/react-ioc';
|
|
24
31
|
import { observable, action, observe, computed, makeObservable } from 'mobx';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/demo/master-detail/detail-table.store.ts"],"sourcesContent":["import { injectable, inject } from '@servicetitan/react-ioc';\n\nimport type { Lambda } from 'mobx';\nimport { observable, action, observe, computed, makeObservable } from 'mobx';\n\nimport { TableState } from '../..';\n\nimport { MasterTableStore } from './master-table.store';\n\nimport type { Product } from './product';\nimport type { ProductDetail } from './product-detail';\n\n@injectable()\nexport class DetailTableStore {\n @observable tableState?: TableState<ProductDetail, string, Product, number>;\n\n /*\n * Please use constructor injection instead.\n * Injecting without constructor only to make it work in Codesandbox.\n */\n @inject(MasterTableStore)\n private masterTableStore!: MasterTableStore;\n\n @computed get selected() {\n return this.tableState?.selectedIds.size ?? 0;\n }\n\n private disposeSelectedObserve: Lambda;\n\n constructor() {\n makeObservable(this);\n\n this.disposeSelectedObserve = observe(this, 'selected', ({ oldValue, newValue }) => {\n if (!oldValue && newValue) {\n this.setLockedRowsSelection(true);\n }\n });\n }\n\n @action\n initialize(row: Product) {\n this.tableState = this.masterTableStore.tableState.getDetailTableState!(row) as TableState<\n ProductDetail,\n string,\n Product,\n number\n >;\n }\n\n dispose() {\n this.disposeSelectedObserve();\n }\n\n private async setLockedRowsSelection(value: boolean) {\n if (!this.tableState) {\n return;\n }\n\n if (!this.tableState.dataSource) {\n return;\n }\n\n const filteredData = (\n await this.tableState.dataSource.getData({\n filter: this.tableState.filter,\n })\n ).data as ProductDetail[];\n\n const lockedData = filteredData.filter(row => this.tableState!.isRowUnselectable(row));\n\n this.tableState.setRowsSelection(lockedData, value, { ignoreUnselectable: false });\n }\n}\n"],"names":["injectable","inject","observable","action","observe","computed","makeObservable","TableState","MasterTableStore","DetailTableStore","selected","tableState","selectedIds","size","initialize","row","masterTableStore","getDetailTableState","dispose","disposeSelectedObserve","setLockedRowsSelection","value","dataSource","filteredData","getData","filter","data","lockedData","isRowUnselectable","setRowsSelection","ignoreUnselectable","oldValue","newValue"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/demo/master-detail/detail-table.store.ts"],"sourcesContent":["import { injectable, inject } from '@servicetitan/react-ioc';\n\nimport type { Lambda } from 'mobx';\nimport { observable, action, observe, computed, makeObservable } from 'mobx';\n\nimport { TableState } from '../..';\n\nimport { MasterTableStore } from './master-table.store';\n\nimport type { Product } from './product';\nimport type { ProductDetail } from './product-detail';\n\n@injectable()\nexport class DetailTableStore {\n @observable tableState?: TableState<ProductDetail, string, Product, number>;\n\n /*\n * Please use constructor injection instead.\n * Injecting without constructor only to make it work in Codesandbox.\n */\n @inject(MasterTableStore)\n private masterTableStore!: MasterTableStore;\n\n @computed get selected() {\n return this.tableState?.selectedIds.size ?? 0;\n }\n\n private disposeSelectedObserve: Lambda;\n\n constructor() {\n makeObservable(this);\n\n this.disposeSelectedObserve = observe(this, 'selected', ({ oldValue, newValue }) => {\n if (!oldValue && newValue) {\n this.setLockedRowsSelection(true);\n }\n });\n }\n\n @action\n initialize(row: Product) {\n this.tableState = this.masterTableStore.tableState.getDetailTableState!(row) as TableState<\n ProductDetail,\n string,\n Product,\n number\n >;\n }\n\n dispose() {\n this.disposeSelectedObserve();\n }\n\n private async setLockedRowsSelection(value: boolean) {\n if (!this.tableState) {\n return;\n }\n\n if (!this.tableState.dataSource) {\n return;\n }\n\n const filteredData = (\n await this.tableState.dataSource.getData({\n filter: this.tableState.filter,\n })\n ).data as ProductDetail[];\n\n const lockedData = filteredData.filter(row => this.tableState!.isRowUnselectable(row));\n\n this.tableState.setRowsSelection(lockedData, value, { ignoreUnselectable: false });\n }\n}\n"],"names":["injectable","inject","observable","action","observe","computed","makeObservable","TableState","MasterTableStore","DetailTableStore","selected","tableState","selectedIds","size","initialize","row","masterTableStore","getDetailTableState","dispose","disposeSelectedObserve","setLockedRowsSelection","value","dataSource","filteredData","getData","filter","data","lockedData","isRowUnselectable","setRowsSelection","ignoreUnselectable","oldValue","newValue"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,UAAU,EAAEC,MAAM,QAAQ,0BAA0B;AAG7D,SAASC,UAAU,EAAEC,MAAM,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,cAAc,QAAQ,OAAO;AAE7E,SAASC,UAAU,QAAQ,QAAQ;AAEnC,SAASC,gBAAgB,QAAQ,uBAAuB;AAMxD,OAAO,MAAMC;IAUT,IAAcC,WAAW;;YACd;QAAP,gBAAO,mBAAA,IAAI,CAACC,UAAU,cAAf,uCAAA,iBAAiBC,WAAW,CAACC,IAAI,uCAAI;IAChD;IAeAC,WAAWC,GAAY,EAAE;QACrB,IAAI,CAACJ,UAAU,GAAG,IAAI,CAACK,gBAAgB,CAACL,UAAU,CAACM,mBAAmB,CAAEF;IAM5E;IAEAG,UAAU;QACN,IAAI,CAACC,sBAAsB;IAC/B;IAEA,MAAcC,uBAAuBC,KAAc,EAAE;QACjD,IAAI,CAAC,IAAI,CAACV,UAAU,EAAE;YAClB;QACJ;QAEA,IAAI,CAAC,IAAI,CAACA,UAAU,CAACW,UAAU,EAAE;YAC7B;QACJ;QAEA,MAAMC,eAAe,AACjB,CAAA,MAAM,IAAI,CAACZ,UAAU,CAACW,UAAU,CAACE,OAAO,CAAC;YACrCC,QAAQ,IAAI,CAACd,UAAU,CAACc,MAAM;QAClC,EAAC,EACHC,IAAI;QAEN,MAAMC,aAAaJ,aAAaE,MAAM,CAACV,CAAAA,MAAO,IAAI,CAACJ,UAAU,CAAEiB,iBAAiB,CAACb;QAEjF,IAAI,CAACJ,UAAU,CAACkB,gBAAgB,CAACF,YAAYN,OAAO;YAAES,oBAAoB;QAAM;IACpF;IA1CA,aAAc;QAfd,uBAAYnB,cAAZ,KAAA;QAEA;;;KAGC,GACD,uBACQK,oBADR,KAAA;QAOA,uBAAQG,0BAAR,KAAA;QAGIb,eAAe,IAAI;QAEnB,IAAI,CAACa,sBAAsB,GAAGf,QAAQ,IAAI,EAAE,YAAY,CAAC,EAAE2B,QAAQ,EAAEC,QAAQ,EAAE;YAC3E,IAAI,CAACD,YAAYC,UAAU;gBACvB,IAAI,CAACZ,sBAAsB,CAAC;YAChC;QACJ;IACJ;AAmCJ"}
|
|
@@ -6,19 +6,26 @@ function _define_property(obj, key, value) {
|
|
|
6
6
|
configurable: true,
|
|
7
7
|
writable: true
|
|
8
8
|
});
|
|
9
|
-
} else
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
9
|
+
} else obj[key] = value;
|
|
12
10
|
return obj;
|
|
13
11
|
}
|
|
14
12
|
function _ts_decorate(decorators, target, key, desc) {
|
|
15
13
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
17
|
-
|
|
14
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
|
|
15
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
16
|
+
} else {
|
|
17
|
+
for(var i = decorators.length - 1; i >= 0; i--){
|
|
18
|
+
if (d = decorators[i]) {
|
|
19
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
18
23
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
24
|
}
|
|
20
|
-
function _ts_metadata(
|
|
21
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
|
|
25
|
+
function _ts_metadata(metadataKey, metadataValue) {
|
|
26
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
|
|
27
|
+
return Reflect.metadata(metadataKey, metadataValue);
|
|
28
|
+
}
|
|
22
29
|
}
|
|
23
30
|
import { injectable } from '@servicetitan/react-ioc';
|
|
24
31
|
import { computed, observe, makeObservable } from 'mobx';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/demo/master-detail/master-table.store.ts"],"sourcesContent":["import { injectable } from '@servicetitan/react-ioc';\n\nimport type { Lambda } from 'mobx';\nimport { computed, observe, makeObservable } from 'mobx';\n\nimport { InMemoryDataSource, TableState } from '../..';\n\nimport type { Product } from './product';\nimport { products } from './products';\n\nimport type { ProductDetail } from './product-detail';\nimport { productDetails } from './product-details';\n\n@injectable()\nexport class MasterTableStore {\n tableState: TableState<Product, number> = new TableState({\n dataSource: new InMemoryDataSource(products, row => row.ProductID),\n getDetailTableState: row => this.getDetailTableState(row),\n });\n\n details = new Map<number, TableState<ProductDetail, string, Product, number>>();\n\n @computed get selectedIds() {\n return Array.from(this.tableState.selectedIds);\n }\n\n private disposeSelectedIdsObserve: Lambda;\n\n constructor() {\n makeObservable(this);\n\n this.disposeSelectedIdsObserve = observe(this, 'selectedIds', change => {\n const { oldValue = [], newValue } = change as {\n oldValue: number[];\n newValue: number[];\n };\n\n const before = new Set(oldValue);\n const after = new Set(newValue);\n\n for (const id of oldValue) {\n if (!after.has(id)) {\n this.setDetailSelection(id, false);\n }\n }\n\n for (const id of newValue) {\n if (!before.has(id)) {\n this.setDetailSelection(id, true);\n }\n }\n });\n }\n\n dispose() {\n this.disposeSelectedIdsObserve();\n }\n\n private getDetailTableState(row: Product) {\n const id = this.tableState.dataSource!.idSelector!(row);\n\n if (this.details.has(id)) {\n return this.details.get(id)!;\n }\n\n const detailTableState = new TableState({\n dataSource: new InMemoryDataSource(\n productDetails.filter(x => x.ProductID === id),\n row => row.Field\n ),\n isRowUnselectable: row => !!row.IsLocked,\n parent: {\n row,\n tableState: this.tableState,\n },\n });\n\n if (this.tableState.selectedIds.has(id)) {\n detailTableState.selectAll();\n }\n\n this.details.set(id, detailTableState);\n\n return detailTableState;\n }\n\n private setDetailSelection(id: number, value: boolean) {\n const detail = this.tableState.getDetailTableState!({ ProductID: id } as Product);\n\n if (!detail?.totalCount) {\n return;\n }\n\n if (value) {\n detail.selectAll({ ignoreUnselectable: false });\n } else if (!detail.isSomePageRowsSelected) {\n detail.deselectAll({ ignoreUnselectable: false });\n }\n }\n}\n"],"names":["injectable","computed","observe","makeObservable","InMemoryDataSource","TableState","products","productDetails","MasterTableStore","selectedIds","Array","from","tableState","dispose","disposeSelectedIdsObserve","getDetailTableState","row","id","dataSource","idSelector","details","has","get","detailTableState","filter","x","ProductID","Field","isRowUnselectable","IsLocked","parent","selectAll","set","setDetailSelection","value","detail","totalCount","ignoreUnselectable","isSomePageRowsSelected","deselectAll","Map","change","oldValue","newValue","before","Set","after"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/demo/master-detail/master-table.store.ts"],"sourcesContent":["import { injectable } from '@servicetitan/react-ioc';\n\nimport type { Lambda } from 'mobx';\nimport { computed, observe, makeObservable } from 'mobx';\n\nimport { InMemoryDataSource, TableState } from '../..';\n\nimport type { Product } from './product';\nimport { products } from './products';\n\nimport type { ProductDetail } from './product-detail';\nimport { productDetails } from './product-details';\n\n@injectable()\nexport class MasterTableStore {\n tableState: TableState<Product, number> = new TableState({\n dataSource: new InMemoryDataSource(products, row => row.ProductID),\n getDetailTableState: row => this.getDetailTableState(row),\n });\n\n details = new Map<number, TableState<ProductDetail, string, Product, number>>();\n\n @computed get selectedIds() {\n return Array.from(this.tableState.selectedIds);\n }\n\n private disposeSelectedIdsObserve: Lambda;\n\n constructor() {\n makeObservable(this);\n\n this.disposeSelectedIdsObserve = observe(this, 'selectedIds', change => {\n const { oldValue = [], newValue } = change as {\n oldValue: number[];\n newValue: number[];\n };\n\n const before = new Set(oldValue);\n const after = new Set(newValue);\n\n for (const id of oldValue) {\n if (!after.has(id)) {\n this.setDetailSelection(id, false);\n }\n }\n\n for (const id of newValue) {\n if (!before.has(id)) {\n this.setDetailSelection(id, true);\n }\n }\n });\n }\n\n dispose() {\n this.disposeSelectedIdsObserve();\n }\n\n private getDetailTableState(row: Product) {\n const id = this.tableState.dataSource!.idSelector!(row);\n\n if (this.details.has(id)) {\n return this.details.get(id)!;\n }\n\n const detailTableState = new TableState({\n dataSource: new InMemoryDataSource(\n productDetails.filter(x => x.ProductID === id),\n row => row.Field\n ),\n isRowUnselectable: row => !!row.IsLocked,\n parent: {\n row,\n tableState: this.tableState,\n },\n });\n\n if (this.tableState.selectedIds.has(id)) {\n detailTableState.selectAll();\n }\n\n this.details.set(id, detailTableState);\n\n return detailTableState;\n }\n\n private setDetailSelection(id: number, value: boolean) {\n const detail = this.tableState.getDetailTableState!({ ProductID: id } as Product);\n\n if (!detail?.totalCount) {\n return;\n }\n\n if (value) {\n detail.selectAll({ ignoreUnselectable: false });\n } else if (!detail.isSomePageRowsSelected) {\n detail.deselectAll({ ignoreUnselectable: false });\n }\n }\n}\n"],"names":["injectable","computed","observe","makeObservable","InMemoryDataSource","TableState","products","productDetails","MasterTableStore","selectedIds","Array","from","tableState","dispose","disposeSelectedIdsObserve","getDetailTableState","row","id","dataSource","idSelector","details","has","get","detailTableState","filter","x","ProductID","Field","isRowUnselectable","IsLocked","parent","selectAll","set","setDetailSelection","value","detail","totalCount","ignoreUnselectable","isSomePageRowsSelected","deselectAll","Map","change","oldValue","newValue","before","Set","after"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,UAAU,QAAQ,0BAA0B;AAGrD,SAASC,QAAQ,EAAEC,OAAO,EAAEC,cAAc,QAAQ,OAAO;AAEzD,SAASC,kBAAkB,EAAEC,UAAU,QAAQ,QAAQ;AAGvD,SAASC,QAAQ,QAAQ,aAAa;AAGtC,SAASC,cAAc,QAAQ,oBAAoB;AAGnD,OAAO,MAAMC;IAQT,IAAcC,cAAc;QACxB,OAAOC,MAAMC,IAAI,CAAC,IAAI,CAACC,UAAU,CAACH,WAAW;IACjD;IA8BAI,UAAU;QACN,IAAI,CAACC,yBAAyB;IAClC;IAEQC,oBAAoBC,GAAY,EAAE;QACtC,MAAMC,KAAK,IAAI,CAACL,UAAU,CAACM,UAAU,CAAEC,UAAU,CAAEH;QAEnD,IAAI,IAAI,CAACI,OAAO,CAACC,GAAG,CAACJ,KAAK;YACtB,OAAO,IAAI,CAACG,OAAO,CAACE,GAAG,CAACL;QAC5B;QAEA,MAAMM,mBAAmB,IAAIlB,WAAW;YACpCa,YAAY,IAAId,mBACZG,eAAeiB,MAAM,CAACC,CAAAA,IAAKA,EAAEC,SAAS,KAAKT,KAC3CD,CAAAA,MAAOA,IAAIW,KAAK;YAEpBC,mBAAmBZ,CAAAA,MAAO,CAAC,CAACA,IAAIa,QAAQ;YACxCC,QAAQ;gBACJd;gBACAJ,YAAY,IAAI,CAACA,UAAU;YAC/B;QACJ;QAEA,IAAI,IAAI,CAACA,UAAU,CAACH,WAAW,CAACY,GAAG,CAACJ,KAAK;YACrCM,iBAAiBQ,SAAS;QAC9B;QAEA,IAAI,CAACX,OAAO,CAACY,GAAG,CAACf,IAAIM;QAErB,OAAOA;IACX;IAEQU,mBAAmBhB,EAAU,EAAEiB,KAAc,EAAE;QACnD,MAAMC,SAAS,IAAI,CAACvB,UAAU,CAACG,mBAAmB,CAAE;YAAEW,WAAWT;QAAG;QAEpE,IAAI,EAACkB,mBAAAA,6BAAAA,OAAQC,UAAU,GAAE;YACrB;QACJ;QAEA,IAAIF,OAAO;YACPC,OAAOJ,SAAS,CAAC;gBAAEM,oBAAoB;YAAM;QACjD,OAAO,IAAI,CAACF,OAAOG,sBAAsB,EAAE;YACvCH,OAAOI,WAAW,CAAC;gBAAEF,oBAAoB;YAAM;QACnD;IACJ;IAtEA,aAAc;QAbdzB,uBAAAA,cAA0C,IAAIP,WAAW;YACrDa,YAAY,IAAId,mBAAmBE,UAAUU,CAAAA,MAAOA,IAAIU,SAAS;YACjEX,qBAAqBC,CAAAA,MAAO,IAAI,CAACD,mBAAmB,CAACC;QACzD;QAEAI,uBAAAA,WAAU,IAAIoB;QAMd,uBAAQ1B,6BAAR,KAAA;QAGIX,eAAe,IAAI;QAEnB,IAAI,CAACW,yBAAyB,GAAGZ,QAAQ,IAAI,EAAE,eAAeuC,CAAAA;YAC1D,MAAM,EAAEC,WAAW,EAAE,EAAEC,QAAQ,EAAE,GAAGF;YAKpC,MAAMG,SAAS,IAAIC,IAAIH;YACvB,MAAMI,QAAQ,IAAID,IAAIF;YAEtB,KAAK,MAAM1B,MAAMyB,SAAU;gBACvB,IAAI,CAACI,MAAMzB,GAAG,CAACJ,KAAK;oBAChB,IAAI,CAACgB,kBAAkB,CAAChB,IAAI;gBAChC;YACJ;YAEA,KAAK,MAAMA,MAAM0B,SAAU;gBACvB,IAAI,CAACC,OAAOvB,GAAG,CAACJ,KAAK;oBACjB,IAAI,CAACgB,kBAAkB,CAAChB,IAAI;gBAChC;YACJ;QACJ;IACJ;AA+CJ"}
|
|
@@ -6,19 +6,26 @@ function _define_property(obj, key, value) {
|
|
|
6
6
|
configurable: true,
|
|
7
7
|
writable: true
|
|
8
8
|
});
|
|
9
|
-
} else
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
9
|
+
} else obj[key] = value;
|
|
12
10
|
return obj;
|
|
13
11
|
}
|
|
14
12
|
function _ts_decorate(decorators, target, key, desc) {
|
|
15
13
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
17
|
-
|
|
14
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
|
|
15
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
16
|
+
} else {
|
|
17
|
+
for(var i = decorators.length - 1; i >= 0; i--){
|
|
18
|
+
if (d = decorators[i]) {
|
|
19
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
18
23
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
24
|
}
|
|
20
|
-
function _ts_metadata(
|
|
21
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
|
|
25
|
+
function _ts_metadata(metadataKey, metadataValue) {
|
|
26
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
|
|
27
|
+
return Reflect.metadata(metadataKey, metadataValue);
|
|
28
|
+
}
|
|
22
29
|
}
|
|
23
30
|
import { injectable } from '@servicetitan/react-ioc';
|
|
24
31
|
import { computed, makeObservable } from 'mobx';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/demo/overview/table.store.ts"],"sourcesContent":["import { injectable } from '@servicetitan/react-ioc';\n\nimport { computed, makeObservable } from 'mobx';\n\nimport { InMemoryDataSource, TableState } from '../..';\n\nimport { setFormStateValues, FormValidators } from '@servicetitan/form';\nimport { FormState, FieldState } from 'formstate';\n\nimport type { Product } from './product';\nimport { UserRole, Supplier } from './product';\nimport { products } from './products';\n\n@injectable()\nexport class TableStore {\n tableState = new TableState({\n dataSource: this.getDataSource(),\n isRowUnselectable: this.isRowUnselectable,\n selectionLimit: 3,\n getFormState: this.getFormState,\n pageSize: 5,\n });\n\n constructor() {\n makeObservable(this);\n }\n\n @computed get inEdit() {\n return this.tableState.inEdit.size > 0;\n }\n\n editAll = () => this.tableState.editAll();\n saveAll = () => this.tableState.saveEditAll();\n cancelAll = () => this.tableState.cancelEditAll();\n\n private getDataSource() {\n return new InMemoryDataSource(products, this.idSelector, {\n Supplier: (value: Supplier) => Supplier[value],\n AvailableFor: (value: UserRole | undefined) => value && UserRole[value],\n });\n }\n\n private idSelector(row: Product) {\n return row.ProductID;\n }\n\n private isRowUnselectable(row: Product) {\n return row.Discontinued;\n }\n\n private getFormState(row: Product) {\n return setFormStateValues(\n new FormState({\n ProductID: new FieldState(0),\n ProductName: new FieldState('').validators(FormValidators.required),\n Supplier: new FieldState<Supplier>(Supplier.Adam),\n CategoryID: new FieldState(0),\n MadeIn: new FieldState(''),\n QuantityPerUnit: new FieldState(''),\n UnitPrice: new FieldState(0).validators(\n value => value <= 0 && 'Price must be positive'\n ),\n UnitsInStock: new FieldState(0),\n UnitsOnOrder: new FieldState(new Date()).validators(\n value => value > new Date() && 'Invalid date'\n ),\n Discontinued: new FieldState(false),\n AvailableFor: new FieldState<UserRole | undefined>(undefined),\n Package: new FieldState<Product['Package'] | undefined>(undefined),\n }),\n row\n );\n }\n}\n"],"names":["injectable","computed","makeObservable","InMemoryDataSource","TableState","setFormStateValues","FormValidators","FormState","FieldState","UserRole","Supplier","products","TableStore","inEdit","tableState","size","getDataSource","idSelector","value","AvailableFor","row","ProductID","isRowUnselectable","Discontinued","getFormState","ProductName","validators","required","Adam","CategoryID","MadeIn","QuantityPerUnit","UnitPrice","UnitsInStock","UnitsOnOrder","Date","undefined","Package","dataSource","selectionLimit","pageSize","editAll","saveAll","saveEditAll","cancelAll","cancelEditAll"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/demo/overview/table.store.ts"],"sourcesContent":["import { injectable } from '@servicetitan/react-ioc';\n\nimport { computed, makeObservable } from 'mobx';\n\nimport { InMemoryDataSource, TableState } from '../..';\n\nimport { setFormStateValues, FormValidators } from '@servicetitan/form';\nimport { FormState, FieldState } from 'formstate';\n\nimport type { Product } from './product';\nimport { UserRole, Supplier } from './product';\nimport { products } from './products';\n\n@injectable()\nexport class TableStore {\n tableState = new TableState({\n dataSource: this.getDataSource(),\n isRowUnselectable: this.isRowUnselectable,\n selectionLimit: 3,\n getFormState: this.getFormState,\n pageSize: 5,\n });\n\n constructor() {\n makeObservable(this);\n }\n\n @computed get inEdit() {\n return this.tableState.inEdit.size > 0;\n }\n\n editAll = () => this.tableState.editAll();\n saveAll = () => this.tableState.saveEditAll();\n cancelAll = () => this.tableState.cancelEditAll();\n\n private getDataSource() {\n return new InMemoryDataSource(products, this.idSelector, {\n Supplier: (value: Supplier) => Supplier[value],\n AvailableFor: (value: UserRole | undefined) => value && UserRole[value],\n });\n }\n\n private idSelector(row: Product) {\n return row.ProductID;\n }\n\n private isRowUnselectable(row: Product) {\n return row.Discontinued;\n }\n\n private getFormState(row: Product) {\n return setFormStateValues(\n new FormState({\n ProductID: new FieldState(0),\n ProductName: new FieldState('').validators(FormValidators.required),\n Supplier: new FieldState<Supplier>(Supplier.Adam),\n CategoryID: new FieldState(0),\n MadeIn: new FieldState(''),\n QuantityPerUnit: new FieldState(''),\n UnitPrice: new FieldState(0).validators(\n value => value <= 0 && 'Price must be positive'\n ),\n UnitsInStock: new FieldState(0),\n UnitsOnOrder: new FieldState(new Date()).validators(\n value => value > new Date() && 'Invalid date'\n ),\n Discontinued: new FieldState(false),\n AvailableFor: new FieldState<UserRole | undefined>(undefined),\n Package: new FieldState<Product['Package'] | undefined>(undefined),\n }),\n row\n );\n }\n}\n"],"names":["injectable","computed","makeObservable","InMemoryDataSource","TableState","setFormStateValues","FormValidators","FormState","FieldState","UserRole","Supplier","products","TableStore","inEdit","tableState","size","getDataSource","idSelector","value","AvailableFor","row","ProductID","isRowUnselectable","Discontinued","getFormState","ProductName","validators","required","Adam","CategoryID","MadeIn","QuantityPerUnit","UnitPrice","UnitsInStock","UnitsOnOrder","Date","undefined","Package","dataSource","selectionLimit","pageSize","editAll","saveAll","saveEditAll","cancelAll","cancelEditAll"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,UAAU,QAAQ,0BAA0B;AAErD,SAASC,QAAQ,EAAEC,cAAc,QAAQ,OAAO;AAEhD,SAASC,kBAAkB,EAAEC,UAAU,QAAQ,QAAQ;AAEvD,SAASC,kBAAkB,EAAEC,cAAc,QAAQ,qBAAqB;AACxE,SAASC,SAAS,EAAEC,UAAU,QAAQ,YAAY;AAGlD,SAASC,QAAQ,EAAEC,QAAQ,QAAQ,YAAY;AAC/C,SAASC,QAAQ,QAAQ,aAAa;AAGtC,OAAO,MAAMC;IAaT,IAAcC,SAAS;QACnB,OAAO,IAAI,CAACC,UAAU,CAACD,MAAM,CAACE,IAAI,GAAG;IACzC;IAMQC,gBAAgB;QACpB,OAAO,IAAIb,mBAAmBQ,UAAU,IAAI,CAACM,UAAU,EAAE;YACrDP,UAAU,CAACQ,QAAoBR,QAAQ,CAACQ,MAAM;YAC9CC,cAAc,CAACD,QAAgCA,SAAST,QAAQ,CAACS,MAAM;QAC3E;IACJ;IAEQD,WAAWG,GAAY,EAAE;QAC7B,OAAOA,IAAIC,SAAS;IACxB;IAEQC,kBAAkBF,GAAY,EAAE;QACpC,OAAOA,IAAIG,YAAY;IAC3B;IAEQC,aAAaJ,GAAY,EAAE;QAC/B,OAAOf,mBACH,IAAIE,UAAU;YACVc,WAAW,IAAIb,WAAW;YAC1BiB,aAAa,IAAIjB,WAAW,IAAIkB,UAAU,CAACpB,eAAeqB,QAAQ;YAClEjB,UAAU,IAAIF,WAAqBE,SAASkB,IAAI;YAChDC,YAAY,IAAIrB,WAAW;YAC3BsB,QAAQ,IAAItB,WAAW;YACvBuB,iBAAiB,IAAIvB,WAAW;YAChCwB,WAAW,IAAIxB,WAAW,GAAGkB,UAAU,CACnCR,CAAAA,QAASA,SAAS,KAAK;YAE3Be,cAAc,IAAIzB,WAAW;YAC7B0B,cAAc,IAAI1B,WAAW,IAAI2B,QAAQT,UAAU,CAC/CR,CAAAA,QAASA,QAAQ,IAAIiB,UAAU;YAEnCZ,cAAc,IAAIf,WAAW;YAC7BW,cAAc,IAAIX,WAAiC4B;YACnDC,SAAS,IAAI7B,WAA2C4B;QAC5D,IACAhB;IAER;IAjDA,aAAc;QARdN,uBAAAA,cAAa,IAAIV,WAAW;YACxBkC,YAAY,IAAI,CAACtB,aAAa;YAC9BM,mBAAmB,IAAI,CAACA,iBAAiB;YACzCiB,gBAAgB;YAChBf,cAAc,IAAI,CAACA,YAAY;YAC/BgB,UAAU;QACd;QAUAC,uBAAAA,WAAU,IAAM,IAAI,CAAC3B,UAAU,CAAC2B,OAAO;QACvCC,uBAAAA,WAAU,IAAM,IAAI,CAAC5B,UAAU,CAAC6B,WAAW;QAC3CC,uBAAAA,aAAY,IAAM,IAAI,CAAC9B,UAAU,CAAC+B,aAAa;QAT3C3C,eAAe,IAAI;IACvB;AAgDJ"}
|
|
@@ -6,15 +6,20 @@ function _define_property(obj, key, value) {
|
|
|
6
6
|
configurable: true,
|
|
7
7
|
writable: true
|
|
8
8
|
});
|
|
9
|
-
} else
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
9
|
+
} else obj[key] = value;
|
|
12
10
|
return obj;
|
|
13
11
|
}
|
|
14
12
|
function _ts_decorate(decorators, target, key, desc) {
|
|
15
13
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
17
|
-
|
|
14
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
|
|
15
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
16
|
+
} else {
|
|
17
|
+
for(var i = decorators.length - 1; i >= 0; i--){
|
|
18
|
+
if (d = decorators[i]) {
|
|
19
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
18
23
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
24
|
}
|
|
20
25
|
import { injectable } from '@servicetitan/react-ioc';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/demo/row-details/row-details-table.store.ts"],"sourcesContent":["import { injectable } from '@servicetitan/react-ioc';\n\nimport { InMemoryDataSource, TableState } from '../..';\n\nimport type { Product } from '../overview/product';\nimport { products } from '../overview/products';\n\n@injectable()\nexport class RowDetailsTableStore {\n tableState = new TableState({\n dataSource: this.getDataSource(),\n rowDetailsExpandState: 'expanded',\n pageSize: 5,\n });\n\n private getDataSource() {\n return new InMemoryDataSource(products, this.idSelector);\n }\n\n private idSelector(row: Product) {\n return row.ProductID;\n }\n}\n"],"names":["injectable","InMemoryDataSource","TableState","products","RowDetailsTableStore","getDataSource","idSelector","row","ProductID","tableState","dataSource","rowDetailsExpandState","pageSize"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/demo/row-details/row-details-table.store.ts"],"sourcesContent":["import { injectable } from '@servicetitan/react-ioc';\n\nimport { InMemoryDataSource, TableState } from '../..';\n\nimport type { Product } from '../overview/product';\nimport { products } from '../overview/products';\n\n@injectable()\nexport class RowDetailsTableStore {\n tableState = new TableState({\n dataSource: this.getDataSource(),\n rowDetailsExpandState: 'expanded',\n pageSize: 5,\n });\n\n private getDataSource() {\n return new InMemoryDataSource(products, this.idSelector);\n }\n\n private idSelector(row: Product) {\n return row.ProductID;\n }\n}\n"],"names":["injectable","InMemoryDataSource","TableState","products","RowDetailsTableStore","getDataSource","idSelector","row","ProductID","tableState","dataSource","rowDetailsExpandState","pageSize"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,UAAU,QAAQ,0BAA0B;AAErD,SAASC,kBAAkB,EAAEC,UAAU,QAAQ,QAAQ;AAGvD,SAASC,QAAQ,QAAQ,uBAAuB;AAGhD,OAAO,MAAMC;IAODC,gBAAgB;QACpB,OAAO,IAAIJ,mBAAmBE,UAAU,IAAI,CAACG,UAAU;IAC3D;IAEQA,WAAWC,GAAY,EAAE;QAC7B,OAAOA,IAAIC,SAAS;IACxB;;QAZAC,uBAAAA,cAAa,IAAIP,WAAW;YACxBQ,YAAY,IAAI,CAACL,aAAa;YAC9BM,uBAAuB;YACvBC,UAAU;QACd;;AASJ"}
|
|
@@ -6,15 +6,20 @@ function _define_property(obj, key, value) {
|
|
|
6
6
|
configurable: true,
|
|
7
7
|
writable: true
|
|
8
8
|
});
|
|
9
|
-
} else
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
9
|
+
} else obj[key] = value;
|
|
12
10
|
return obj;
|
|
13
11
|
}
|
|
14
12
|
function _ts_decorate(decorators, target, key, desc) {
|
|
15
13
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
17
|
-
|
|
14
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
|
|
15
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
16
|
+
} else {
|
|
17
|
+
for(var i = decorators.length - 1; i >= 0; i--){
|
|
18
|
+
if (d = decorators[i]) {
|
|
19
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
18
23
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
24
|
}
|
|
20
25
|
import { injectable } from '@servicetitan/react-ioc';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/demo/state-caching/state-caching-table.store.ts"],"sourcesContent":["import { injectable } from '@servicetitan/react-ioc';\nimport { InMemoryDataSource, TableState } from '../..';\n\nimport { products } from './products';\nimport { beverages } from './beverages';\nimport type { Product } from './product';\nimport type { TableStateModel } from '../../table-state';\n\n@injectable()\nexport class TableStore {\n productsTableState?: TableStateModel<number>;\n beveragesTableState?: TableStateModel<number>;\n\n tableState = new TableState<Product, number>({\n dataSource: this.getProductsDataSource(),\n pageSize: 5,\n });\n\n showProducts = () => {\n this.beveragesTableState = this.tableState.exportState();\n this.tableState.setDataSource(this.getProductsDataSource(), {\n reset: true,\n initialState: this.productsTableState,\n });\n };\n\n showBeverages = () => {\n this.productsTableState = this.tableState.exportState();\n this.tableState.setDataSource(this.getBeveragesDataSource(), {\n reset: true,\n initialState: this.beveragesTableState,\n });\n };\n\n private getProductsDataSource() {\n return new InMemoryDataSource(products);\n }\n\n private getBeveragesDataSource() {\n return new InMemoryDataSource(beverages);\n }\n}\n"],"names":["injectable","InMemoryDataSource","TableState","products","beverages","TableStore","getProductsDataSource","getBeveragesDataSource","productsTableState","beveragesTableState","tableState","dataSource","pageSize","showProducts","exportState","setDataSource","reset","initialState","showBeverages"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/demo/state-caching/state-caching-table.store.ts"],"sourcesContent":["import { injectable } from '@servicetitan/react-ioc';\nimport { InMemoryDataSource, TableState } from '../..';\n\nimport { products } from './products';\nimport { beverages } from './beverages';\nimport type { Product } from './product';\nimport type { TableStateModel } from '../../table-state';\n\n@injectable()\nexport class TableStore {\n productsTableState?: TableStateModel<number>;\n beveragesTableState?: TableStateModel<number>;\n\n tableState = new TableState<Product, number>({\n dataSource: this.getProductsDataSource(),\n pageSize: 5,\n });\n\n showProducts = () => {\n this.beveragesTableState = this.tableState.exportState();\n this.tableState.setDataSource(this.getProductsDataSource(), {\n reset: true,\n initialState: this.productsTableState,\n });\n };\n\n showBeverages = () => {\n this.productsTableState = this.tableState.exportState();\n this.tableState.setDataSource(this.getBeveragesDataSource(), {\n reset: true,\n initialState: this.beveragesTableState,\n });\n };\n\n private getProductsDataSource() {\n return new InMemoryDataSource(products);\n }\n\n private getBeveragesDataSource() {\n return new InMemoryDataSource(beverages);\n }\n}\n"],"names":["injectable","InMemoryDataSource","TableState","products","beverages","TableStore","getProductsDataSource","getBeveragesDataSource","productsTableState","beveragesTableState","tableState","dataSource","pageSize","showProducts","exportState","setDataSource","reset","initialState","showBeverages"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,UAAU,QAAQ,0BAA0B;AACrD,SAASC,kBAAkB,EAAEC,UAAU,QAAQ,QAAQ;AAEvD,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,SAAS,QAAQ,cAAc;AAKxC,OAAO,MAAMC;IAyBDC,wBAAwB;QAC5B,OAAO,IAAIL,mBAAmBE;IAClC;IAEQI,yBAAyB;QAC7B,OAAO,IAAIN,mBAAmBG;IAClC;;QA9BAI,uBAAAA,sBAAAA,KAAAA;QACAC,uBAAAA,uBAAAA,KAAAA;QAEAC,uBAAAA,cAAa,IAAIR,WAA4B;YACzCS,YAAY,IAAI,CAACL,qBAAqB;YACtCM,UAAU;QACd;QAEAC,uBAAAA,gBAAe;YACX,IAAI,CAACJ,mBAAmB,GAAG,IAAI,CAACC,UAAU,CAACI,WAAW;YACtD,IAAI,CAACJ,UAAU,CAACK,aAAa,CAAC,IAAI,CAACT,qBAAqB,IAAI;gBACxDU,OAAO;gBACPC,cAAc,IAAI,CAACT,kBAAkB;YACzC;QACJ;QAEAU,uBAAAA,iBAAgB;YACZ,IAAI,CAACV,kBAAkB,GAAG,IAAI,CAACE,UAAU,CAACI,WAAW;YACrD,IAAI,CAACJ,UAAU,CAACK,aAAa,CAAC,IAAI,CAACR,sBAAsB,IAAI;gBACzDS,OAAO;gBACPC,cAAc,IAAI,CAACR,mBAAmB;YAC1C;QACJ;;AASJ"}
|
|
@@ -6,19 +6,26 @@ function _define_property(obj, key, value) {
|
|
|
6
6
|
configurable: true,
|
|
7
7
|
writable: true
|
|
8
8
|
});
|
|
9
|
-
} else
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
9
|
+
} else obj[key] = value;
|
|
12
10
|
return obj;
|
|
13
11
|
}
|
|
14
12
|
function _ts_decorate(decorators, target, key, desc) {
|
|
15
13
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
17
|
-
|
|
14
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
|
|
15
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
16
|
+
} else {
|
|
17
|
+
for(var i = decorators.length - 1; i >= 0; i--){
|
|
18
|
+
if (d = decorators[i]) {
|
|
19
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
18
23
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
24
|
}
|
|
20
|
-
function _ts_metadata(
|
|
21
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
|
|
25
|
+
function _ts_metadata(metadataKey, metadataValue) {
|
|
26
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
|
|
27
|
+
return Reflect.metadata(metadataKey, metadataValue);
|
|
28
|
+
}
|
|
22
29
|
}
|
|
23
30
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
24
31
|
import { Component, Fragment } from 'react';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/filters/async-select/async-select-filter.tsx"],"sourcesContent":["import type { SyntheticEvent, ReactNode, KeyboardEvent, FC } from 'react';\nimport { Component, Fragment } from 'react';\n\nimport type { TableFilterCellProps } from '@servicetitan/design-system';\nimport { Checkbox, Radio, Input, Spinner, BodyText } from '@servicetitan/design-system';\nimport type { IdType } from '@servicetitan/data-query';\n\nimport type { CustomColumnMenuFilterSingleOpts } from '../column-menu-filters';\nimport { renderCustomColumnMenuFilter } from '../column-menu-filters';\nimport { makeObservable, observable, runInAction } from 'mobx';\nimport { observer } from 'mobx-react';\n\nexport type AsyncSelectFilterDataFetcher<\n TV extends IdType = IdType,\n TO extends AsyncSelectItem<TV> = AsyncSelectItem<TV>,\n> = (opts: { search?: string }) => Promise<{ data: TO[] }>;\n\nexport interface AsyncSelectItem<TV extends IdType = IdType> {\n value: TV;\n text: string;\n}\n\ninterface SelectorProps<TID extends IdType, TO extends AsyncSelectItem<TID>> {\n placeholder?: string;\n selected: TO[];\n dataFetcher: AsyncSelectFilterDataFetcher<TID, TO>;\n itemComponent: FC<SelectorItemProps>;\n onChange(option: TO, checked: boolean, event: SyntheticEvent<HTMLInputElement>): void;\n renderer?(item: TO): ReactNode;\n}\n\ninterface SelectorItemProps {\n option: AsyncSelectItem;\n checked: boolean;\n onChange(\n option: AsyncSelectItem,\n checked: boolean,\n event: SyntheticEvent<HTMLInputElement>\n ): void;\n renderer?(item: AsyncSelectItem): ReactNode;\n}\n\n@observer\nclass SelectorAsync<TID extends IdType, TO extends AsyncSelectItem<TID>> extends Component<\n SelectorProps<TID, TO>\n> {\n @observable shownOptions: AsyncSelectItem<TID>[] = [];\n @observable search = '';\n @observable error = false;\n @observable loading = false;\n\n constructor(props: SelectorProps<TID, TO>) {\n super(props);\n makeObservable(this);\n }\n\n componentDidMount() {\n this.searchOptions().catch();\n }\n\n handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.stopPropagation();\n }\n };\n\n handleSearch = (_0: SyntheticEvent<HTMLInputElement>, data: { value: string }) => {\n runInAction(() => (this.search = data.value));\n this.searchOptions().catch();\n };\n\n searchOptions = async () => {\n runInAction(() => {\n this.loading = true;\n });\n\n try {\n const { data } = await this.props.dataFetcher({\n search: this.search,\n });\n\n runInAction(() => {\n this.shownOptions = data;\n this.error = false;\n this.loading = false;\n });\n } catch {\n runInAction(() => {\n this.error = true;\n this.loading = false;\n });\n }\n };\n\n render() {\n const selectedOptions = this.props.selected;\n const selected = new Set(selectedOptions.map(opt => opt.value));\n const ItemComponent = this.props.itemComponent;\n\n return (\n <Fragment>\n <Input\n className=\"m-x-half m-t-half m-b-2\"\n placeholder={this.props.placeholder}\n onChange={this.handleSearch}\n onKeyDown={this.handleKeyDown}\n size=\"xsmall\"\n value={this.search}\n />\n <div className=\"p-x-half position-relative\" onKeyDown={this.handleKeyDown}>\n {!!selectedOptions.length && (\n <div className=\"border-bottom m-y-half\">\n {selectedOptions.map(option => (\n <ItemComponent\n key={option.value}\n option={option}\n checked\n renderer={this.props.renderer}\n onChange={this.props.onChange}\n />\n ))}\n </div>\n )}\n {this.error ? (\n <BodyText className=\"c-red-500\">Unable to load options</BodyText>\n ) : this.shownOptions.length ? (\n this.shownOptions\n .filter(opt => !selected.has(opt.value))\n .map(option => (\n <ItemComponent\n key={option.value}\n option={option}\n checked={false}\n renderer={this.props.renderer}\n onChange={this.props.onChange}\n />\n ))\n ) : this.loading ? (\n <BodyText> </BodyText>\n ) : (\n <BodyText>No options found</BodyText>\n )}\n\n {this.loading && (\n <div className=\"position-absolute top-0 bottom-0 left-0 right-0 opacity-disabled bg-white d-f justify-content-center\">\n <Spinner size=\"tiny\" />\n </div>\n )}\n </div>\n </Fragment>\n );\n }\n}\n\nconst SelectorItemSingle: FC<SelectorItemProps> = ({ option, renderer, checked, onChange }) => (\n <Radio\n label={renderer?.(option) ?? option.text}\n checked={checked}\n onChange={(_, event) => onChange(option, true, event)}\n className=\"m-b-1\"\n />\n);\n\nconst SelectorItemMultiple: FC<SelectorItemProps> = ({ option, renderer, checked, onChange }) => (\n <Checkbox\n label={renderer?.(option) ?? option.text}\n checked={checked}\n onChange={(_, checked, event) => onChange(option, checked, event)}\n className=\"m-b-1\"\n />\n);\n\nexport interface AsyncSelectFilterOptions<\n TID extends IdType,\n TO extends AsyncSelectItem<TID>,\n> extends CustomColumnMenuFilterSingleOpts {\n dataFetcher: AsyncSelectFilterDataFetcher<TID, TO>;\n placeholder?: string;\n multiple?: boolean;\n renderItem?: (item: TO) => ReactNode;\n}\n\ninterface TableFilterCellPropsTyped<T = any> extends Omit<TableFilterCellProps, 'value'> {\n value?: T;\n}\n\n/**\n * @deprecated use selectColumnMenuFilter instead\n */\nexport function asyncSelectColumnMenuFilter<TID extends IdType, TO extends AsyncSelectItem<TID>>({\n dataFetcher,\n placeholder,\n multiple,\n renderItem,\n ...opts\n}: AsyncSelectFilterOptions<TID, TO>) {\n const contains = (value: TID, options?: TO[]) => options?.some(opt => opt.value === value);\n const equals = (value: TID, option?: TO) => option?.value === value;\n\n const FilterCell = multiple\n ? ({ value, onChange }: TableFilterCellPropsTyped<TO[]>) => {\n const handleChange = (\n option: TO,\n checked: boolean,\n event: SyntheticEvent<HTMLInputElement>\n ) => {\n const val = checked\n ? (value ?? []).concat(option)\n : (value ?? []).filter(opt => opt.value !== option.value);\n\n onChange({\n value: val.length ? val : undefined,\n operator: val.length ? contains : '',\n syntheticEvent: event,\n });\n };\n\n return (\n <SelectorAsync\n selected={value ?? []}\n itemComponent={SelectorItemMultiple}\n onChange={handleChange}\n placeholder={placeholder}\n renderer={renderItem}\n dataFetcher={dataFetcher}\n />\n );\n }\n : ({ value, onChange }: TableFilterCellPropsTyped<TO>) => {\n const handleChange = (\n option: TO,\n checked: boolean,\n event: SyntheticEvent<HTMLInputElement>\n ) => {\n onChange({\n value: option,\n operator: option ? equals : '',\n syntheticEvent: event,\n });\n };\n\n return (\n <SelectorAsync\n selected={value ? [value] : []}\n onChange={handleChange}\n itemComponent={SelectorItemSingle}\n placeholder={placeholder}\n renderer={renderItem}\n dataFetcher={dataFetcher}\n />\n );\n };\n\n return renderCustomColumnMenuFilter(FilterCell, opts);\n}\n"],"names":["Component","Fragment","Checkbox","Radio","Input","Spinner","BodyText","renderCustomColumnMenuFilter","makeObservable","observable","runInAction","observer","SelectorAsync","componentDidMount","searchOptions","catch","render","selectedOptions","props","selected","Set","map","opt","value","ItemComponent","itemComponent","className","placeholder","onChange","handleSearch","onKeyDown","handleKeyDown","size","search","div","length","option","checked","renderer","error","shownOptions","filter","has","loading","event","key","stopPropagation","_0","data","dataFetcher","SelectorItemSingle","label","text","_","SelectorItemMultiple","asyncSelectColumnMenuFilter","multiple","renderItem","opts","contains","options","some","equals","FilterCell","handleChange","val","concat","undefined","operator","syntheticEvent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../../src/filters/async-select/async-select-filter.tsx"],"sourcesContent":["import type { SyntheticEvent, ReactNode, KeyboardEvent, FC } from 'react';\nimport { Component, Fragment } from 'react';\n\nimport type { TableFilterCellProps } from '@servicetitan/design-system';\nimport { Checkbox, Radio, Input, Spinner, BodyText } from '@servicetitan/design-system';\nimport type { IdType } from '@servicetitan/data-query';\n\nimport type { CustomColumnMenuFilterSingleOpts } from '../column-menu-filters';\nimport { renderCustomColumnMenuFilter } from '../column-menu-filters';\nimport { makeObservable, observable, runInAction } from 'mobx';\nimport { observer } from 'mobx-react';\n\nexport type AsyncSelectFilterDataFetcher<\n TV extends IdType = IdType,\n TO extends AsyncSelectItem<TV> = AsyncSelectItem<TV>,\n> = (opts: { search?: string }) => Promise<{ data: TO[] }>;\n\nexport interface AsyncSelectItem<TV extends IdType = IdType> {\n value: TV;\n text: string;\n}\n\ninterface SelectorProps<TID extends IdType, TO extends AsyncSelectItem<TID>> {\n placeholder?: string;\n selected: TO[];\n dataFetcher: AsyncSelectFilterDataFetcher<TID, TO>;\n itemComponent: FC<SelectorItemProps>;\n onChange(option: TO, checked: boolean, event: SyntheticEvent<HTMLInputElement>): void;\n renderer?(item: TO): ReactNode;\n}\n\ninterface SelectorItemProps {\n option: AsyncSelectItem;\n checked: boolean;\n onChange(\n option: AsyncSelectItem,\n checked: boolean,\n event: SyntheticEvent<HTMLInputElement>\n ): void;\n renderer?(item: AsyncSelectItem): ReactNode;\n}\n\n@observer\nclass SelectorAsync<TID extends IdType, TO extends AsyncSelectItem<TID>> extends Component<\n SelectorProps<TID, TO>\n> {\n @observable shownOptions: AsyncSelectItem<TID>[] = [];\n @observable search = '';\n @observable error = false;\n @observable loading = false;\n\n constructor(props: SelectorProps<TID, TO>) {\n super(props);\n makeObservable(this);\n }\n\n componentDidMount() {\n this.searchOptions().catch();\n }\n\n handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.stopPropagation();\n }\n };\n\n handleSearch = (_0: SyntheticEvent<HTMLInputElement>, data: { value: string }) => {\n runInAction(() => (this.search = data.value));\n this.searchOptions().catch();\n };\n\n searchOptions = async () => {\n runInAction(() => {\n this.loading = true;\n });\n\n try {\n const { data } = await this.props.dataFetcher({\n search: this.search,\n });\n\n runInAction(() => {\n this.shownOptions = data;\n this.error = false;\n this.loading = false;\n });\n } catch {\n runInAction(() => {\n this.error = true;\n this.loading = false;\n });\n }\n };\n\n render() {\n const selectedOptions = this.props.selected;\n const selected = new Set(selectedOptions.map(opt => opt.value));\n const ItemComponent = this.props.itemComponent;\n\n return (\n <Fragment>\n <Input\n className=\"m-x-half m-t-half m-b-2\"\n placeholder={this.props.placeholder}\n onChange={this.handleSearch}\n onKeyDown={this.handleKeyDown}\n size=\"xsmall\"\n value={this.search}\n />\n <div className=\"p-x-half position-relative\" onKeyDown={this.handleKeyDown}>\n {!!selectedOptions.length && (\n <div className=\"border-bottom m-y-half\">\n {selectedOptions.map(option => (\n <ItemComponent\n key={option.value}\n option={option}\n checked\n renderer={this.props.renderer}\n onChange={this.props.onChange}\n />\n ))}\n </div>\n )}\n {this.error ? (\n <BodyText className=\"c-red-500\">Unable to load options</BodyText>\n ) : this.shownOptions.length ? (\n this.shownOptions\n .filter(opt => !selected.has(opt.value))\n .map(option => (\n <ItemComponent\n key={option.value}\n option={option}\n checked={false}\n renderer={this.props.renderer}\n onChange={this.props.onChange}\n />\n ))\n ) : this.loading ? (\n <BodyText> </BodyText>\n ) : (\n <BodyText>No options found</BodyText>\n )}\n\n {this.loading && (\n <div className=\"position-absolute top-0 bottom-0 left-0 right-0 opacity-disabled bg-white d-f justify-content-center\">\n <Spinner size=\"tiny\" />\n </div>\n )}\n </div>\n </Fragment>\n );\n }\n}\n\nconst SelectorItemSingle: FC<SelectorItemProps> = ({ option, renderer, checked, onChange }) => (\n <Radio\n label={renderer?.(option) ?? option.text}\n checked={checked}\n onChange={(_, event) => onChange(option, true, event)}\n className=\"m-b-1\"\n />\n);\n\nconst SelectorItemMultiple: FC<SelectorItemProps> = ({ option, renderer, checked, onChange }) => (\n <Checkbox\n label={renderer?.(option) ?? option.text}\n checked={checked}\n onChange={(_, checked, event) => onChange(option, checked, event)}\n className=\"m-b-1\"\n />\n);\n\nexport interface AsyncSelectFilterOptions<\n TID extends IdType,\n TO extends AsyncSelectItem<TID>,\n> extends CustomColumnMenuFilterSingleOpts {\n dataFetcher: AsyncSelectFilterDataFetcher<TID, TO>;\n placeholder?: string;\n multiple?: boolean;\n renderItem?: (item: TO) => ReactNode;\n}\n\ninterface TableFilterCellPropsTyped<T = any> extends Omit<TableFilterCellProps, 'value'> {\n value?: T;\n}\n\n/**\n * @deprecated use selectColumnMenuFilter instead\n */\nexport function asyncSelectColumnMenuFilter<TID extends IdType, TO extends AsyncSelectItem<TID>>({\n dataFetcher,\n placeholder,\n multiple,\n renderItem,\n ...opts\n}: AsyncSelectFilterOptions<TID, TO>) {\n const contains = (value: TID, options?: TO[]) => options?.some(opt => opt.value === value);\n const equals = (value: TID, option?: TO) => option?.value === value;\n\n const FilterCell = multiple\n ? ({ value, onChange }: TableFilterCellPropsTyped<TO[]>) => {\n const handleChange = (\n option: TO,\n checked: boolean,\n event: SyntheticEvent<HTMLInputElement>\n ) => {\n const val = checked\n ? (value ?? []).concat(option)\n : (value ?? []).filter(opt => opt.value !== option.value);\n\n onChange({\n value: val.length ? val : undefined,\n operator: val.length ? contains : '',\n syntheticEvent: event,\n });\n };\n\n return (\n <SelectorAsync\n selected={value ?? []}\n itemComponent={SelectorItemMultiple}\n onChange={handleChange}\n placeholder={placeholder}\n renderer={renderItem}\n dataFetcher={dataFetcher}\n />\n );\n }\n : ({ value, onChange }: TableFilterCellPropsTyped<TO>) => {\n const handleChange = (\n option: TO,\n checked: boolean,\n event: SyntheticEvent<HTMLInputElement>\n ) => {\n onChange({\n value: option,\n operator: option ? equals : '',\n syntheticEvent: event,\n });\n };\n\n return (\n <SelectorAsync\n selected={value ? [value] : []}\n onChange={handleChange}\n itemComponent={SelectorItemSingle}\n placeholder={placeholder}\n renderer={renderItem}\n dataFetcher={dataFetcher}\n />\n );\n };\n\n return renderCustomColumnMenuFilter(FilterCell, opts);\n}\n"],"names":["Component","Fragment","Checkbox","Radio","Input","Spinner","BodyText","renderCustomColumnMenuFilter","makeObservable","observable","runInAction","observer","SelectorAsync","componentDidMount","searchOptions","catch","render","selectedOptions","props","selected","Set","map","opt","value","ItemComponent","itemComponent","className","placeholder","onChange","handleSearch","onKeyDown","handleKeyDown","size","search","div","length","option","checked","renderer","error","shownOptions","filter","has","loading","event","key","stopPropagation","_0","data","dataFetcher","SelectorItemSingle","label","text","_","SelectorItemMultiple","asyncSelectColumnMenuFilter","multiple","renderItem","opts","contains","options","some","equals","FilterCell","handleChange","val","concat","undefined","operator","syntheticEvent"],"mappings":"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"}
|
|
@@ -6,19 +6,26 @@ function _define_property(obj, key, value) {
|
|
|
6
6
|
configurable: true,
|
|
7
7
|
writable: true
|
|
8
8
|
});
|
|
9
|
-
} else
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
9
|
+
} else obj[key] = value;
|
|
12
10
|
return obj;
|
|
13
11
|
}
|
|
14
12
|
function _ts_decorate(decorators, target, key, desc) {
|
|
15
13
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
17
|
-
|
|
14
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
|
|
15
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
16
|
+
} else {
|
|
17
|
+
for(var i = decorators.length - 1; i >= 0; i--){
|
|
18
|
+
if (d = decorators[i]) {
|
|
19
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
18
23
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
24
|
}
|
|
20
|
-
function _ts_metadata(
|
|
21
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
|
|
25
|
+
function _ts_metadata(metadataKey, metadataValue) {
|
|
26
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
|
|
27
|
+
return Reflect.metadata(metadataKey, metadataValue);
|
|
28
|
+
}
|
|
22
29
|
}
|
|
23
30
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
24
31
|
import { Component, Fragment } from 'react';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/filters/datetime-filter/datetime-filter.tsx"],"sourcesContent":["import { Component, Fragment } from 'react';\n\nimport { observer } from 'mobx-react';\nimport { observable, action, makeObservable } from 'mobx';\n\nimport type { DropDownListChangeEvent } from '@progress/kendo-react-dropdowns';\nimport { DropDownList } from '@progress/kendo-react-dropdowns';\nimport type {\n DatePickerChangeEvent,\n TimePickerChangeEvent,\n} from '@progress/kendo-react-dateinputs';\nimport { DatePicker, TimePicker } from '@progress/kendo-react-dateinputs';\n\nimport {\n IsUnaryFilter,\n cellOperatorChange,\n} from '@progress/kendo-react-grid/dist/npm/filterCommon';\n\nimport type { TableFilterCellProps } from '@servicetitan/design-system';\n\nimport { renderCustomColumnMenuFilter } from '../column-menu-filters';\n\n@observer\nclass DateTimeFilterCell extends Component<TableFilterCellProps> {\n @observable operator =\n this.props.operators.find(o => o.operator === this.props.operator) ??\n this.props.operators[0];\n\n constructor(props: TableFilterCellProps) {\n super(props);\n makeObservable(this);\n }\n\n @action\n handleOperatorChange = (event: DropDownListChangeEvent) => {\n this.operator = event.target.value;\n cellOperatorChange(event, this.props.value, this.props.onChange);\n };\n\n handleChange = (event: DatePickerChangeEvent | TimePickerChangeEvent) => {\n const value = event.value;\n\n this.props.onChange({\n value,\n operator: this.props.operator ?? '',\n syntheticEvent: event.syntheticEvent,\n });\n };\n\n render() {\n return (\n <Fragment>\n <DropDownList\n value={this.operator}\n onChange={this.handleOperatorChange}\n data={this.props.operators}\n dataItemKey=\"operator\"\n className=\"m-b-1\"\n textField=\"text\"\n />\n {!IsUnaryFilter(this.operator.operator) && (\n <Fragment>\n <DatePicker\n value={this.props.value}\n onChange={this.handleChange}\n className=\"m-b-1\"\n />\n <TimePicker\n value={this.props.value}\n onChange={this.handleChange}\n className=\"m-b-1\"\n />\n </Fragment>\n )}\n </Fragment>\n );\n }\n}\n\nexport const DateTimeColumnMenuFilter = renderCustomColumnMenuFilter(DateTimeFilterCell, true);\n"],"names":["Component","Fragment","observer","observable","action","makeObservable","DropDownList","DatePicker","TimePicker","IsUnaryFilter","cellOperatorChange","renderCustomColumnMenuFilter","DateTimeFilterCell","render","value","operator","onChange","handleOperatorChange","data","props","operators","dataItemKey","className","textField","handleChange","find","o","event","target","syntheticEvent","DateTimeColumnMenuFilter"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../../src/filters/datetime-filter/datetime-filter.tsx"],"sourcesContent":["import { Component, Fragment } from 'react';\n\nimport { observer } from 'mobx-react';\nimport { observable, action, makeObservable } from 'mobx';\n\nimport type { DropDownListChangeEvent } from '@progress/kendo-react-dropdowns';\nimport { DropDownList } from '@progress/kendo-react-dropdowns';\nimport type {\n DatePickerChangeEvent,\n TimePickerChangeEvent,\n} from '@progress/kendo-react-dateinputs';\nimport { DatePicker, TimePicker } from '@progress/kendo-react-dateinputs';\n\nimport {\n IsUnaryFilter,\n cellOperatorChange,\n} from '@progress/kendo-react-grid/dist/npm/filterCommon';\n\nimport type { TableFilterCellProps } from '@servicetitan/design-system';\n\nimport { renderCustomColumnMenuFilter } from '../column-menu-filters';\n\n@observer\nclass DateTimeFilterCell extends Component<TableFilterCellProps> {\n @observable operator =\n this.props.operators.find(o => o.operator === this.props.operator) ??\n this.props.operators[0];\n\n constructor(props: TableFilterCellProps) {\n super(props);\n makeObservable(this);\n }\n\n @action\n handleOperatorChange = (event: DropDownListChangeEvent) => {\n this.operator = event.target.value;\n cellOperatorChange(event, this.props.value, this.props.onChange);\n };\n\n handleChange = (event: DatePickerChangeEvent | TimePickerChangeEvent) => {\n const value = event.value;\n\n this.props.onChange({\n value,\n operator: this.props.operator ?? '',\n syntheticEvent: event.syntheticEvent,\n });\n };\n\n render() {\n return (\n <Fragment>\n <DropDownList\n value={this.operator}\n onChange={this.handleOperatorChange}\n data={this.props.operators}\n dataItemKey=\"operator\"\n className=\"m-b-1\"\n textField=\"text\"\n />\n {!IsUnaryFilter(this.operator.operator) && (\n <Fragment>\n <DatePicker\n value={this.props.value}\n onChange={this.handleChange}\n className=\"m-b-1\"\n />\n <TimePicker\n value={this.props.value}\n onChange={this.handleChange}\n className=\"m-b-1\"\n />\n </Fragment>\n )}\n </Fragment>\n );\n }\n}\n\nexport const DateTimeColumnMenuFilter = renderCustomColumnMenuFilter(DateTimeFilterCell, true);\n"],"names":["Component","Fragment","observer","observable","action","makeObservable","DropDownList","DatePicker","TimePicker","IsUnaryFilter","cellOperatorChange","renderCustomColumnMenuFilter","DateTimeFilterCell","render","value","operator","onChange","handleOperatorChange","data","props","operators","dataItemKey","className","textField","handleChange","find","o","event","target","syntheticEvent","DateTimeColumnMenuFilter"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,QAAQ;AAE5C,SAASC,QAAQ,QAAQ,aAAa;AACtC,SAASC,UAAU,EAAEC,MAAM,EAAEC,cAAc,QAAQ,OAAO;AAG1D,SAASC,YAAY,QAAQ,kCAAkC;AAK/D,SAASC,UAAU,EAAEC,UAAU,QAAQ,mCAAmC;AAE1E,SACIC,aAAa,EACbC,kBAAkB,QACf,mDAAmD;AAI1D,SAASC,4BAA4B,QAAQ,yBAAyB;AAEtE,MACMC,2BAA2BZ;IA0B7Ba,SAAS;QACL,qBACI,MAACZ;;8BACG,KAACK;oBACGQ,OAAO,IAAI,CAACC,QAAQ;oBACpBC,UAAU,IAAI,CAACC,oBAAoB;oBACnCC,MAAM,IAAI,CAACC,KAAK,CAACC,SAAS;oBAC1BC,aAAY;oBACZC,WAAU;oBACVC,WAAU;;gBAEb,CAACd,cAAc,IAAI,CAACM,QAAQ,CAACA,QAAQ,mBAClC,MAACd;;sCACG,KAACM;4BACGO,OAAO,IAAI,CAACK,KAAK,CAACL,KAAK;4BACvBE,UAAU,IAAI,CAACQ,YAAY;4BAC3BF,WAAU;;sCAEd,KAACd;4BACGM,OAAO,IAAI,CAACK,KAAK,CAACL,KAAK;4BACvBE,UAAU,IAAI,CAACQ,YAAY;4BAC3BF,WAAU;;;;;;IAMlC;IAhDA,YAAYH,KAA2B,CAAE;YAHrC;QAIA,KAAK,CAACA,QALV,uBAAYJ,aACR,6BAAA,IAAI,CAACI,KAAK,CAACC,SAAS,CAACK,IAAI,CAACC,CAAAA,IAAKA,EAAEX,QAAQ,KAAK,IAAI,CAACI,KAAK,CAACJ,QAAQ,eAAjE,wCAAA,6BACA,IAAI,CAACI,KAAK,CAACC,SAAS,CAAC,EAAE,GAO3B,uBACAH,wBAAuB,CAACU;YACpB,IAAI,CAACZ,QAAQ,GAAGY,MAAMC,MAAM,CAACd,KAAK;YAClCJ,mBAAmBiB,OAAO,IAAI,CAACR,KAAK,CAACL,KAAK,EAAE,IAAI,CAACK,KAAK,CAACH,QAAQ;QACnE,IAEAQ,uBAAAA,gBAAe,CAACG;gBAKE;YAJd,MAAMb,QAAQa,MAAMb,KAAK;YAEzB,IAAI,CAACK,KAAK,CAACH,QAAQ,CAAC;gBAChBF;gBACAC,QAAQ,GAAE,uBAAA,IAAI,CAACI,KAAK,CAACJ,QAAQ,cAAnB,kCAAA,uBAAuB;gBACjCc,gBAAgBF,MAAME,cAAc;YACxC;QACJ;QAjBIxB,eAAe,IAAI;IACvB;AA8CJ;;;;;;;;;;;;;;AAEA,OAAO,MAAMyB,2BAA2BnB,6BAA6BC,oBAAoB,MAAM"}
|
|
@@ -6,19 +6,26 @@ function _define_property(obj, key, value) {
|
|
|
6
6
|
configurable: true,
|
|
7
7
|
writable: true
|
|
8
8
|
});
|
|
9
|
-
} else
|
|
10
|
-
obj[key] = value;
|
|
11
|
-
}
|
|
9
|
+
} else obj[key] = value;
|
|
12
10
|
return obj;
|
|
13
11
|
}
|
|
14
12
|
function _ts_decorate(decorators, target, key, desc) {
|
|
15
13
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
16
|
-
if (typeof Reflect === "object" && typeof Reflect.decorate === "function")
|
|
17
|
-
|
|
14
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") {
|
|
15
|
+
r = Reflect.decorate(decorators, target, key, desc);
|
|
16
|
+
} else {
|
|
17
|
+
for(var i = decorators.length - 1; i >= 0; i--){
|
|
18
|
+
if (d = decorators[i]) {
|
|
19
|
+
r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
18
23
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
19
24
|
}
|
|
20
|
-
function _ts_metadata(
|
|
21
|
-
if (typeof Reflect === "object" && typeof Reflect.metadata === "function")
|
|
25
|
+
function _ts_metadata(metadataKey, metadataValue) {
|
|
26
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") {
|
|
27
|
+
return Reflect.metadata(metadataKey, metadataValue);
|
|
28
|
+
}
|
|
22
29
|
}
|
|
23
30
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
24
31
|
import { Checkbox } from '@servicetitan/design-system';
|