namirasoft-account-react 1.5.20 → 1.5.21
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/SKILL.md +514 -514
- package/config-overrides.js +72 -72
- package/dist/App.d.ts +1 -1
- package/dist/Router.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/NSABoxSecret.d.ts +1 -1
- package/dist/components/NSABoxSecret.module.css +23 -23
- package/dist/components/NSAMasterMenu.d.ts +1 -1
- package/dist/components/NSAMasterMenu.module.css +250 -250
- 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/NSANavigationGuard.d.ts +1 -1
- package/dist/components/NSAProductListDialog.d.ts +1 -1
- package/dist/components/NSAProductListDialog.module.css +44 -44
- package/dist/components/NSATaskBar.d.ts +1 -1
- package/dist/components/NSATaskBar.module.css +57 -57
- 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/NSFBoxCategoryScope.d.ts +1 -1
- package/dist/components/NSFBoxField.d.ts +1 -1
- package/dist/components/NSFBoxSlot.d.ts +1 -1
- package/dist/components/NSFBoxWrapper.d.ts +1 -1
- package/dist/components/NSLabelSecret.d.ts +1 -1
- package/dist/components/quickfilter/NSAFilterBoxEnum.module.css +44 -44
- package/dist/components/quickfilter/NSAQuickFilterBar.d.ts +1 -1
- package/dist/components/quickfilter/NSAQuickFilterBar.module.css +19 -19
- package/dist/components/quickfilter/NSAQuickFilterDialog.d.ts +1 -1
- package/dist/components/quickfilter/NSAQuickFilterDialog.module.css +74 -74
- 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 +95 -95
- package/public/index.html +21 -21
- package/src/App.tsx +19 -19
- package/src/CTFRow.ts +7 -7
- package/src/FieldCacheService.tsx +84 -84
- package/src/IEntityInfo.ts +33 -33
- package/src/NSACacheService.ts +120 -120
- package/src/NSAFilterOperators.ts +92 -92
- package/src/NSARouterMaker.tsx +140 -140
- package/src/NSARouterMakerProps.ts +23 -23
- package/src/NSARouterMakerResult.ts +24 -24
- package/src/NSFRouterMaker.tsx +35 -35
- package/src/NSFRouterProps.ts +7 -7
- package/src/NSFRoutes.ts +30 -30
- package/src/Router.tsx +48 -48
- package/src/UseParams.tsx +17 -17
- package/src/components/NSAAccessListDialog.module.css +71 -71
- package/src/components/NSAAccessListDialog.tsx +178 -178
- package/src/components/NSABoxSecret.module.css +23 -23
- package/src/components/NSABoxSecret.tsx +264 -264
- package/src/components/NSAMasterMenu.module.css +250 -250
- 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 +142 -142
- package/src/components/NSANavigationGuard.tsx +79 -79
- package/src/components/NSAProductListDialog.module.css +44 -44
- package/src/components/NSAProductListDialog.tsx +88 -88
- package/src/components/NSATable.tsx +494 -494
- package/src/components/NSATaskBar.module.css +57 -57
- package/src/components/NSATaskBar.tsx +193 -193
- 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/NSFBoxCategoryScope.tsx +52 -52
- package/src/components/NSFBoxField.tsx +37 -37
- package/src/components/NSFBoxSlot.tsx +71 -71
- package/src/components/NSFBoxWrapper.tsx +69 -69
- package/src/components/NSLabelSecret.tsx +37 -37
- package/src/components/quickfilter/NSAFilterBoxBase.tsx +89 -89
- package/src/components/quickfilter/NSAFilterBoxBoolean.tsx +66 -66
- package/src/components/quickfilter/NSAFilterBoxDate.tsx +110 -110
- package/src/components/quickfilter/NSAFilterBoxDateTime.tsx +110 -110
- package/src/components/quickfilter/NSAFilterBoxEnum.module.css +44 -44
- package/src/components/quickfilter/NSAFilterBoxEnum.tsx +79 -79
- package/src/components/quickfilter/NSAFilterBoxNumber.tsx +145 -145
- package/src/components/quickfilter/NSAFilterBoxString.tsx +83 -83
- package/src/components/quickfilter/NSAFilterBoxTime.tsx +106 -106
- package/src/components/quickfilter/NSAQuickFilterBar.module.css +19 -19
- package/src/components/quickfilter/NSAQuickFilterBar.tsx +142 -142
- 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 +26 -26
- package/src/layouts/Actions.ts +146 -146
- package/src/layouts/CFTUtil.ts +18 -18
- package/src/layouts/NSALayout.tsx +744 -744
- package/src/layouts/NSALayout_Field.ts +125 -125
- package/src/layouts/NSASectionEdit.tsx +281 -281
- package/src/layouts/NSASectionEditTabPage.module.css +4 -4
- package/src/layouts/NSASectionEditTabPage.tsx +256 -256
- package/src/layouts/NSASectionList.module.css +31 -31
- package/src/layouts/NSASectionList.tsx +147 -147
- package/src/layouts/NSASectionView.tsx +98 -98
- package/src/layouts/NSASectionViewTabMore.tsx +78 -78
- package/src/layouts/NSASectionViewTabPage.module.css +47 -47
- package/src/layouts/NSASectionViewTabPage.tsx +399 -399
- package/src/main.ts +52 -52
- 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 +124 -124
- 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 +185 -185
- package/src/pages/NSFCategoryEditPage.tsx +87 -87
- package/src/pages/NSFCategoryListPage.tsx +23 -23
- package/src/pages/NSFCategoryViewPage.tsx +23 -23
- package/src/pages/NSFEntities.ts +58 -58
- package/src/pages/PaymentRequired.tsx +80 -80
- package/tsconfig.json +43 -43
|
@@ -1,90 +1,90 @@
|
|
|
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
|
-
initial?: FilterItem | FilterItem[] | null;
|
|
9
|
-
onChanged: (items: FilterItem | FilterItem[] | null) => void;
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export abstract class NSAFilterBoxBase<P extends NSAFilterBoxBaseProps = NSAFilterBoxBaseProps, S = {}>
|
|
13
|
-
extends Component<P, S>
|
|
14
|
-
{
|
|
15
|
-
private static readonly NOT_OPERATOR_MAP: Record<string, string> = {
|
|
16
|
-
notequals: "equals",
|
|
17
|
-
notcontains: "contains",
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
private buildMeta()
|
|
21
|
-
{
|
|
22
|
-
const { config } = this.props;
|
|
23
|
-
const table = new BaseMetaTable(null, config.column.table.name, config.column.table.text);
|
|
24
|
-
const column = new BaseMetaColumn(table, config.column.name, config.column.text, config.column.type, false);
|
|
25
|
-
return { table, column };
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
protected buildFilterItem(...values: string[]): FilterItem
|
|
29
|
-
{
|
|
30
|
-
const { table, column } = this.buildMeta();
|
|
31
|
-
const key = this.props.config.operatorName ?? "";
|
|
32
|
-
const isNot = key in NSAFilterBoxBase.NOT_OPERATOR_MAP;
|
|
33
|
-
const resolvedKey = isNot ? NSAFilterBoxBase.NOT_OPERATOR_MAP[key] : key;
|
|
34
|
-
const operator = resolvedKey
|
|
35
|
-
? FilterItemOperator.getByName(resolvedKey)
|
|
36
|
-
: FilterItemOperator.all.equals;
|
|
37
|
-
return new FilterItem(table, column, isNot, operator, ...values);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
protected buildBetweenFilterItems(from: string, to: string): FilterItem[]
|
|
41
|
-
{
|
|
42
|
-
const { table, column } = this.buildMeta();
|
|
43
|
-
return [
|
|
44
|
-
new FilterItem(table, column, false, FilterItemOperator.all.morethanequal, from),
|
|
45
|
-
new FilterItem(table, column, false, FilterItemOperator.all.lessthanequal, to),
|
|
46
|
-
];
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
protected getLabel(): string
|
|
50
|
-
{
|
|
51
|
-
const { config } = this.props;
|
|
52
|
-
if (!config.operatorName)
|
|
53
|
-
return config.column.text;
|
|
54
|
-
const sign = FilterItemOperator.getByName(config.operatorName).sign;
|
|
55
|
-
return `${config.column.text} ${sign}`;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
protected getInitialItems(): FilterItem[]
|
|
59
|
-
{
|
|
60
|
-
const initial = this.props.initial;
|
|
61
|
-
if (!initial)
|
|
62
|
-
return [];
|
|
63
|
-
return Array.isArray(initial) ? initial : [initial];
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
protected getInitialValue(): string | undefined
|
|
67
|
-
{
|
|
68
|
-
return this.getInitialItems()[0]?.values[0];
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
protected getInitialValues(): string[]
|
|
72
|
-
{
|
|
73
|
-
return this.getInitialItems().flatMap(i => i.values);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
protected getInitialBetween(): { from: string; to: string } | undefined
|
|
77
|
-
{
|
|
78
|
-
const items = this.getInitialItems();
|
|
79
|
-
if (items.length < 2)
|
|
80
|
-
return undefined;
|
|
81
|
-
const from = items.find(i => i.operator?.name === "morethanequal")?.values[0] ?? items[0].values[0];
|
|
82
|
-
const to = items.find(i => i.operator?.name === "lessthanequal")?.values[0] ?? items[1].values[0];
|
|
83
|
-
return { from, to };
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
protected parseDBDate(value: string): Date
|
|
87
|
-
{
|
|
88
|
-
return new Date(value.replace(" ", "T") + "Z");
|
|
89
|
-
}
|
|
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
|
+
initial?: FilterItem | FilterItem[] | null;
|
|
9
|
+
onChanged: (items: FilterItem | FilterItem[] | null) => void;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export abstract class NSAFilterBoxBase<P extends NSAFilterBoxBaseProps = NSAFilterBoxBaseProps, S = {}>
|
|
13
|
+
extends Component<P, S>
|
|
14
|
+
{
|
|
15
|
+
private static readonly NOT_OPERATOR_MAP: Record<string, string> = {
|
|
16
|
+
notequals: "equals",
|
|
17
|
+
notcontains: "contains",
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
private buildMeta()
|
|
21
|
+
{
|
|
22
|
+
const { config } = this.props;
|
|
23
|
+
const table = new BaseMetaTable(null, config.column.table.name, config.column.table.text);
|
|
24
|
+
const column = new BaseMetaColumn(table, config.column.name, config.column.text, config.column.type, false);
|
|
25
|
+
return { table, column };
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
protected buildFilterItem(...values: string[]): FilterItem
|
|
29
|
+
{
|
|
30
|
+
const { table, column } = this.buildMeta();
|
|
31
|
+
const key = this.props.config.operatorName ?? "";
|
|
32
|
+
const isNot = key in NSAFilterBoxBase.NOT_OPERATOR_MAP;
|
|
33
|
+
const resolvedKey = isNot ? NSAFilterBoxBase.NOT_OPERATOR_MAP[key] : key;
|
|
34
|
+
const operator = resolvedKey
|
|
35
|
+
? FilterItemOperator.getByName(resolvedKey)
|
|
36
|
+
: FilterItemOperator.all.equals;
|
|
37
|
+
return new FilterItem(table, column, isNot, operator, ...values);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
protected buildBetweenFilterItems(from: string, to: string): FilterItem[]
|
|
41
|
+
{
|
|
42
|
+
const { table, column } = this.buildMeta();
|
|
43
|
+
return [
|
|
44
|
+
new FilterItem(table, column, false, FilterItemOperator.all.morethanequal, from),
|
|
45
|
+
new FilterItem(table, column, false, FilterItemOperator.all.lessthanequal, to),
|
|
46
|
+
];
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
protected getLabel(): string
|
|
50
|
+
{
|
|
51
|
+
const { config } = this.props;
|
|
52
|
+
if (!config.operatorName)
|
|
53
|
+
return config.column.text;
|
|
54
|
+
const sign = FilterItemOperator.getByName(config.operatorName).sign;
|
|
55
|
+
return `${config.column.text} ${sign}`;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
protected getInitialItems(): FilterItem[]
|
|
59
|
+
{
|
|
60
|
+
const initial = this.props.initial;
|
|
61
|
+
if (!initial)
|
|
62
|
+
return [];
|
|
63
|
+
return Array.isArray(initial) ? initial : [initial];
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
protected getInitialValue(): string | undefined
|
|
67
|
+
{
|
|
68
|
+
return this.getInitialItems()[0]?.values[0];
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
protected getInitialValues(): string[]
|
|
72
|
+
{
|
|
73
|
+
return this.getInitialItems().flatMap(i => i.values);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
protected getInitialBetween(): { from: string; to: string } | undefined
|
|
77
|
+
{
|
|
78
|
+
const items = this.getInitialItems();
|
|
79
|
+
if (items.length < 2)
|
|
80
|
+
return undefined;
|
|
81
|
+
const from = items.find(i => i.operator?.name === "morethanequal")?.values[0] ?? items[0].values[0];
|
|
82
|
+
const to = items.find(i => i.operator?.name === "lessthanequal")?.values[0] ?? items[1].values[0];
|
|
83
|
+
return { from, to };
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
protected parseDBDate(value: string): Date
|
|
87
|
+
{
|
|
88
|
+
return new Date(value.replace(" ", "T") + "Z");
|
|
89
|
+
}
|
|
90
90
|
}
|
|
@@ -1,67 +1,67 @@
|
|
|
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.resolveInitialValue() };
|
|
19
|
-
this.handleChange = this.handleChange.bind(this);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
private resolveInitialValue(): boolean | null
|
|
23
|
-
{
|
|
24
|
-
const hasInitial = this.getInitialItems().length > 0;
|
|
25
|
-
if (this.isValueless())
|
|
26
|
-
return hasInitial;
|
|
27
|
-
const value = this.getInitialValue();
|
|
28
|
-
if (value !== undefined)
|
|
29
|
-
return value === "1";
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
private isValueless(): boolean
|
|
34
|
-
{
|
|
35
|
-
const name = this.props.config.operatorName;
|
|
36
|
-
return !!name && FilterItemOperator.getByName(name).count === 0;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
private handleChange(value: boolean | null)
|
|
41
|
-
{
|
|
42
|
-
this.setState({ value });
|
|
43
|
-
if (this.isValueless())
|
|
44
|
-
this.props.onChanged(value === true ? this.buildFilterItem() : null);
|
|
45
|
-
else if (value !== null)
|
|
46
|
-
this.props.onChanged(this.buildFilterItem(String(Number(value))));
|
|
47
|
-
else
|
|
48
|
-
this.props.onChanged(null);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
override render(): JSX.Element
|
|
52
|
-
{
|
|
53
|
-
return (
|
|
54
|
-
<div ref={this.containerRef} style={{ width: "100%" }}>
|
|
55
|
-
<NSBoxBoolean
|
|
56
|
-
title={this.getLabel()}
|
|
57
|
-
placeholder={this.getLabel()}
|
|
58
|
-
required={false}
|
|
59
|
-
hideHeader={true}
|
|
60
|
-
triState={!this.isValueless()}
|
|
61
|
-
defaultValue={this.state.value ?? undefined}
|
|
62
|
-
onChanged={e => this.handleChange(e.getValue())}
|
|
63
|
-
/>
|
|
64
|
-
</div>
|
|
65
|
-
);
|
|
66
|
-
}
|
|
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.resolveInitialValue() };
|
|
19
|
+
this.handleChange = this.handleChange.bind(this);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
private resolveInitialValue(): boolean | null
|
|
23
|
+
{
|
|
24
|
+
const hasInitial = this.getInitialItems().length > 0;
|
|
25
|
+
if (this.isValueless())
|
|
26
|
+
return hasInitial;
|
|
27
|
+
const value = this.getInitialValue();
|
|
28
|
+
if (value !== undefined)
|
|
29
|
+
return value === "1";
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
private isValueless(): boolean
|
|
34
|
+
{
|
|
35
|
+
const name = this.props.config.operatorName;
|
|
36
|
+
return !!name && FilterItemOperator.getByName(name).count === 0;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
private handleChange(value: boolean | null)
|
|
41
|
+
{
|
|
42
|
+
this.setState({ value });
|
|
43
|
+
if (this.isValueless())
|
|
44
|
+
this.props.onChanged(value === true ? this.buildFilterItem() : null);
|
|
45
|
+
else if (value !== null)
|
|
46
|
+
this.props.onChanged(this.buildFilterItem(String(Number(value))));
|
|
47
|
+
else
|
|
48
|
+
this.props.onChanged(null);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
override render(): JSX.Element
|
|
52
|
+
{
|
|
53
|
+
return (
|
|
54
|
+
<div ref={this.containerRef} style={{ width: "100%" }}>
|
|
55
|
+
<NSBoxBoolean
|
|
56
|
+
title={this.getLabel()}
|
|
57
|
+
placeholder={this.getLabel()}
|
|
58
|
+
required={false}
|
|
59
|
+
hideHeader={true}
|
|
60
|
+
triState={!this.isValueless()}
|
|
61
|
+
defaultValue={this.state.value ?? undefined}
|
|
62
|
+
onChanged={e => this.handleChange(e.getValue())}
|
|
63
|
+
/>
|
|
64
|
+
</div>
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
67
|
}
|
|
@@ -1,111 +1,111 @@
|
|
|
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 = this.getInitialBetween() !== undefined;
|
|
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} initial={this.props.initial} onChanged={onChanged} />;
|
|
41
|
-
|
|
42
|
-
const between = this.getInitialBetween();
|
|
43
|
-
|
|
44
|
-
if (config.operatorName === "between")
|
|
45
|
-
return (
|
|
46
|
-
<NSBoxDateRange
|
|
47
|
-
title={this.getLabel()}
|
|
48
|
-
placeholder={this.getLabel()}
|
|
49
|
-
required={false}
|
|
50
|
-
hideHeader={true}
|
|
51
|
-
preset={true}
|
|
52
|
-
defaultValue={between ? { from: this.parseDBDate(between.from), to: this.parseDBDate(between.to) } : undefined}
|
|
53
|
-
onChanged={e =>
|
|
54
|
-
{
|
|
55
|
-
const val = e.getValue();
|
|
56
|
-
if (val)
|
|
57
|
-
{
|
|
58
|
-
this.betweenActive = true;
|
|
59
|
-
onChanged(this.buildBetweenFilterItems(
|
|
60
|
-
TimeOperation.toDBFormat(val.from),
|
|
61
|
-
TimeOperation.toDBFormat(val.to)
|
|
62
|
-
));
|
|
63
|
-
}
|
|
64
|
-
else if (this.betweenActive)
|
|
65
|
-
{
|
|
66
|
-
this.betweenActive = false;
|
|
67
|
-
onChanged(null);
|
|
68
|
-
}
|
|
69
|
-
}}
|
|
70
|
-
/>
|
|
71
|
-
);
|
|
72
|
-
|
|
73
|
-
if (config.operatorName && ENTITY_OPERATORS.includes(config.operatorName))
|
|
74
|
-
return (
|
|
75
|
-
<NSBoxEntity<ValueItem>
|
|
76
|
-
title={this.getLabel()}
|
|
77
|
-
placeholder={this.getLabel()}
|
|
78
|
-
required={false}
|
|
79
|
-
hideHeader={true}
|
|
80
|
-
multiple={false}
|
|
81
|
-
defaultValue={this.getInitialValue()}
|
|
82
|
-
list={this.list}
|
|
83
|
-
table_name={config.column.table.name}
|
|
84
|
-
getValue={item => item.value}
|
|
85
|
-
getTitle={item => item.title}
|
|
86
|
-
getSort={() => null}
|
|
87
|
-
onChanged={e =>
|
|
88
|
-
{
|
|
89
|
-
const val = e.getValueOne();
|
|
90
|
-
onChanged(val ? this.buildFilterItem(val) : null);
|
|
91
|
-
}}
|
|
92
|
-
/>
|
|
93
|
-
);
|
|
94
|
-
|
|
95
|
-
const single = this.getInitialValue();
|
|
96
|
-
return (
|
|
97
|
-
<NSBoxDate
|
|
98
|
-
title={this.getLabel()}
|
|
99
|
-
placeholder={this.getLabel()}
|
|
100
|
-
required={false}
|
|
101
|
-
hideHeader={true}
|
|
102
|
-
defaultValue={single !== undefined ? this.parseDBDate(single) : undefined}
|
|
103
|
-
onChanged={e =>
|
|
104
|
-
{
|
|
105
|
-
const val = e.getValue();
|
|
106
|
-
onChanged(val ? this.buildFilterItem(TimeOperation.toDBFormat(val)) : null);
|
|
107
|
-
}}
|
|
108
|
-
/>
|
|
109
|
-
);
|
|
110
|
-
}
|
|
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 = this.getInitialBetween() !== undefined;
|
|
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} initial={this.props.initial} onChanged={onChanged} />;
|
|
41
|
+
|
|
42
|
+
const between = this.getInitialBetween();
|
|
43
|
+
|
|
44
|
+
if (config.operatorName === "between")
|
|
45
|
+
return (
|
|
46
|
+
<NSBoxDateRange
|
|
47
|
+
title={this.getLabel()}
|
|
48
|
+
placeholder={this.getLabel()}
|
|
49
|
+
required={false}
|
|
50
|
+
hideHeader={true}
|
|
51
|
+
preset={true}
|
|
52
|
+
defaultValue={between ? { from: this.parseDBDate(between.from), to: this.parseDBDate(between.to) } : undefined}
|
|
53
|
+
onChanged={e =>
|
|
54
|
+
{
|
|
55
|
+
const val = e.getValue();
|
|
56
|
+
if (val)
|
|
57
|
+
{
|
|
58
|
+
this.betweenActive = true;
|
|
59
|
+
onChanged(this.buildBetweenFilterItems(
|
|
60
|
+
TimeOperation.toDBFormat(val.from),
|
|
61
|
+
TimeOperation.toDBFormat(val.to)
|
|
62
|
+
));
|
|
63
|
+
}
|
|
64
|
+
else if (this.betweenActive)
|
|
65
|
+
{
|
|
66
|
+
this.betweenActive = false;
|
|
67
|
+
onChanged(null);
|
|
68
|
+
}
|
|
69
|
+
}}
|
|
70
|
+
/>
|
|
71
|
+
);
|
|
72
|
+
|
|
73
|
+
if (config.operatorName && ENTITY_OPERATORS.includes(config.operatorName))
|
|
74
|
+
return (
|
|
75
|
+
<NSBoxEntity<ValueItem>
|
|
76
|
+
title={this.getLabel()}
|
|
77
|
+
placeholder={this.getLabel()}
|
|
78
|
+
required={false}
|
|
79
|
+
hideHeader={true}
|
|
80
|
+
multiple={false}
|
|
81
|
+
defaultValue={this.getInitialValue()}
|
|
82
|
+
list={this.list}
|
|
83
|
+
table_name={config.column.table.name}
|
|
84
|
+
getValue={item => item.value}
|
|
85
|
+
getTitle={item => item.title}
|
|
86
|
+
getSort={() => null}
|
|
87
|
+
onChanged={e =>
|
|
88
|
+
{
|
|
89
|
+
const val = e.getValueOne();
|
|
90
|
+
onChanged(val ? this.buildFilterItem(val) : null);
|
|
91
|
+
}}
|
|
92
|
+
/>
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
const single = this.getInitialValue();
|
|
96
|
+
return (
|
|
97
|
+
<NSBoxDate
|
|
98
|
+
title={this.getLabel()}
|
|
99
|
+
placeholder={this.getLabel()}
|
|
100
|
+
required={false}
|
|
101
|
+
hideHeader={true}
|
|
102
|
+
defaultValue={single !== undefined ? this.parseDBDate(single) : undefined}
|
|
103
|
+
onChanged={e =>
|
|
104
|
+
{
|
|
105
|
+
const val = e.getValue();
|
|
106
|
+
onChanged(val ? this.buildFilterItem(TimeOperation.toDBFormat(val)) : null);
|
|
107
|
+
}}
|
|
108
|
+
/>
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
111
|
}
|