namirasoft-account-react 1.4.430 → 1.4.431
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/.env.template +15 -15
- package/SKILLS.md +514 -514
- package/config-overrides.js +72 -72
- package/dist/App.css +32 -0
- package/dist/App.d.ts +1 -1
- package/dist/UseParams.d.ts +1 -1
- package/dist/components/NSAAccessListDialog.d.ts +2 -2
- package/dist/components/NSAAccessListDialog.module.css +71 -71
- package/dist/components/NSAMasterMenu.d.ts +1 -1
- package/dist/components/NSAMasterMenu.module.css +248 -248
- package/dist/components/NSAMasterMenuItem.d.ts +1 -1
- package/dist/components/NSAMessageListDialog.d.ts +1 -1
- package/dist/components/NSAMessageListDialog.module.css +99 -99
- package/dist/components/NSAProductListDialog.d.ts +1 -1
- package/dist/components/NSAProductListDialog.module.css +44 -44
- package/dist/components/NSAReorderDialog.d.ts +1 -1
- package/dist/components/NSAReorderDialog.module.css +49 -49
- package/dist/components/NSASortDialog.d.ts +1 -1
- package/dist/components/NSAUserDialog.d.ts +1 -1
- package/dist/components/NSAUserDialog.module.css +67 -67
- package/dist/components/NSAWorkspaceListDialog.d.ts +1 -1
- package/dist/components/NSAWorkspaceListDialog.module.css +41 -41
- package/dist/components/NSBoxSecret.d.ts +1 -1
- package/dist/components/NSBoxSecret.module.css +23 -23
- package/dist/components/NSLabelSecret.d.ts +1 -1
- package/dist/components/quickfilter/NSAFilterBoxEnum.module.css +45 -0
- package/dist/components/quickfilter/NSAQuickFilterBar.d.ts +1 -1
- package/dist/components/quickfilter/NSAQuickFilterBar.module.css +20 -0
- package/dist/components/quickfilter/NSAQuickFilterDialog.d.ts +1 -1
- package/dist/components/quickfilter/NSAQuickFilterDialog.module.css +75 -0
- package/dist/index.css +0 -0
- package/dist/layouts/NSALayout.d.ts +1 -1
- package/dist/layouts/NSASectionEdit.d.ts +1 -1
- package/dist/layouts/NSASectionEditTabPage.d.ts +1 -1
- package/dist/layouts/NSASectionEditTabPage.module.css +4 -4
- package/dist/layouts/NSASectionList.d.ts +1 -1
- package/dist/layouts/NSASectionList.module.css +31 -31
- package/dist/layouts/NSASectionView.d.ts +1 -1
- package/dist/layouts/NSASectionViewTabMore.d.ts +1 -1
- package/dist/layouts/NSASectionViewTabPage.d.ts +1 -1
- package/dist/layouts/NSASectionViewTabPage.module.css +47 -47
- package/dist/pages/NSAConsentPage.module.css +26 -26
- package/dist/pages/NSAEmailVerificationPage.d.ts +1 -1
- package/dist/pages/NSAHomePage.d.ts +1 -1
- package/dist/pages/NSAHomePage.module.css +41 -41
- package/dist/pages/NSALoginPage.d.ts +1 -1
- package/dist/pages/NSALoginPage.module.css +26 -26
- package/dist/pages/NSAPhoneVerificationPage.d.ts +1 -1
- package/dist/pages/NSAVerificationPage.d.ts +1 -1
- package/dist/pages/NSAVerificationPage.module.css +31 -31
- package/package.json +94 -94
- package/public/index.html +21 -21
- package/src/App.css +31 -31
- package/src/App.tsx +19 -19
- package/src/CTFRow.ts +7 -7
- package/src/IEntityInfo.ts +33 -33
- package/src/NSACacheService.ts +120 -120
- package/src/NSAFilterOperators.ts +92 -92
- package/src/NSARouterMaker.tsx +139 -139
- package/src/NSARouterMakerConfig.ts +15 -15
- package/src/NSARouterMakerProps.ts +22 -22
- package/src/Router.tsx +45 -45
- package/src/UseParams.tsx +18 -18
- package/src/components/NSAAccessListDialog.module.css +71 -71
- package/src/components/NSAAccessListDialog.tsx +178 -178
- package/src/components/NSAMasterMenu.module.css +248 -248
- package/src/components/NSAMasterMenu.tsx +169 -169
- package/src/components/NSAMasterMenuItem.tsx +250 -250
- package/src/components/NSAMessageListDialog.module.css +99 -99
- package/src/components/NSAMessageListDialog.tsx +141 -141
- package/src/components/NSAProductListDialog.module.css +44 -44
- package/src/components/NSAProductListDialog.tsx +88 -88
- package/src/components/NSAReorderDialog.module.css +49 -49
- package/src/components/NSAReorderDialog.tsx +149 -149
- package/src/components/NSASortDialog.tsx +117 -117
- package/src/components/NSATable.tsx +489 -489
- package/src/components/NSAUserDialog.module.css +67 -67
- package/src/components/NSAUserDialog.tsx +122 -122
- package/src/components/NSAWorkspaceListDialog.module.css +41 -41
- package/src/components/NSAWorkspaceListDialog.tsx +147 -147
- package/src/components/NSBoxSecret.module.css +23 -23
- package/src/components/NSBoxSecret.tsx +258 -258
- package/src/components/NSLabelSecret.tsx +37 -37
- package/src/components/quickfilter/NSAFilterBoxBase.tsx +55 -55
- package/src/components/quickfilter/NSAFilterBoxBoolean.tsx +54 -54
- package/src/components/quickfilter/NSAFilterBoxDate.tsx +104 -104
- package/src/components/quickfilter/NSAFilterBoxDateTime.tsx +105 -105
- package/src/components/quickfilter/NSAFilterBoxEnum.module.css +44 -44
- package/src/components/quickfilter/NSAFilterBoxEnum.tsx +79 -79
- package/src/components/quickfilter/NSAFilterBoxNumber.tsx +136 -136
- package/src/components/quickfilter/NSAFilterBoxString.tsx +81 -81
- package/src/components/quickfilter/NSAFilterBoxTime.tsx +101 -101
- package/src/components/quickfilter/NSAQuickFilterBar.module.css +19 -19
- package/src/components/quickfilter/NSAQuickFilterBar.tsx +114 -114
- package/src/components/quickfilter/NSAQuickFilterDialog.module.css +74 -74
- package/src/components/quickfilter/NSAQuickFilterDialog.tsx +260 -260
- package/src/css.d.ts +13 -13
- package/src/formatters/SecretFormatter.tsx +24 -24
- package/src/index.tsx +24 -24
- package/src/layouts/Actions.ts +145 -145
- package/src/layouts/CFTUtil.ts +18 -18
- package/src/layouts/NSALayout.tsx +841 -841
- package/src/layouts/NSASectionEdit.tsx +260 -260
- package/src/layouts/NSASectionEditTabPage.module.css +4 -4
- package/src/layouts/NSASectionEditTabPage.tsx +250 -250
- package/src/layouts/NSASectionList.module.css +31 -31
- package/src/layouts/NSASectionList.tsx +149 -149
- package/src/layouts/NSASectionView.tsx +100 -100
- package/src/layouts/NSASectionViewTabMore.tsx +77 -77
- package/src/layouts/NSASectionViewTabPage.module.css +47 -47
- package/src/layouts/NSASectionViewTabPage.tsx +419 -419
- package/src/main.ts +46 -46
- package/src/pages/NSAConsentPage.module.css +26 -26
- package/src/pages/NSAConsentPage.tsx +120 -120
- package/src/pages/NSAEmailVerificationPage.tsx +30 -30
- package/src/pages/NSAHomePage.module.css +41 -41
- package/src/pages/NSAHomePage.tsx +102 -102
- package/src/pages/NSALoginPage.module.css +26 -26
- package/src/pages/NSALoginPage.tsx +87 -87
- package/src/pages/NSAPhoneVerificationPage.tsx +94 -94
- package/src/pages/NSAVerificationPage.module.css +31 -31
- package/src/pages/NSAVerificationPage.tsx +186 -186
- package/src/pages/PaymentRequired.tsx +74 -74
- package/tsconfig.json +43 -43
|
@@ -1,56 +1,56 @@
|
|
|
1
|
-
import { Component } from "react";
|
|
2
|
-
import { BaseMetaColumn, BaseMetaTable, FilterItem, FilterItemOperator } from "namirasoft-core";
|
|
3
|
-
import { QuickFilterConfig } from "./NSAQuickFilterDialog";
|
|
4
|
-
|
|
5
|
-
export interface NSAFilterBoxBaseProps
|
|
6
|
-
{
|
|
7
|
-
config: QuickFilterConfig;
|
|
8
|
-
onChanged: (items: FilterItem | FilterItem[] | null) => void;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export abstract class NSAFilterBoxBase<P extends NSAFilterBoxBaseProps = NSAFilterBoxBaseProps, S = {}>
|
|
12
|
-
extends Component<P, S>
|
|
13
|
-
{
|
|
14
|
-
private static readonly NOT_OPERATOR_MAP: Record<string, string> = {
|
|
15
|
-
notequals: "equals",
|
|
16
|
-
notcontains: "contains",
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
private buildMeta()
|
|
20
|
-
{
|
|
21
|
-
const { config } = this.props;
|
|
22
|
-
const table = new BaseMetaTable(null, config.column.table.name, config.column.table.text);
|
|
23
|
-
const column = new BaseMetaColumn(table, config.column.name, config.column.text, config.column.type, false);
|
|
24
|
-
return { table, column };
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
protected buildFilterItem(...values: string[]): FilterItem
|
|
28
|
-
{
|
|
29
|
-
const { table, column } = this.buildMeta();
|
|
30
|
-
const key = this.props.config.operatorName ?? "";
|
|
31
|
-
const isNot = key in NSAFilterBoxBase.NOT_OPERATOR_MAP;
|
|
32
|
-
const resolvedKey = isNot ? NSAFilterBoxBase.NOT_OPERATOR_MAP[key] : key;
|
|
33
|
-
const operator = resolvedKey
|
|
34
|
-
? FilterItemOperator.getByName(resolvedKey)
|
|
35
|
-
: FilterItemOperator.all.equals;
|
|
36
|
-
return new FilterItem(table, column, isNot, operator, ...values);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
protected buildBetweenFilterItems(from: string, to: string): FilterItem[]
|
|
40
|
-
{
|
|
41
|
-
const { table, column } = this.buildMeta();
|
|
42
|
-
return [
|
|
43
|
-
new FilterItem(table, column, false, FilterItemOperator.all.morethanequal, from),
|
|
44
|
-
new FilterItem(table, column, false, FilterItemOperator.all.lessthanequal, to),
|
|
45
|
-
];
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
protected getLabel(): string
|
|
49
|
-
{
|
|
50
|
-
const { config } = this.props;
|
|
51
|
-
if (!config.operatorName)
|
|
52
|
-
return config.column.text;
|
|
53
|
-
const sign = FilterItemOperator.getByName(config.operatorName).sign;
|
|
54
|
-
return `${config.column.text} ${sign}`;
|
|
55
|
-
}
|
|
1
|
+
import { Component } from "react";
|
|
2
|
+
import { BaseMetaColumn, BaseMetaTable, FilterItem, FilterItemOperator } from "namirasoft-core";
|
|
3
|
+
import { QuickFilterConfig } from "./NSAQuickFilterDialog";
|
|
4
|
+
|
|
5
|
+
export interface NSAFilterBoxBaseProps
|
|
6
|
+
{
|
|
7
|
+
config: QuickFilterConfig;
|
|
8
|
+
onChanged: (items: FilterItem | FilterItem[] | null) => void;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export abstract class NSAFilterBoxBase<P extends NSAFilterBoxBaseProps = NSAFilterBoxBaseProps, S = {}>
|
|
12
|
+
extends Component<P, S>
|
|
13
|
+
{
|
|
14
|
+
private static readonly NOT_OPERATOR_MAP: Record<string, string> = {
|
|
15
|
+
notequals: "equals",
|
|
16
|
+
notcontains: "contains",
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
private buildMeta()
|
|
20
|
+
{
|
|
21
|
+
const { config } = this.props;
|
|
22
|
+
const table = new BaseMetaTable(null, config.column.table.name, config.column.table.text);
|
|
23
|
+
const column = new BaseMetaColumn(table, config.column.name, config.column.text, config.column.type, false);
|
|
24
|
+
return { table, column };
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
protected buildFilterItem(...values: string[]): FilterItem
|
|
28
|
+
{
|
|
29
|
+
const { table, column } = this.buildMeta();
|
|
30
|
+
const key = this.props.config.operatorName ?? "";
|
|
31
|
+
const isNot = key in NSAFilterBoxBase.NOT_OPERATOR_MAP;
|
|
32
|
+
const resolvedKey = isNot ? NSAFilterBoxBase.NOT_OPERATOR_MAP[key] : key;
|
|
33
|
+
const operator = resolvedKey
|
|
34
|
+
? FilterItemOperator.getByName(resolvedKey)
|
|
35
|
+
: FilterItemOperator.all.equals;
|
|
36
|
+
return new FilterItem(table, column, isNot, operator, ...values);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
protected buildBetweenFilterItems(from: string, to: string): FilterItem[]
|
|
40
|
+
{
|
|
41
|
+
const { table, column } = this.buildMeta();
|
|
42
|
+
return [
|
|
43
|
+
new FilterItem(table, column, false, FilterItemOperator.all.morethanequal, from),
|
|
44
|
+
new FilterItem(table, column, false, FilterItemOperator.all.lessthanequal, to),
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
protected getLabel(): string
|
|
49
|
+
{
|
|
50
|
+
const { config } = this.props;
|
|
51
|
+
if (!config.operatorName)
|
|
52
|
+
return config.column.text;
|
|
53
|
+
const sign = FilterItemOperator.getByName(config.operatorName).sign;
|
|
54
|
+
return `${config.column.text} ${sign}`;
|
|
55
|
+
}
|
|
56
56
|
}
|
|
@@ -1,55 +1,55 @@
|
|
|
1
|
-
import { FilterItemOperator } from "namirasoft-core";
|
|
2
|
-
import { NSBoxBoolean } from "namirasoft-site-react";
|
|
3
|
-
import { createRef } from "react";
|
|
4
|
-
import { NSAFilterBoxBase, NSAFilterBoxBaseProps } from "./NSAFilterBoxBase";
|
|
5
|
-
|
|
6
|
-
interface NSAFilterBoxBooleanState
|
|
7
|
-
{
|
|
8
|
-
value: boolean | null;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export class NSAFilterBoxBoolean extends NSAFilterBoxBase<NSAFilterBoxBaseProps, NSAFilterBoxBooleanState>
|
|
12
|
-
{
|
|
13
|
-
private containerRef = createRef<HTMLDivElement>();
|
|
14
|
-
|
|
15
|
-
constructor(props: NSAFilterBoxBaseProps)
|
|
16
|
-
{
|
|
17
|
-
super(props);
|
|
18
|
-
this.state = { value: this.isValueless() ? false : null };
|
|
19
|
-
this.handleChange = this.handleChange.bind(this);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
private isValueless(): boolean
|
|
23
|
-
{
|
|
24
|
-
const name = this.props.config.operatorName;
|
|
25
|
-
return !!name && FilterItemOperator.getByName(name).count === 0;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
private handleChange(value: boolean | null)
|
|
30
|
-
{
|
|
31
|
-
this.setState({ value });
|
|
32
|
-
if (this.isValueless())
|
|
33
|
-
this.props.onChanged(value === true ? this.buildFilterItem() : null);
|
|
34
|
-
else if (value !== null)
|
|
35
|
-
this.props.onChanged(this.buildFilterItem(String(Number(value))));
|
|
36
|
-
else
|
|
37
|
-
this.props.onChanged(null);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
override render(): JSX.Element
|
|
41
|
-
{
|
|
42
|
-
return (
|
|
43
|
-
<div ref={this.containerRef} style={{ width: "100%" }}>
|
|
44
|
-
<NSBoxBoolean
|
|
45
|
-
title={this.getLabel()}
|
|
46
|
-
placeholder={this.getLabel()}
|
|
47
|
-
required={false}
|
|
48
|
-
hideHeader={true}
|
|
49
|
-
triState={!this.isValueless()}
|
|
50
|
-
onChanged={e => this.handleChange(e.getValue())}
|
|
51
|
-
/>
|
|
52
|
-
</div>
|
|
53
|
-
);
|
|
54
|
-
}
|
|
1
|
+
import { FilterItemOperator } from "namirasoft-core";
|
|
2
|
+
import { NSBoxBoolean } from "namirasoft-site-react";
|
|
3
|
+
import { createRef } from "react";
|
|
4
|
+
import { NSAFilterBoxBase, NSAFilterBoxBaseProps } from "./NSAFilterBoxBase";
|
|
5
|
+
|
|
6
|
+
interface NSAFilterBoxBooleanState
|
|
7
|
+
{
|
|
8
|
+
value: boolean | null;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export class NSAFilterBoxBoolean extends NSAFilterBoxBase<NSAFilterBoxBaseProps, NSAFilterBoxBooleanState>
|
|
12
|
+
{
|
|
13
|
+
private containerRef = createRef<HTMLDivElement>();
|
|
14
|
+
|
|
15
|
+
constructor(props: NSAFilterBoxBaseProps)
|
|
16
|
+
{
|
|
17
|
+
super(props);
|
|
18
|
+
this.state = { value: this.isValueless() ? false : null };
|
|
19
|
+
this.handleChange = this.handleChange.bind(this);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
private isValueless(): boolean
|
|
23
|
+
{
|
|
24
|
+
const name = this.props.config.operatorName;
|
|
25
|
+
return !!name && FilterItemOperator.getByName(name).count === 0;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
private handleChange(value: boolean | null)
|
|
30
|
+
{
|
|
31
|
+
this.setState({ value });
|
|
32
|
+
if (this.isValueless())
|
|
33
|
+
this.props.onChanged(value === true ? this.buildFilterItem() : null);
|
|
34
|
+
else if (value !== null)
|
|
35
|
+
this.props.onChanged(this.buildFilterItem(String(Number(value))));
|
|
36
|
+
else
|
|
37
|
+
this.props.onChanged(null);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
override render(): JSX.Element
|
|
41
|
+
{
|
|
42
|
+
return (
|
|
43
|
+
<div ref={this.containerRef} style={{ width: "100%" }}>
|
|
44
|
+
<NSBoxBoolean
|
|
45
|
+
title={this.getLabel()}
|
|
46
|
+
placeholder={this.getLabel()}
|
|
47
|
+
required={false}
|
|
48
|
+
hideHeader={true}
|
|
49
|
+
triState={!this.isValueless()}
|
|
50
|
+
onChanged={e => this.handleChange(e.getValue())}
|
|
51
|
+
/>
|
|
52
|
+
</div>
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
55
|
}
|
|
@@ -1,105 +1,105 @@
|
|
|
1
|
-
import { FilterItem, FilterItemOperator, SortItem, TimeOperation } from "namirasoft-core";
|
|
2
|
-
import { NSBoxDate, NSBoxDateRange, NSBoxEntity } from "namirasoft-site-react";
|
|
3
|
-
import { NSAFilterBoxBase, NSAFilterBoxBaseProps } from "./NSAFilterBoxBase";
|
|
4
|
-
import { NSAFilterBoxBoolean } from "./NSAFilterBoxBoolean";
|
|
5
|
-
|
|
6
|
-
export interface NSAFilterBoxDateProps extends NSAFilterBoxBaseProps
|
|
7
|
-
{
|
|
8
|
-
getValues: (search: string) => Promise<{ value: string; title: string }[]>;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
type ValueItem = { value: string; title: string };
|
|
12
|
-
|
|
13
|
-
const ENTITY_OPERATORS = ["equals"];
|
|
14
|
-
|
|
15
|
-
export class NSAFilterBoxDate extends NSAFilterBoxBase<NSAFilterBoxDateProps>
|
|
16
|
-
{
|
|
17
|
-
private betweenActive = false;
|
|
18
|
-
|
|
19
|
-
private list = async (
|
|
20
|
-
filters: FilterItem[] | null,
|
|
21
|
-
_page: number | null,
|
|
22
|
-
_size: number | null,
|
|
23
|
-
_sorts: SortItem[]
|
|
24
|
-
): Promise<{ count: number; rows: ValueItem[] }> =>
|
|
25
|
-
{
|
|
26
|
-
const searchFilter = filters?.find(f => f.values.length > 0);
|
|
27
|
-
const search = searchFilter?.values[0] ?? "";
|
|
28
|
-
const rows = await this.props.getValues(search);
|
|
29
|
-
return { count: rows.length, rows };
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
override render(): JSX.Element | null
|
|
33
|
-
{
|
|
34
|
-
const { config, onChanged } = this.props;
|
|
35
|
-
const op = config.operatorName
|
|
36
|
-
? FilterItemOperator.getByName(config.operatorName)
|
|
37
|
-
: null;
|
|
38
|
-
|
|
39
|
-
if (op && op.count === 0)
|
|
40
|
-
return <NSAFilterBoxBoolean config={config} onChanged={onChanged} />;
|
|
41
|
-
|
|
42
|
-
if (config.operatorName === "between")
|
|
43
|
-
return (
|
|
44
|
-
<NSBoxDateRange
|
|
45
|
-
title={this.getLabel()}
|
|
46
|
-
placeholder={this.getLabel()}
|
|
47
|
-
required={false}
|
|
48
|
-
hideHeader={true}
|
|
49
|
-
preset={true}
|
|
50
|
-
onChanged={e =>
|
|
51
|
-
{
|
|
52
|
-
const val = e.getValue();
|
|
53
|
-
if (val)
|
|
54
|
-
{
|
|
55
|
-
this.betweenActive = true;
|
|
56
|
-
onChanged(this.buildBetweenFilterItems(
|
|
57
|
-
TimeOperation.toDBFormat(val.from),
|
|
58
|
-
TimeOperation.toDBFormat(val.to)
|
|
59
|
-
));
|
|
60
|
-
}
|
|
61
|
-
else if (this.betweenActive)
|
|
62
|
-
{
|
|
63
|
-
this.betweenActive = false;
|
|
64
|
-
onChanged(null);
|
|
65
|
-
}
|
|
66
|
-
}}
|
|
67
|
-
/>
|
|
68
|
-
);
|
|
69
|
-
|
|
70
|
-
if (config.operatorName && ENTITY_OPERATORS.includes(config.operatorName))
|
|
71
|
-
return (
|
|
72
|
-
<NSBoxEntity<ValueItem>
|
|
73
|
-
title={this.getLabel()}
|
|
74
|
-
placeholder={this.getLabel()}
|
|
75
|
-
required={false}
|
|
76
|
-
hideHeader={true}
|
|
77
|
-
multiple={false}
|
|
78
|
-
list={this.list}
|
|
79
|
-
table_name={config.column.table.name}
|
|
80
|
-
getValue={item => item.value}
|
|
81
|
-
getTitle={item => item.title}
|
|
82
|
-
getSort={() => null}
|
|
83
|
-
onChanged={e =>
|
|
84
|
-
{
|
|
85
|
-
const val = e.getValueOne();
|
|
86
|
-
onChanged(val ? this.buildFilterItem(val) : null);
|
|
87
|
-
}}
|
|
88
|
-
/>
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
return (
|
|
92
|
-
<NSBoxDate
|
|
93
|
-
title={this.getLabel()}
|
|
94
|
-
placeholder={this.getLabel()}
|
|
95
|
-
required={false}
|
|
96
|
-
hideHeader={true}
|
|
97
|
-
onChanged={e =>
|
|
98
|
-
{
|
|
99
|
-
const val = e.getValue();
|
|
100
|
-
onChanged(val ? this.buildFilterItem(TimeOperation.toDBFormat(val)) : null);
|
|
101
|
-
}}
|
|
102
|
-
/>
|
|
103
|
-
);
|
|
104
|
-
}
|
|
1
|
+
import { FilterItem, FilterItemOperator, SortItem, TimeOperation } from "namirasoft-core";
|
|
2
|
+
import { NSBoxDate, NSBoxDateRange, NSBoxEntity } from "namirasoft-site-react";
|
|
3
|
+
import { NSAFilterBoxBase, NSAFilterBoxBaseProps } from "./NSAFilterBoxBase";
|
|
4
|
+
import { NSAFilterBoxBoolean } from "./NSAFilterBoxBoolean";
|
|
5
|
+
|
|
6
|
+
export interface NSAFilterBoxDateProps extends NSAFilterBoxBaseProps
|
|
7
|
+
{
|
|
8
|
+
getValues: (search: string) => Promise<{ value: string; title: string }[]>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
type ValueItem = { value: string; title: string };
|
|
12
|
+
|
|
13
|
+
const ENTITY_OPERATORS = ["equals"];
|
|
14
|
+
|
|
15
|
+
export class NSAFilterBoxDate extends NSAFilterBoxBase<NSAFilterBoxDateProps>
|
|
16
|
+
{
|
|
17
|
+
private betweenActive = false;
|
|
18
|
+
|
|
19
|
+
private list = async (
|
|
20
|
+
filters: FilterItem[] | null,
|
|
21
|
+
_page: number | null,
|
|
22
|
+
_size: number | null,
|
|
23
|
+
_sorts: SortItem[]
|
|
24
|
+
): Promise<{ count: number; rows: ValueItem[] }> =>
|
|
25
|
+
{
|
|
26
|
+
const searchFilter = filters?.find(f => f.values.length > 0);
|
|
27
|
+
const search = searchFilter?.values[0] ?? "";
|
|
28
|
+
const rows = await this.props.getValues(search);
|
|
29
|
+
return { count: rows.length, rows };
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
override render(): JSX.Element | null
|
|
33
|
+
{
|
|
34
|
+
const { config, onChanged } = this.props;
|
|
35
|
+
const op = config.operatorName
|
|
36
|
+
? FilterItemOperator.getByName(config.operatorName)
|
|
37
|
+
: null;
|
|
38
|
+
|
|
39
|
+
if (op && op.count === 0)
|
|
40
|
+
return <NSAFilterBoxBoolean config={config} onChanged={onChanged} />;
|
|
41
|
+
|
|
42
|
+
if (config.operatorName === "between")
|
|
43
|
+
return (
|
|
44
|
+
<NSBoxDateRange
|
|
45
|
+
title={this.getLabel()}
|
|
46
|
+
placeholder={this.getLabel()}
|
|
47
|
+
required={false}
|
|
48
|
+
hideHeader={true}
|
|
49
|
+
preset={true}
|
|
50
|
+
onChanged={e =>
|
|
51
|
+
{
|
|
52
|
+
const val = e.getValue();
|
|
53
|
+
if (val)
|
|
54
|
+
{
|
|
55
|
+
this.betweenActive = true;
|
|
56
|
+
onChanged(this.buildBetweenFilterItems(
|
|
57
|
+
TimeOperation.toDBFormat(val.from),
|
|
58
|
+
TimeOperation.toDBFormat(val.to)
|
|
59
|
+
));
|
|
60
|
+
}
|
|
61
|
+
else if (this.betweenActive)
|
|
62
|
+
{
|
|
63
|
+
this.betweenActive = false;
|
|
64
|
+
onChanged(null);
|
|
65
|
+
}
|
|
66
|
+
}}
|
|
67
|
+
/>
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
if (config.operatorName && ENTITY_OPERATORS.includes(config.operatorName))
|
|
71
|
+
return (
|
|
72
|
+
<NSBoxEntity<ValueItem>
|
|
73
|
+
title={this.getLabel()}
|
|
74
|
+
placeholder={this.getLabel()}
|
|
75
|
+
required={false}
|
|
76
|
+
hideHeader={true}
|
|
77
|
+
multiple={false}
|
|
78
|
+
list={this.list}
|
|
79
|
+
table_name={config.column.table.name}
|
|
80
|
+
getValue={item => item.value}
|
|
81
|
+
getTitle={item => item.title}
|
|
82
|
+
getSort={() => null}
|
|
83
|
+
onChanged={e =>
|
|
84
|
+
{
|
|
85
|
+
const val = e.getValueOne();
|
|
86
|
+
onChanged(val ? this.buildFilterItem(val) : null);
|
|
87
|
+
}}
|
|
88
|
+
/>
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
return (
|
|
92
|
+
<NSBoxDate
|
|
93
|
+
title={this.getLabel()}
|
|
94
|
+
placeholder={this.getLabel()}
|
|
95
|
+
required={false}
|
|
96
|
+
hideHeader={true}
|
|
97
|
+
onChanged={e =>
|
|
98
|
+
{
|
|
99
|
+
const val = e.getValue();
|
|
100
|
+
onChanged(val ? this.buildFilterItem(TimeOperation.toDBFormat(val)) : null);
|
|
101
|
+
}}
|
|
102
|
+
/>
|
|
103
|
+
);
|
|
104
|
+
}
|
|
105
105
|
}
|
|
@@ -1,106 +1,106 @@
|
|
|
1
|
-
import { FilterItem, FilterItemOperator, SortItem, TimeOperation } from "namirasoft-core";
|
|
2
|
-
import { NSBoxDateTime, NSBoxDateTimeRange, NSBoxEntity } from "namirasoft-site-react";
|
|
3
|
-
import { NSAFilterBoxBase, NSAFilterBoxBaseProps } from "./NSAFilterBoxBase";
|
|
4
|
-
import { NSAFilterBoxBoolean } from "./NSAFilterBoxBoolean";
|
|
5
|
-
|
|
6
|
-
export interface NSAFilterBoxDateTimeProps extends NSAFilterBoxBaseProps
|
|
7
|
-
{
|
|
8
|
-
getValues: (search: string) => Promise<{ value: string; title: string }[]>;
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
type ValueItem = { value: string; title: string };
|
|
12
|
-
|
|
13
|
-
const ENTITY_OPERATORS = ["equals"];
|
|
14
|
-
|
|
15
|
-
export class NSAFilterBoxDateTime extends NSAFilterBoxBase<NSAFilterBoxDateTimeProps>
|
|
16
|
-
{
|
|
17
|
-
private betweenActive = false;
|
|
18
|
-
|
|
19
|
-
private list = async (
|
|
20
|
-
filters: FilterItem[] | null,
|
|
21
|
-
_page: number | null,
|
|
22
|
-
_size: number | null,
|
|
23
|
-
_sorts: SortItem[]
|
|
24
|
-
): Promise<{ count: number; rows: ValueItem[] }> =>
|
|
25
|
-
{
|
|
26
|
-
const searchFilter = filters?.find(f => f.values.length > 0);
|
|
27
|
-
const search = searchFilter?.values[0] ?? "";
|
|
28
|
-
const rows = await this.props.getValues(search);
|
|
29
|
-
return { count: rows.length, rows };
|
|
30
|
-
};
|
|
31
|
-
|
|
32
|
-
override render(): JSX.Element | null
|
|
33
|
-
{
|
|
34
|
-
const { config, onChanged } = this.props;
|
|
35
|
-
const op = config.operatorName
|
|
36
|
-
? FilterItemOperator.getByName(config.operatorName)
|
|
37
|
-
: null;
|
|
38
|
-
|
|
39
|
-
if (op && op.count === 0)
|
|
40
|
-
return <NSAFilterBoxBoolean config={config} onChanged={onChanged} />;
|
|
41
|
-
|
|
42
|
-
if (config.operatorName === "between")
|
|
43
|
-
return (
|
|
44
|
-
<NSBoxDateTimeRange
|
|
45
|
-
title={this.getLabel()}
|
|
46
|
-
placeholder={this.getLabel()}
|
|
47
|
-
required={false}
|
|
48
|
-
hideHeader={true}
|
|
49
|
-
preset={true}
|
|
50
|
-
onChanged={e =>
|
|
51
|
-
{
|
|
52
|
-
const val = e.getValue();
|
|
53
|
-
if (val)
|
|
54
|
-
{
|
|
55
|
-
this.betweenActive = true;
|
|
56
|
-
onChanged(this.buildBetweenFilterItems(
|
|
57
|
-
TimeOperation.toDBFormat(val.from),
|
|
58
|
-
TimeOperation.toDBFormat(val.to)
|
|
59
|
-
));
|
|
60
|
-
}
|
|
61
|
-
else if (this.betweenActive)
|
|
62
|
-
{
|
|
63
|
-
this.betweenActive = false;
|
|
64
|
-
onChanged(null);
|
|
65
|
-
}
|
|
66
|
-
}}
|
|
67
|
-
/>
|
|
68
|
-
);
|
|
69
|
-
|
|
70
|
-
if (config.operatorName && ENTITY_OPERATORS.includes(config.operatorName))
|
|
71
|
-
return (
|
|
72
|
-
<NSBoxEntity<ValueItem>
|
|
73
|
-
title={this.getLabel()}
|
|
74
|
-
placeholder={this.getLabel()}
|
|
75
|
-
required={false}
|
|
76
|
-
hideHeader={true}
|
|
77
|
-
multiple={false}
|
|
78
|
-
list={this.list}
|
|
79
|
-
table_name={config.column.table.name}
|
|
80
|
-
getValue={item => item.value}
|
|
81
|
-
getTitle={item => item.title}
|
|
82
|
-
getSort={() => null}
|
|
83
|
-
onChanged={e =>
|
|
84
|
-
{
|
|
85
|
-
const val = e.getValueOne();
|
|
86
|
-
onChanged(val ? this.buildFilterItem(val) : null);
|
|
87
|
-
}}
|
|
88
|
-
/>
|
|
89
|
-
);
|
|
90
|
-
|
|
91
|
-
return (
|
|
92
|
-
<NSBoxDateTime
|
|
93
|
-
title={this.getLabel()}
|
|
94
|
-
placeholder={this.getLabel()}
|
|
95
|
-
required={false}
|
|
96
|
-
hideHeader={true}
|
|
97
|
-
defaultValue={undefined}
|
|
98
|
-
onChanged={e =>
|
|
99
|
-
{
|
|
100
|
-
const val = e.getValue();
|
|
101
|
-
onChanged(val ? this.buildFilterItem(TimeOperation.toDBFormat(val)) : null);
|
|
102
|
-
}}
|
|
103
|
-
/>
|
|
104
|
-
);
|
|
105
|
-
}
|
|
1
|
+
import { FilterItem, FilterItemOperator, SortItem, TimeOperation } from "namirasoft-core";
|
|
2
|
+
import { NSBoxDateTime, NSBoxDateTimeRange, NSBoxEntity } from "namirasoft-site-react";
|
|
3
|
+
import { NSAFilterBoxBase, NSAFilterBoxBaseProps } from "./NSAFilterBoxBase";
|
|
4
|
+
import { NSAFilterBoxBoolean } from "./NSAFilterBoxBoolean";
|
|
5
|
+
|
|
6
|
+
export interface NSAFilterBoxDateTimeProps extends NSAFilterBoxBaseProps
|
|
7
|
+
{
|
|
8
|
+
getValues: (search: string) => Promise<{ value: string; title: string }[]>;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
type ValueItem = { value: string; title: string };
|
|
12
|
+
|
|
13
|
+
const ENTITY_OPERATORS = ["equals"];
|
|
14
|
+
|
|
15
|
+
export class NSAFilterBoxDateTime extends NSAFilterBoxBase<NSAFilterBoxDateTimeProps>
|
|
16
|
+
{
|
|
17
|
+
private betweenActive = false;
|
|
18
|
+
|
|
19
|
+
private list = async (
|
|
20
|
+
filters: FilterItem[] | null,
|
|
21
|
+
_page: number | null,
|
|
22
|
+
_size: number | null,
|
|
23
|
+
_sorts: SortItem[]
|
|
24
|
+
): Promise<{ count: number; rows: ValueItem[] }> =>
|
|
25
|
+
{
|
|
26
|
+
const searchFilter = filters?.find(f => f.values.length > 0);
|
|
27
|
+
const search = searchFilter?.values[0] ?? "";
|
|
28
|
+
const rows = await this.props.getValues(search);
|
|
29
|
+
return { count: rows.length, rows };
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
override render(): JSX.Element | null
|
|
33
|
+
{
|
|
34
|
+
const { config, onChanged } = this.props;
|
|
35
|
+
const op = config.operatorName
|
|
36
|
+
? FilterItemOperator.getByName(config.operatorName)
|
|
37
|
+
: null;
|
|
38
|
+
|
|
39
|
+
if (op && op.count === 0)
|
|
40
|
+
return <NSAFilterBoxBoolean config={config} onChanged={onChanged} />;
|
|
41
|
+
|
|
42
|
+
if (config.operatorName === "between")
|
|
43
|
+
return (
|
|
44
|
+
<NSBoxDateTimeRange
|
|
45
|
+
title={this.getLabel()}
|
|
46
|
+
placeholder={this.getLabel()}
|
|
47
|
+
required={false}
|
|
48
|
+
hideHeader={true}
|
|
49
|
+
preset={true}
|
|
50
|
+
onChanged={e =>
|
|
51
|
+
{
|
|
52
|
+
const val = e.getValue();
|
|
53
|
+
if (val)
|
|
54
|
+
{
|
|
55
|
+
this.betweenActive = true;
|
|
56
|
+
onChanged(this.buildBetweenFilterItems(
|
|
57
|
+
TimeOperation.toDBFormat(val.from),
|
|
58
|
+
TimeOperation.toDBFormat(val.to)
|
|
59
|
+
));
|
|
60
|
+
}
|
|
61
|
+
else if (this.betweenActive)
|
|
62
|
+
{
|
|
63
|
+
this.betweenActive = false;
|
|
64
|
+
onChanged(null);
|
|
65
|
+
}
|
|
66
|
+
}}
|
|
67
|
+
/>
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
if (config.operatorName && ENTITY_OPERATORS.includes(config.operatorName))
|
|
71
|
+
return (
|
|
72
|
+
<NSBoxEntity<ValueItem>
|
|
73
|
+
title={this.getLabel()}
|
|
74
|
+
placeholder={this.getLabel()}
|
|
75
|
+
required={false}
|
|
76
|
+
hideHeader={true}
|
|
77
|
+
multiple={false}
|
|
78
|
+
list={this.list}
|
|
79
|
+
table_name={config.column.table.name}
|
|
80
|
+
getValue={item => item.value}
|
|
81
|
+
getTitle={item => item.title}
|
|
82
|
+
getSort={() => null}
|
|
83
|
+
onChanged={e =>
|
|
84
|
+
{
|
|
85
|
+
const val = e.getValueOne();
|
|
86
|
+
onChanged(val ? this.buildFilterItem(val) : null);
|
|
87
|
+
}}
|
|
88
|
+
/>
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
return (
|
|
92
|
+
<NSBoxDateTime
|
|
93
|
+
title={this.getLabel()}
|
|
94
|
+
placeholder={this.getLabel()}
|
|
95
|
+
required={false}
|
|
96
|
+
hideHeader={true}
|
|
97
|
+
defaultValue={undefined}
|
|
98
|
+
onChanged={e =>
|
|
99
|
+
{
|
|
100
|
+
const val = e.getValue();
|
|
101
|
+
onChanged(val ? this.buildFilterItem(TimeOperation.toDBFormat(val)) : null);
|
|
102
|
+
}}
|
|
103
|
+
/>
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
106
|
}
|