namirasoft-account-react 1.4.419 → 1.4.421
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/IEntityInfo.d.ts +2 -0
- package/dist/NSACacheService.d.ts +3 -0
- package/dist/NSACacheService.js +13 -0
- package/dist/NSACacheService.js.map +1 -1
- package/dist/NSAFilterOperators.d.ts +28 -0
- package/dist/NSAFilterOperators.js +50 -0
- package/dist/NSAFilterOperators.js.map +1 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxBase.d.ts +14 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxBase.js +40 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxBase.js.map +1 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxBoolean.d.ts +12 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxBoolean.js +30 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxBoolean.js.map +1 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxDate.d.ts +12 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxDate.js +58 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxDate.js.map +1 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxDateTime.d.ts +12 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxDateTime.js +58 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxDateTime.js.map +1 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxEnum.d.ts +22 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxEnum.js +52 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxEnum.js.map +1 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxNumber.d.ts +22 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxNumber.js +67 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxNumber.js.map +1 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxString.d.ts +13 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxString.js +47 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxString.js.map +1 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxTime.d.ts +12 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxTime.js +58 -0
- package/dist/components/NSAQuickFilter/NSAFilterBoxTime.js.map +1 -0
- package/dist/components/NSAQuickFilter/NSAQuickFilterBar.d.ts +28 -0
- package/dist/components/NSAQuickFilter/NSAQuickFilterBar.js +74 -0
- package/dist/components/NSAQuickFilter/NSAQuickFilterBar.js.map +1 -0
- package/dist/components/NSAQuickFilter/NSAQuickFilterDialog.d.ts +43 -0
- package/dist/components/NSAQuickFilter/NSAQuickFilterDialog.js +114 -0
- package/dist/components/NSAQuickFilter/NSAQuickFilterDialog.js.map +1 -0
- package/dist/components/NSAReorderDialog.d.ts +30 -0
- package/dist/components/NSAReorderDialog.js +69 -0
- package/dist/components/NSAReorderDialog.js.map +1 -0
- package/dist/components/NSAReorderDialog.module.css +50 -0
- package/dist/components/NSASortDialog.d.ts +21 -0
- package/dist/components/NSASortDialog.js +61 -0
- package/dist/components/NSASortDialog.js.map +1 -0
- package/dist/components/NSATable.d.ts +95 -0
- package/dist/components/NSATable.js +335 -0
- package/dist/components/NSATable.js.map +1 -0
- package/dist/layouts/NSASectionList.d.ts +6 -36
- package/dist/layouts/NSASectionList.js +16 -246
- package/dist/layouts/NSASectionList.js.map +1 -1
- package/dist/layouts/NSASectionList.module.css +15 -18
- package/package.json +2 -2
- package/src/IEntityInfo.ts +2 -0
- package/src/NSACacheService.ts +20 -0
- package/src/NSAFilterOperators.ts +93 -0
- package/src/components/NSAQuickFilter/NSAFilterBoxBase.tsx +56 -0
- package/src/components/NSAQuickFilter/NSAFilterBoxBoolean.tsx +55 -0
- package/src/components/NSAQuickFilter/NSAFilterBoxDate.tsx +105 -0
- package/src/components/NSAQuickFilter/NSAFilterBoxDateTime.tsx +106 -0
- package/src/components/NSAQuickFilter/NSAFilterBoxEnum.module.css +45 -0
- package/src/components/NSAQuickFilter/NSAFilterBoxEnum.tsx +80 -0
- package/src/components/NSAQuickFilter/NSAFilterBoxNumber.tsx +137 -0
- package/src/components/NSAQuickFilter/NSAFilterBoxString.tsx +82 -0
- package/src/components/NSAQuickFilter/NSAFilterBoxTime.tsx +102 -0
- package/src/components/NSAQuickFilter/NSAQuickFilterBar.module.css +20 -0
- package/src/components/NSAQuickFilter/NSAQuickFilterBar.tsx +115 -0
- package/src/components/NSAQuickFilter/NSAQuickFilterDialog.module.css +75 -0
- package/src/components/NSAQuickFilter/NSAQuickFilterDialog.tsx +261 -0
- package/src/components/NSAReorderDialog.module.css +50 -0
- package/src/components/NSAReorderDialog.tsx +150 -0
- package/src/components/NSASortDialog.tsx +118 -0
- package/src/components/NSATable.tsx +490 -0
- package/src/layouts/NSASectionList.module.css +15 -18
- package/src/layouts/NSASectionList.tsx +41 -393
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { NSAFilterBoxBase, NSAFilterBoxBaseProps } from "./NSAFilterBoxBase";
|
|
2
|
+
export interface NSAFilterBoxStringProps extends NSAFilterBoxBaseProps {
|
|
3
|
+
getValues: (search: string) => Promise<{
|
|
4
|
+
value: string;
|
|
5
|
+
title: string;
|
|
6
|
+
}[]>;
|
|
7
|
+
}
|
|
8
|
+
export declare class NSAFilterBoxString extends NSAFilterBoxBase<NSAFilterBoxStringProps> {
|
|
9
|
+
private debounce;
|
|
10
|
+
private list;
|
|
11
|
+
private emitDebounced;
|
|
12
|
+
render(): JSX.Element | null;
|
|
13
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
import { FilterItemOperator, SetTimeouService } from "namirasoft-core";
|
|
12
|
+
import { NSBoxEntity, NSBoxString } from "namirasoft-site-react";
|
|
13
|
+
import { NSAFilterBoxBase } from "./NSAFilterBoxBase";
|
|
14
|
+
import { NSAFilterBoxBoolean } from "./NSAFilterBoxBoolean";
|
|
15
|
+
const ENTITY_OPERATORS = ["equals", "notequals"];
|
|
16
|
+
const DEBOUNCE_MS = 1000;
|
|
17
|
+
export class NSAFilterBoxString extends NSAFilterBoxBase {
|
|
18
|
+
constructor() {
|
|
19
|
+
super(...arguments);
|
|
20
|
+
this.debounce = new SetTimeouService();
|
|
21
|
+
this.list = (filters, _page, _size, _sorts) => __awaiter(this, void 0, void 0, function* () {
|
|
22
|
+
var _a;
|
|
23
|
+
const searchFilter = filters === null || filters === void 0 ? void 0 : filters.find(f => f.values.length > 0);
|
|
24
|
+
const search = (_a = searchFilter === null || searchFilter === void 0 ? void 0 : searchFilter.values[0]) !== null && _a !== void 0 ? _a : "";
|
|
25
|
+
const rows = yield this.props.getValues(search);
|
|
26
|
+
return { count: rows.length, rows };
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
emitDebounced(value) {
|
|
30
|
+
this.debounce.setTimeoutIfNotCalledAgain(() => this.props.onChanged(value ? this.buildFilterItem(value) : null), DEBOUNCE_MS);
|
|
31
|
+
}
|
|
32
|
+
render() {
|
|
33
|
+
const { config, onChanged } = this.props;
|
|
34
|
+
const op = config.operatorName
|
|
35
|
+
? FilterItemOperator.getByName(config.operatorName)
|
|
36
|
+
: null;
|
|
37
|
+
if (op && op.count === 0)
|
|
38
|
+
return _jsx(NSAFilterBoxBoolean, { config: config, onChanged: onChanged });
|
|
39
|
+
if (config.operatorName && ENTITY_OPERATORS.includes(config.operatorName))
|
|
40
|
+
return (_jsx(NSBoxEntity, { title: this.getLabel(), placeholder: this.getLabel(), required: false, hideHeader: true, multiple: false, list: this.list, table_name: config.column.table.name, getValue: item => item.value, getTitle: item => item.title, getSort: () => null, onChanged: e => {
|
|
41
|
+
const val = e.getValueOne();
|
|
42
|
+
onChanged(val ? this.buildFilterItem(val) : null);
|
|
43
|
+
} }));
|
|
44
|
+
return (_jsx(NSBoxString, { title: this.getLabel(), placeholder: this.getLabel(), required: false, hideHeader: true, onChanged: e => this.emitDebounced(e.getValue()) }));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=NSAFilterBoxString.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NSAFilterBoxString.js","sourceRoot":"","sources":["../../../src/components/NSAQuickFilter/NSAFilterBoxString.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { NSAFilterBoxBase, NSAFilterBoxBaseProps } from "./NSAFilterBoxBase";
|
|
2
|
+
export interface NSAFilterBoxTimeProps extends NSAFilterBoxBaseProps {
|
|
3
|
+
getValues: (search: string) => Promise<{
|
|
4
|
+
value: string;
|
|
5
|
+
title: string;
|
|
6
|
+
}[]>;
|
|
7
|
+
}
|
|
8
|
+
export declare class NSAFilterBoxTime extends NSAFilterBoxBase<NSAFilterBoxTimeProps> {
|
|
9
|
+
private betweenActive;
|
|
10
|
+
private list;
|
|
11
|
+
render(): JSX.Element | null;
|
|
12
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
11
|
+
import { FilterItemOperator } from "namirasoft-core";
|
|
12
|
+
import { NSBoxEntity, NSBoxTime, NSBoxTimeRange } from "namirasoft-site-react";
|
|
13
|
+
import { NSAFilterBoxBase } from "./NSAFilterBoxBase";
|
|
14
|
+
import { NSAFilterBoxBoolean } from "./NSAFilterBoxBoolean";
|
|
15
|
+
const ENTITY_OPERATORS = ["equals"];
|
|
16
|
+
export class NSAFilterBoxTime extends NSAFilterBoxBase {
|
|
17
|
+
constructor() {
|
|
18
|
+
super(...arguments);
|
|
19
|
+
this.betweenActive = false;
|
|
20
|
+
this.list = (filters, _page, _size, _sorts) => __awaiter(this, void 0, void 0, function* () {
|
|
21
|
+
var _a;
|
|
22
|
+
const searchFilter = filters === null || filters === void 0 ? void 0 : filters.find(f => f.values.length > 0);
|
|
23
|
+
const search = (_a = searchFilter === null || searchFilter === void 0 ? void 0 : searchFilter.values[0]) !== null && _a !== void 0 ? _a : "";
|
|
24
|
+
const rows = yield this.props.getValues(search);
|
|
25
|
+
return { count: rows.length, rows };
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
render() {
|
|
29
|
+
const { config, onChanged } = this.props;
|
|
30
|
+
const op = config.operatorName
|
|
31
|
+
? FilterItemOperator.getByName(config.operatorName)
|
|
32
|
+
: null;
|
|
33
|
+
if (op && op.count === 0)
|
|
34
|
+
return _jsx(NSAFilterBoxBoolean, { config: config, onChanged: onChanged });
|
|
35
|
+
if (config.operatorName === "between")
|
|
36
|
+
return (_jsx(NSBoxTimeRange, { title: this.getLabel(), placeholder: this.getLabel(), required: false, hideHeader: true, preset: true, onChanged: e => {
|
|
37
|
+
const val = e.getValue();
|
|
38
|
+
if (val) {
|
|
39
|
+
this.betweenActive = true;
|
|
40
|
+
onChanged(this.buildBetweenFilterItems(val.from, val.to));
|
|
41
|
+
}
|
|
42
|
+
else if (this.betweenActive) {
|
|
43
|
+
this.betweenActive = false;
|
|
44
|
+
onChanged(null);
|
|
45
|
+
}
|
|
46
|
+
} }));
|
|
47
|
+
if (config.operatorName && ENTITY_OPERATORS.includes(config.operatorName))
|
|
48
|
+
return (_jsx(NSBoxEntity, { title: this.getLabel(), placeholder: this.getLabel(), required: false, hideHeader: true, multiple: false, list: this.list, table_name: config.column.table.name, getValue: item => item.value, getTitle: item => item.title, getSort: () => null, onChanged: e => {
|
|
49
|
+
const val = e.getValueOne();
|
|
50
|
+
onChanged(val ? this.buildFilterItem(val) : null);
|
|
51
|
+
} }));
|
|
52
|
+
return (_jsx(NSBoxTime, { title: this.getLabel(), placeholder: this.getLabel(), required: false, hideHeader: true, onChanged: e => {
|
|
53
|
+
const val = e.getValue();
|
|
54
|
+
onChanged(val ? this.buildFilterItem(val) : null);
|
|
55
|
+
} }));
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=NSAFilterBoxTime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NSAFilterBoxTime.js","sourceRoot":"","sources":["../../../src/components/NSAQuickFilter/NSAFilterBoxTime.tsx"],"names":[],"mappings":";;;;;;;;;;AAAA,OAAO,EAAc,kBAAkB,EAAY,MAAM,iBAAiB,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAyB,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAS5D,MAAM,gBAAgB,GAAG,CAAC,QAAQ,CAAC,CAAC;AAEpC,MAAM,OAAO,gBAAiB,SAAQ,gBAAuC;IAA7E;;QAEY,kBAAa,GAAG,KAAK,CAAC;QAEtB,SAAI,GAAG,CACX,OAA4B,EAC5B,KAAoB,EACpB,KAAoB,EACpB,MAAkB,EAC2B,EAAE;;YAE/C,MAAM,YAAY,GAAG,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,MAAA,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,MAAM,CAAC,CAAC,CAAC,mCAAI,EAAE,CAAC;YAC7C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAChD,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC;QACxC,CAAC,CAAA,CAAC;IAwEN,CAAC;IAtEY,MAAM;QAEX,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;QACzC,MAAM,EAAE,GAAG,MAAM,CAAC,YAAY;YAC1B,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC,MAAM,CAAC,YAAY,CAAC;YACnD,CAAC,CAAC,IAAI,CAAC;QAEX,IAAI,EAAE,IAAI,EAAE,CAAC,KAAK,KAAK,CAAC;YACpB,OAAO,KAAC,mBAAmB,IAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAI,CAAC;QAEzE,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS;YACjC,OAAO,CACH,KAAC,cAAc,IACX,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EACtB,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,EAC5B,QAAQ,EAAE,KAAK,EACf,UAAU,EAAE,IAAI,EAChB,MAAM,EAAE,IAAI,EACZ,SAAS,EAAE,CAAC,CAAC,EAAE;oBAEX,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;oBACzB,IAAI,GAAG,EACP,CAAC;wBACG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;wBAC1B,SAAS,CAAC,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;oBAC9D,CAAC;yBACI,IAAI,IAAI,CAAC,aAAa,EAC3B,CAAC;wBACG,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;wBAC3B,SAAS,CAAC,IAAI,CAAC,CAAC;oBACpB,CAAC;gBACL,CAAC,GACH,CACL,CAAC;QAEN,IAAI,MAAM,CAAC,YAAY,IAAI,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,YAAY,CAAC;YACrE,OAAO,CACH,KAAC,WAAW,IACR,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EACtB,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,EAC5B,QAAQ,EAAE,KAAK,EACf,UAAU,EAAE,IAAI,EAChB,QAAQ,EAAE,KAAK,EACf,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EACpC,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAC5B,QAAQ,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,EAC5B,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,EACnB,SAAS,EAAE,CAAC,CAAC,EAAE;oBAEX,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;oBAC5B,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBACtD,CAAC,GACH,CACL,CAAC;QAEN,OAAO,CACH,KAAC,SAAS,IACN,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,EACtB,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,EAC5B,QAAQ,EAAE,KAAK,EACf,UAAU,EAAE,IAAI,EAChB,SAAS,EAAE,CAAC,CAAC,EAAE;gBAEX,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC;gBACzB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACtD,CAAC,GACH,CACL,CAAC;IACN,CAAC;CACJ"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Component } from "react";
|
|
2
|
+
import { FilterItem } from "namirasoft-core";
|
|
3
|
+
import { QuickFilterConfig } from "./NSAQuickFilterDialog";
|
|
4
|
+
interface NSAQuickFilterBarProps {
|
|
5
|
+
configs: QuickFilterConfig[];
|
|
6
|
+
getValues: (tableName: string, columnName: string, search: string) => Promise<{
|
|
7
|
+
value: string;
|
|
8
|
+
title: string;
|
|
9
|
+
}[]>;
|
|
10
|
+
onChanged?: () => void;
|
|
11
|
+
}
|
|
12
|
+
interface NSAQuickFilterBarState {
|
|
13
|
+
filterValues: {
|
|
14
|
+
[id: string]: FilterItem | FilterItem[] | null;
|
|
15
|
+
};
|
|
16
|
+
clearKeys: {
|
|
17
|
+
[id: string]: number;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export declare class NSAQuickFilterBar extends Component<NSAQuickFilterBarProps, NSAQuickFilterBarState> {
|
|
21
|
+
constructor(props: NSAQuickFilterBarProps);
|
|
22
|
+
getFilterItems(): FilterItem[];
|
|
23
|
+
private handleFilterChange;
|
|
24
|
+
private renderFilterBox;
|
|
25
|
+
private renderCard;
|
|
26
|
+
render(): import("react").JSX.Element | null;
|
|
27
|
+
}
|
|
28
|
+
export {};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Component } from "react";
|
|
3
|
+
import { VariableType } from "namirasoft-schema";
|
|
4
|
+
import { NSAFilterBoxBoolean } from "./NSAFilterBoxBoolean";
|
|
5
|
+
import { NSAFilterBoxDate } from "./NSAFilterBoxDate";
|
|
6
|
+
import { NSAFilterBoxDateTime } from "./NSAFilterBoxDateTime";
|
|
7
|
+
import { NSAFilterBoxEnum } from "./NSAFilterBoxEnum";
|
|
8
|
+
import { NSAFilterBoxNumber } from "./NSAFilterBoxNumber";
|
|
9
|
+
import { NSAFilterBoxString } from "./NSAFilterBoxString";
|
|
10
|
+
import { NSAFilterBoxTime } from "./NSAFilterBoxTime";
|
|
11
|
+
import Styles from "./NSAQuickFilterBar.module.css";
|
|
12
|
+
const NUMERIC_TYPES = new Set([
|
|
13
|
+
VariableType.TinyInt, VariableType.SmallInt, VariableType.MediumInt,
|
|
14
|
+
VariableType.Integer, VariableType.BigInt, VariableType.Float,
|
|
15
|
+
VariableType.Double, VariableType.Decimal, VariableType.Real, VariableType.Money,
|
|
16
|
+
]);
|
|
17
|
+
const STRING_TYPES = new Set([
|
|
18
|
+
VariableType.String, VariableType.Email, VariableType.Phone, VariableType.URL,
|
|
19
|
+
VariableType.Color, VariableType.Font, VariableType.FilePath, VariableType.Version,
|
|
20
|
+
VariableType.IPV4, VariableType.IPV6, VariableType.IPV4Range, VariableType.IPV6Range,
|
|
21
|
+
]);
|
|
22
|
+
export class NSAQuickFilterBar extends Component {
|
|
23
|
+
constructor(props) {
|
|
24
|
+
super(props);
|
|
25
|
+
this.handleFilterChange = (configId, items) => {
|
|
26
|
+
this.setState(prev => ({ filterValues: Object.assign(Object.assign({}, prev.filterValues), { [configId]: items }) }), this.props.onChanged);
|
|
27
|
+
};
|
|
28
|
+
this.state = { filterValues: {}, clearKeys: {} };
|
|
29
|
+
}
|
|
30
|
+
getFilterItems() {
|
|
31
|
+
return Object.values(this.state.filterValues).flatMap(v => {
|
|
32
|
+
if (!v)
|
|
33
|
+
return [];
|
|
34
|
+
return Array.isArray(v) ? v : [v];
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
renderFilterBox(config, clearKey, colGetValues) {
|
|
38
|
+
const { columnType } = config.column;
|
|
39
|
+
const onChanged = (items) => this.handleFilterChange(config.id, items);
|
|
40
|
+
const commonProps = { key: clearKey, config, onChanged };
|
|
41
|
+
if (columnType === VariableType.Boolean)
|
|
42
|
+
return _jsx(NSAFilterBoxBoolean, Object.assign({}, commonProps));
|
|
43
|
+
if (NUMERIC_TYPES.has(columnType))
|
|
44
|
+
return _jsx(NSAFilterBoxNumber, Object.assign({}, commonProps, { getValues: colGetValues }));
|
|
45
|
+
if (columnType === VariableType.Date)
|
|
46
|
+
return _jsx(NSAFilterBoxDate, Object.assign({}, commonProps, { getValues: colGetValues }));
|
|
47
|
+
if (columnType === VariableType.DateTime)
|
|
48
|
+
return _jsx(NSAFilterBoxDateTime, Object.assign({}, commonProps, { getValues: colGetValues }));
|
|
49
|
+
if (columnType === VariableType.Time)
|
|
50
|
+
return _jsx(NSAFilterBoxTime, Object.assign({}, commonProps, { getValues: colGetValues }));
|
|
51
|
+
if (STRING_TYPES.has(columnType))
|
|
52
|
+
return _jsx(NSAFilterBoxString, Object.assign({}, commonProps, { getValues: colGetValues }));
|
|
53
|
+
if (columnType === VariableType.Enum || columnType === VariableType.Entity)
|
|
54
|
+
return _jsx(NSAFilterBoxEnum, Object.assign({}, commonProps, { getValues: colGetValues }));
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
renderCard(config) {
|
|
58
|
+
var _a;
|
|
59
|
+
const { getValues } = this.props;
|
|
60
|
+
const clearKey = (_a = this.state.clearKeys[config.id]) !== null && _a !== void 0 ? _a : 0;
|
|
61
|
+
const colGetValues = (s) => getValues(config.column.table.name, config.column.name, s);
|
|
62
|
+
const box = this.renderFilterBox(config, clearKey, colGetValues);
|
|
63
|
+
if (!box)
|
|
64
|
+
return null;
|
|
65
|
+
return (_jsx("div", { className: Styles.qf_card, children: box }, config.id));
|
|
66
|
+
}
|
|
67
|
+
render() {
|
|
68
|
+
const { configs } = this.props;
|
|
69
|
+
if (configs.length === 0)
|
|
70
|
+
return null;
|
|
71
|
+
return (_jsx("div", { className: Styles.qf_bar, children: configs.map(config => this.renderCard(config)) }));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=NSAQuickFilterBar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NSAQuickFilterBar.js","sourceRoot":"","sources":["../../../src/components/NSAQuickFilter/NSAQuickFilterBar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { VariableType } from "namirasoft-schema";
|
|
2
|
+
import { TableColumnInfo } from "namirasoft-site-react";
|
|
3
|
+
import { Component } from "react";
|
|
4
|
+
export interface QuickFilterConfig {
|
|
5
|
+
id: string;
|
|
6
|
+
column: {
|
|
7
|
+
table: {
|
|
8
|
+
name: string;
|
|
9
|
+
text: string;
|
|
10
|
+
};
|
|
11
|
+
name: string;
|
|
12
|
+
text: string;
|
|
13
|
+
type: string;
|
|
14
|
+
columnType: VariableType;
|
|
15
|
+
};
|
|
16
|
+
operatorName?: string;
|
|
17
|
+
}
|
|
18
|
+
interface NSAQuickFilterDialogProps {
|
|
19
|
+
configs: QuickFilterConfig[];
|
|
20
|
+
getColumns: () => TableColumnInfo[];
|
|
21
|
+
typeConverter: (type: string) => VariableType;
|
|
22
|
+
onSave: (configs: QuickFilterConfig[]) => void;
|
|
23
|
+
onConfirm: (configs: QuickFilterConfig[]) => void;
|
|
24
|
+
onClose: () => void;
|
|
25
|
+
}
|
|
26
|
+
interface NSAQuickFilterDialogState {
|
|
27
|
+
configs: QuickFilterConfig[];
|
|
28
|
+
formMode: "add" | "edit" | null;
|
|
29
|
+
editingId: string | null;
|
|
30
|
+
formColumn: TableColumnInfo | null;
|
|
31
|
+
formOperatorName: string | null;
|
|
32
|
+
formKey: number;
|
|
33
|
+
}
|
|
34
|
+
export declare class NSAQuickFilterDialog extends Component<NSAQuickFilterDialogProps, NSAQuickFilterDialogState> {
|
|
35
|
+
constructor(props: NSAQuickFilterDialogProps);
|
|
36
|
+
private openAdd;
|
|
37
|
+
private openEdit;
|
|
38
|
+
private deleteConfig;
|
|
39
|
+
private hasChanges;
|
|
40
|
+
private saveForm;
|
|
41
|
+
render(): import("react").JSX.Element;
|
|
42
|
+
}
|
|
43
|
+
export {};
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
11
|
+
import { FilterItemOperator } from "namirasoft-core";
|
|
12
|
+
import { VariableType } from "namirasoft-schema";
|
|
13
|
+
import { NSBoxBaseCombo, NSBoxCombo, NSButton, NSButtonBlue, NSColumn, NSDialog, NSNoData, NSTitle } from "namirasoft-site-react";
|
|
14
|
+
import { Component, Fragment } from "react";
|
|
15
|
+
import { NSAFilterOperators } from "../../NSAFilterOperators";
|
|
16
|
+
import Styles from "./NSAQuickFilterDialog.module.css";
|
|
17
|
+
export class NSAQuickFilterDialog extends Component {
|
|
18
|
+
constructor(props) {
|
|
19
|
+
super(props);
|
|
20
|
+
this.openAdd = () => {
|
|
21
|
+
this.setState(prev => ({
|
|
22
|
+
formMode: "add",
|
|
23
|
+
editingId: null,
|
|
24
|
+
formColumn: null,
|
|
25
|
+
formOperatorName: null,
|
|
26
|
+
formKey: prev.formKey + 1,
|
|
27
|
+
}));
|
|
28
|
+
};
|
|
29
|
+
this.openEdit = (config) => {
|
|
30
|
+
var _a;
|
|
31
|
+
const col = (_a = this.props.getColumns().find(c => c.table.name === config.column.table.name && c.name === config.column.name)) !== null && _a !== void 0 ? _a : null;
|
|
32
|
+
this.setState(prev => {
|
|
33
|
+
var _a;
|
|
34
|
+
return ({
|
|
35
|
+
formMode: "edit",
|
|
36
|
+
editingId: config.id,
|
|
37
|
+
formColumn: col,
|
|
38
|
+
formOperatorName: (_a = config.operatorName) !== null && _a !== void 0 ? _a : null,
|
|
39
|
+
formKey: prev.formKey + 1,
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
this.deleteConfig = (id) => {
|
|
44
|
+
this.setState(prev => ({ configs: prev.configs.filter(c => c.id !== id) }));
|
|
45
|
+
};
|
|
46
|
+
this.saveForm = () => {
|
|
47
|
+
const { formColumn, formOperatorName, formMode, editingId, configs } = this.state;
|
|
48
|
+
if (!formColumn)
|
|
49
|
+
return;
|
|
50
|
+
const columnType = this.props.typeConverter(formColumn.type);
|
|
51
|
+
const isBoolean = columnType === VariableType.Boolean;
|
|
52
|
+
const newConfig = {
|
|
53
|
+
id: formMode === "edit" && editingId ? editingId : crypto.randomUUID(),
|
|
54
|
+
column: {
|
|
55
|
+
table: { name: formColumn.table.name, text: formColumn.table.text },
|
|
56
|
+
name: formColumn.name,
|
|
57
|
+
text: formColumn.text,
|
|
58
|
+
type: formColumn.type,
|
|
59
|
+
columnType,
|
|
60
|
+
},
|
|
61
|
+
operatorName: isBoolean ? undefined : (formOperatorName !== null && formOperatorName !== void 0 ? formOperatorName : undefined),
|
|
62
|
+
};
|
|
63
|
+
const updatedConfigs = formMode === "edit" && editingId
|
|
64
|
+
? configs.map(c => c.id === editingId ? newConfig : c)
|
|
65
|
+
: [...configs, newConfig];
|
|
66
|
+
this.setState({ configs: updatedConfigs, formMode: null }, () => {
|
|
67
|
+
this.props.onSave(updatedConfigs);
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
this.state = {
|
|
71
|
+
configs: [...props.configs],
|
|
72
|
+
formMode: null,
|
|
73
|
+
editingId: null,
|
|
74
|
+
formColumn: null,
|
|
75
|
+
formOperatorName: null,
|
|
76
|
+
formKey: 0,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
hasChanges() {
|
|
80
|
+
return JSON.stringify(this.state.configs) !== JSON.stringify(this.props.configs);
|
|
81
|
+
}
|
|
82
|
+
render() {
|
|
83
|
+
const { onClose, onConfirm, getColumns, typeConverter } = this.props;
|
|
84
|
+
const { configs, formMode, formColumn, formOperatorName, formKey } = this.state;
|
|
85
|
+
const columns = getColumns();
|
|
86
|
+
const columnType = formColumn ? typeConverter(formColumn.type) : null;
|
|
87
|
+
const isBoolean = columnType === VariableType.Boolean;
|
|
88
|
+
const operators = columnType && !isBoolean ? NSAFilterOperators.getQuickFilterOperators(columnType) : [];
|
|
89
|
+
return (_jsx(NSDialog, { center_dialog: true, closeButton: { show: true }, onClose: onClose, children: _jsxs(NSColumn, { classList: ["align-items-center"], children: [_jsx(NSTitle, { title: "Quick Filters", style: { marginBottom: 0, fontSize: 24 } }), configs.length === 0 && !formMode &&
|
|
90
|
+
_jsx(NSNoData, { lable: "No quick filters defined", style: { marginBottom: 16, fontSize: 20 } }), configs.length > 0 && !formMode && (_jsx(NSColumn, { classList: ["gap-2"], children: configs.map(cfg => {
|
|
91
|
+
const opLabel = cfg.operatorName
|
|
92
|
+
? FilterItemOperator.getByName(cfg.operatorName).name
|
|
93
|
+
: "—";
|
|
94
|
+
return (_jsxs("div", { className: Styles.qf_item, children: [_jsxs("div", { className: Styles.qf_item_info, children: [_jsx("span", { className: Styles.qf_item_label, children: cfg.column.text }), _jsx("span", { className: Styles.qf_item_op, children: opLabel })] }), _jsxs("div", { className: Styles.qf_item_actions, children: [_jsx(NSButton, { title: "", icon: { src: "https://static.namirasoft.com/image/concept/edit/blue.svg", alt: "edit" }, classList: [Styles.qf_item_btn], onClick: { action: () => this.openEdit(cfg), showLoading: false } }), _jsx(NSButton, { title: "", icon: { src: "https://static.namirasoft.com/image/concept/delete/blue.svg", alt: "delete" }, classList: [Styles.qf_item_btn], onClick: { action: () => this.deleteConfig(cfg.id), showLoading: false } })] })] }, cfg.id));
|
|
95
|
+
}) })), formMode &&
|
|
96
|
+
_jsxs(Fragment, { children: [_jsx(NSBoxBaseCombo, { title: "Column", required: true, defaultValue: formColumn === null || formColumn === void 0 ? void 0 : formColumn.name, getItems: () => __awaiter(this, void 0, void 0, function* () { return ({ count: columns.length, rows: columns }); }), getTitle: c => c.text, getValue: c => c.name, getSort: () => null, multiple: false, onChanged: e => {
|
|
97
|
+
const col = e.getDataOne();
|
|
98
|
+
this.setState({ formColumn: col !== null && col !== void 0 ? col : null, formOperatorName: null });
|
|
99
|
+
}, menu: {
|
|
100
|
+
builtin: {
|
|
101
|
+
copy: { enabled: false, getValue: () => "" }
|
|
102
|
+
},
|
|
103
|
+
items: []
|
|
104
|
+
} }), _jsx(NSBoxCombo, { title: "Operator", required: true, disabled: !formColumn || isBoolean, defaultValue: formOperatorName !== null && formOperatorName !== void 0 ? formOperatorName : undefined, getOptions: () => operators.map(op => ({ value: NSAFilterOperators.getOperatorKey(op), title: `${op.sign} (${op.name})` })), multiple: false, searchable: false, onChanged: e => { var _a; return this.setState({ formOperatorName: (_a = e.getValueOne(false)) !== null && _a !== void 0 ? _a : null }); }, menu: {
|
|
105
|
+
builtin: {
|
|
106
|
+
copy: { enabled: false, getValue: () => "" }
|
|
107
|
+
},
|
|
108
|
+
items: []
|
|
109
|
+
} }, formColumn === null || formColumn === void 0 ? void 0 : formColumn.name), _jsx(NSButtonBlue, { title: "Save", onClick: { action: this.saveForm, showLoading: false } }), _jsx(NSButton, { title: "", icon: { src: "https://static.namirasoft.com/image/concept/arrow/left/blue.svg", alt: "back" }, classList: [Styles.qf_back_btn], onClick: { action: () => this.setState({ formMode: null }), showLoading: false }, style: { width: 40, height: 40 } })] }, formKey), !formMode &&
|
|
110
|
+
_jsxs(_Fragment, { children: [_jsx(NSButton, { title: "+ Add Filter", onClick: { action: this.openAdd, showLoading: false }, style: { border: "1px solid #000" } }), this.hasChanges() &&
|
|
111
|
+
_jsx(NSButtonBlue, { title: "Save Changes", onClick: { action: () => onConfirm(this.state.configs), showLoading: false } })] })] }) }));
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=NSAQuickFilterDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NSAQuickFilterDialog.js","sourceRoot":"","sources":["../../../src/components/NSAQuickFilter/NSAQuickFilterDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { TableColumnInfo } from "namirasoft-site-react";
|
|
2
|
+
import { Component } from "react";
|
|
3
|
+
interface ColumnItem {
|
|
4
|
+
key: string;
|
|
5
|
+
text: string;
|
|
6
|
+
checked: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface NSAReorderDialogProps {
|
|
9
|
+
visibleColumnKeys: string[];
|
|
10
|
+
getColumns: () => TableColumnInfo[];
|
|
11
|
+
onCancel: () => void;
|
|
12
|
+
onApply: (orderedKeys: string[]) => void;
|
|
13
|
+
}
|
|
14
|
+
interface NSAReorderDialogState {
|
|
15
|
+
columns: ColumnItem[];
|
|
16
|
+
dragFromIndex: number | null;
|
|
17
|
+
dragOverIndex: number | null;
|
|
18
|
+
}
|
|
19
|
+
export declare class NSAReorderDialog extends Component<NSAReorderDialogProps, NSAReorderDialogState> {
|
|
20
|
+
constructor(props: NSAReorderDialogProps);
|
|
21
|
+
private buildColumnItems;
|
|
22
|
+
private onDragStart;
|
|
23
|
+
private onDragOver;
|
|
24
|
+
private onDrop;
|
|
25
|
+
private onDragEnd;
|
|
26
|
+
private toggleChecked;
|
|
27
|
+
private handleApply;
|
|
28
|
+
render(): import("react").JSX.Element;
|
|
29
|
+
}
|
|
30
|
+
export {};
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { NSBox, NSButtonBlue, NSColumn, NSDialog, NSTitle } from "namirasoft-site-react";
|
|
3
|
+
import { Component } from "react";
|
|
4
|
+
import Styles from "./NSAReorderDialog.module.css";
|
|
5
|
+
export class NSAReorderDialog extends Component {
|
|
6
|
+
constructor(props) {
|
|
7
|
+
super(props);
|
|
8
|
+
this.onDragStart = (index) => this.setState({ dragFromIndex: index });
|
|
9
|
+
this.onDragOver = (e, index) => {
|
|
10
|
+
e.preventDefault();
|
|
11
|
+
if (this.state.dragOverIndex !== index)
|
|
12
|
+
this.setState({ dragOverIndex: index });
|
|
13
|
+
};
|
|
14
|
+
this.onDrop = (e, dropIndex) => {
|
|
15
|
+
e.preventDefault();
|
|
16
|
+
const { dragFromIndex, columns } = this.state;
|
|
17
|
+
if (dragFromIndex === null || dragFromIndex === dropIndex) {
|
|
18
|
+
this.setState({ dragFromIndex: null, dragOverIndex: null });
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const next = [...columns];
|
|
22
|
+
const [moved] = next.splice(dragFromIndex, 1);
|
|
23
|
+
next.splice(dropIndex, 0, moved);
|
|
24
|
+
this.setState({ columns: next, dragFromIndex: null, dragOverIndex: null });
|
|
25
|
+
};
|
|
26
|
+
this.onDragEnd = () => this.setState({ dragFromIndex: null, dragOverIndex: null });
|
|
27
|
+
this.toggleChecked = (key) => this.setState(prev => ({
|
|
28
|
+
columns: prev.columns.map(c => c.key === key ? Object.assign(Object.assign({}, c), { checked: !c.checked }) : c)
|
|
29
|
+
}));
|
|
30
|
+
this.handleApply = () => {
|
|
31
|
+
const orderedKeys = this.state.columns.filter(c => c.checked).map(c => c.key);
|
|
32
|
+
this.props.onApply(orderedKeys);
|
|
33
|
+
};
|
|
34
|
+
this.state = {
|
|
35
|
+
columns: this.buildColumnItems(props),
|
|
36
|
+
dragFromIndex: null,
|
|
37
|
+
dragOverIndex: null
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
buildColumnItems(props) {
|
|
41
|
+
const allColumns = props.getColumns();
|
|
42
|
+
const visibleKeys = props.visibleColumnKeys;
|
|
43
|
+
if (visibleKeys.length === 0)
|
|
44
|
+
return allColumns.map(c => ({ key: c.table.name + "." + c.name, text: c.text, checked: true }));
|
|
45
|
+
const visibleItems = visibleKeys
|
|
46
|
+
.map(k => allColumns.find(c => c.table.name + "." + c.name === k))
|
|
47
|
+
.filter(Boolean)
|
|
48
|
+
.map(c => ({ key: c.table.name + "." + c.name, text: c.text, checked: true }));
|
|
49
|
+
const hiddenItems = allColumns
|
|
50
|
+
.filter(c => !visibleKeys.includes(c.table.name + "." + c.name))
|
|
51
|
+
.map(c => ({ key: c.table.name + "." + c.name, text: c.text, checked: false }));
|
|
52
|
+
return [...visibleItems, ...hiddenItems];
|
|
53
|
+
}
|
|
54
|
+
render() {
|
|
55
|
+
const { onCancel } = this.props;
|
|
56
|
+
const { columns, dragFromIndex, dragOverIndex } = this.state;
|
|
57
|
+
return (_jsx(NSDialog, { center_dialog: true, closeButton: { show: true }, onClose: onCancel, style: { minWidth: NSBox.width.double }, children: _jsxs(NSColumn, { classList: ["align-items-center"], children: [_jsx(NSTitle, { title: "Columns", style: { marginBottom: 0, fontSize: 24 } }), _jsx(NSColumn, { classList: ["gap-1"], children: columns.map((col, index) => {
|
|
58
|
+
const isDragging = dragFromIndex === index;
|
|
59
|
+
const isDragOver = dragOverIndex === index && !isDragging;
|
|
60
|
+
let cls = Styles.column_item;
|
|
61
|
+
if (isDragging)
|
|
62
|
+
cls += " " + Styles.column_item_dragging;
|
|
63
|
+
if (isDragOver)
|
|
64
|
+
cls += " " + Styles.column_item_drag_over;
|
|
65
|
+
return (_jsxs("div", { draggable: true, onDragStart: () => this.onDragStart(index), onDragOver: e => this.onDragOver(e, index), onDrop: e => this.onDrop(e, index), onDragEnd: this.onDragEnd, className: cls, children: [_jsx("span", { className: Styles.drag_handle, children: "\u283F" }), _jsx("input", { type: "checkbox", checked: col.checked, onChange: () => this.toggleChecked(col.key), className: Styles.checkbox }), _jsx("span", { className: Styles.column_label, children: col.text })] }, col.key));
|
|
66
|
+
}) }), _jsx(NSButtonBlue, { title: "Apply", onClick: { action: this.handleApply, showLoading: false } })] }) }));
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=NSAReorderDialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NSAReorderDialog.js","sourceRoot":"","sources":["../../src/components/NSAReorderDialog.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
.column_item {
|
|
2
|
+
width: 100%;
|
|
3
|
+
display: flex;
|
|
4
|
+
align-items: center;
|
|
5
|
+
gap: 10px;
|
|
6
|
+
padding: 8px 12px;
|
|
7
|
+
border-radius: 6px;
|
|
8
|
+
border: 2px solid transparent;
|
|
9
|
+
background-color: rgba(20, 27, 92, 0.04);
|
|
10
|
+
cursor: grab;
|
|
11
|
+
user-select: none;
|
|
12
|
+
box-sizing: border-box;
|
|
13
|
+
transition: background-color 0.1s, border-color 0.1s;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.column_item:hover {
|
|
17
|
+
background-color: rgba(20, 27, 92, 0.08);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
.column_item_dragging {
|
|
21
|
+
opacity: 0.35;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.column_item_drag_over {
|
|
25
|
+
border-color: rgba(20, 27, 92, 0.45);
|
|
26
|
+
border-style: dashed;
|
|
27
|
+
background-color: rgba(20, 27, 92, 0.1);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.drag_handle {
|
|
31
|
+
color: #bbb;
|
|
32
|
+
font-size: 20px;
|
|
33
|
+
line-height: 1;
|
|
34
|
+
cursor: grab;
|
|
35
|
+
flex-shrink: 0;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.checkbox {
|
|
39
|
+
width: 18px;
|
|
40
|
+
height: 18px;
|
|
41
|
+
cursor: pointer;
|
|
42
|
+
margin: 0;
|
|
43
|
+
flex-shrink: 0;
|
|
44
|
+
accent-color: rgba(20, 27, 92, 1);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.column_label {
|
|
48
|
+
font-size: 14px;
|
|
49
|
+
flex: 1;
|
|
50
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SortItem } from "namirasoft-core";
|
|
2
|
+
import { TableColumnInfo } from "namirasoft-site-react";
|
|
3
|
+
import { Component } from "react";
|
|
4
|
+
interface NSASortDialogProps {
|
|
5
|
+
sorts: SortItem[];
|
|
6
|
+
getColumns: () => TableColumnInfo[];
|
|
7
|
+
onCancel: () => void;
|
|
8
|
+
onApply: (sorts: SortItem[] | null) => void;
|
|
9
|
+
}
|
|
10
|
+
interface NSASortDialogState {
|
|
11
|
+
sortEnabled: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare class NSASortDialog extends Component<NSASortDialogProps, NSASortDialogState> {
|
|
14
|
+
private sortBoolRef;
|
|
15
|
+
private sortColumnRef;
|
|
16
|
+
private sortDirectionRef;
|
|
17
|
+
constructor(props: NSASortDialogProps);
|
|
18
|
+
private handleApply;
|
|
19
|
+
render(): import("react").JSX.Element;
|
|
20
|
+
}
|
|
21
|
+
export {};
|