namirasoft-account-react 1.5.37 → 1.5.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (147) hide show
  1. package/.env.template +15 -15
  2. package/SKILL.md +514 -514
  3. package/config-overrides.js +72 -72
  4. package/dist/App.d.ts +1 -1
  5. package/dist/FieldCacheService.js +4 -0
  6. package/dist/FieldCacheService.js.map +1 -1
  7. package/dist/NSARouterMaker.js +1 -1
  8. package/dist/NSARouterMaker.js.map +1 -1
  9. package/dist/Router.d.ts +1 -1
  10. package/dist/UseParams.d.ts +1 -1
  11. package/dist/components/NSAAccessListDialog.d.ts +2 -2
  12. package/dist/components/NSAAccessListDialog.module.css +71 -71
  13. package/dist/components/NSABoxSecret.d.ts +1 -1
  14. package/dist/components/NSABoxSecret.module.css +23 -23
  15. package/dist/components/NSAMasterMenu.d.ts +1 -1
  16. package/dist/components/NSAMasterMenu.js +4 -0
  17. package/dist/components/NSAMasterMenu.js.map +1 -1
  18. package/dist/components/NSAMasterMenu.module.css +250 -250
  19. package/dist/components/NSAMasterMenuItem.d.ts +1 -1
  20. package/dist/components/NSAMessageListDialog.d.ts +1 -1
  21. package/dist/components/NSAMessageListDialog.module.css +99 -99
  22. package/dist/components/NSANavigationGuard.d.ts +1 -1
  23. package/dist/components/NSAProductListDialog.d.ts +1 -1
  24. package/dist/components/NSAProductListDialog.module.css +44 -44
  25. package/dist/components/NSATaskBar.d.ts +1 -1
  26. package/dist/components/NSATaskBar.module.css +57 -57
  27. package/dist/components/NSAUserDialog.d.ts +1 -1
  28. package/dist/components/NSAUserDialog.module.css +67 -67
  29. package/dist/components/NSAWorkspaceListDialog.d.ts +1 -1
  30. package/dist/components/NSAWorkspaceListDialog.module.css +41 -41
  31. package/dist/components/NSFBoxCategoryScope.d.ts +1 -1
  32. package/dist/components/NSFBoxField.d.ts +1 -1
  33. package/dist/components/NSFBoxSlot.d.ts +1 -1
  34. package/dist/components/NSFBoxWrapper.d.ts +1 -1
  35. package/dist/components/NSLabelSecret.d.ts +1 -1
  36. package/dist/components/quickfilter/NSAFilterBoxEnum.module.css +51 -51
  37. package/dist/components/quickfilter/NSAQuickFilterBar.d.ts +1 -1
  38. package/dist/components/quickfilter/NSAQuickFilterBar.module.css +20 -20
  39. package/dist/components/quickfilter/NSAQuickFilterDialog.d.ts +1 -1
  40. package/dist/components/quickfilter/NSAQuickFilterDialog.module.css +74 -74
  41. package/dist/layouts/NSALayout.d.ts +1 -1
  42. package/dist/layouts/NSASectionEdit.d.ts +1 -1
  43. package/dist/layouts/NSASectionEditTabPage.d.ts +1 -1
  44. package/dist/layouts/NSASectionEditTabPage.module.css +4 -4
  45. package/dist/layouts/NSASectionList.d.ts +1 -1
  46. package/dist/layouts/NSASectionList.module.css +24 -24
  47. package/dist/layouts/NSASectionView.d.ts +1 -1
  48. package/dist/layouts/NSASectionViewTabMore.d.ts +1 -1
  49. package/dist/layouts/NSASectionViewTabPage.d.ts +1 -1
  50. package/dist/layouts/NSASectionViewTabPage.module.css +47 -47
  51. package/dist/pages/NSAConsentPage.module.css +26 -26
  52. package/dist/pages/NSAEmailVerificationPage.d.ts +1 -1
  53. package/dist/pages/NSAHomePage.d.ts +1 -1
  54. package/dist/pages/NSAHomePage.module.css +41 -41
  55. package/dist/pages/NSALoginPage.d.ts +1 -1
  56. package/dist/pages/NSALoginPage.module.css +26 -26
  57. package/dist/pages/NSAPhoneVerificationPage.d.ts +1 -1
  58. package/dist/pages/NSAPhoneVerificationPage.js +11 -3
  59. package/dist/pages/NSAPhoneVerificationPage.js.map +1 -1
  60. package/dist/pages/NSAVerificationPage.d.ts +1 -1
  61. package/dist/pages/NSAVerificationPage.module.css +31 -31
  62. package/package.json +94 -94
  63. package/public/index.html +21 -21
  64. package/src/App.tsx +72 -72
  65. package/src/CTFRow.ts +7 -7
  66. package/src/FieldCacheService.tsx +113 -108
  67. package/src/IEntityInfo.ts +33 -33
  68. package/src/NSACacheService.ts +126 -126
  69. package/src/NSAFilterOperators.ts +94 -94
  70. package/src/NSARouterMaker.tsx +141 -141
  71. package/src/NSARouterMakerProps.ts +23 -23
  72. package/src/NSARouterMakerResult.ts +24 -24
  73. package/src/NSFRouterMaker.tsx +35 -35
  74. package/src/NSFRouterProps.ts +7 -7
  75. package/src/NSFRoutes.ts +30 -30
  76. package/src/Router.tsx +48 -48
  77. package/src/UseParams.tsx +17 -17
  78. package/src/components/NSAAccessListDialog.module.css +71 -71
  79. package/src/components/NSAAccessListDialog.tsx +178 -178
  80. package/src/components/NSABoxSecret.module.css +23 -23
  81. package/src/components/NSABoxSecret.tsx +264 -264
  82. package/src/components/NSAMasterMenu.module.css +250 -250
  83. package/src/components/NSAMasterMenu.tsx +174 -169
  84. package/src/components/NSAMasterMenuItem.tsx +250 -250
  85. package/src/components/NSAMessageListDialog.module.css +99 -99
  86. package/src/components/NSAMessageListDialog.tsx +144 -144
  87. package/src/components/NSANavigationGuard.tsx +79 -79
  88. package/src/components/NSAProductListDialog.module.css +44 -44
  89. package/src/components/NSAProductListDialog.tsx +88 -88
  90. package/src/components/NSATable.tsx +494 -494
  91. package/src/components/NSATaskBar.module.css +57 -57
  92. package/src/components/NSATaskBar.tsx +193 -193
  93. package/src/components/NSAUserDialog.module.css +67 -67
  94. package/src/components/NSAUserDialog.tsx +122 -122
  95. package/src/components/NSAWorkspaceListDialog.module.css +41 -41
  96. package/src/components/NSAWorkspaceListDialog.tsx +147 -147
  97. package/src/components/NSFBoxCategoryScope.tsx +52 -52
  98. package/src/components/NSFBoxField.tsx +37 -37
  99. package/src/components/NSFBoxSlot.tsx +73 -73
  100. package/src/components/NSFBoxWrapper.tsx +69 -69
  101. package/src/components/NSLabelSecret.tsx +37 -37
  102. package/src/components/quickfilter/NSAFilterBoxBase.tsx +110 -110
  103. package/src/components/quickfilter/NSAFilterBoxBoolean.tsx +72 -72
  104. package/src/components/quickfilter/NSAFilterBoxDate.tsx +110 -110
  105. package/src/components/quickfilter/NSAFilterBoxDateTime.tsx +110 -110
  106. package/src/components/quickfilter/NSAFilterBoxEnum.module.css +51 -51
  107. package/src/components/quickfilter/NSAFilterBoxEnum.tsx +103 -103
  108. package/src/components/quickfilter/NSAFilterBoxNumber.tsx +145 -145
  109. package/src/components/quickfilter/NSAFilterBoxString.tsx +83 -83
  110. package/src/components/quickfilter/NSAFilterBoxTime.tsx +106 -106
  111. package/src/components/quickfilter/NSAQuickFilterBar.module.css +20 -20
  112. package/src/components/quickfilter/NSAQuickFilterBar.tsx +142 -142
  113. package/src/components/quickfilter/NSAQuickFilterDialog.module.css +74 -74
  114. package/src/components/quickfilter/NSAQuickFilterDialog.tsx +297 -297
  115. package/src/css.d.ts +13 -13
  116. package/src/formatters/SecretFormatter.tsx +24 -24
  117. package/src/index.tsx +27 -27
  118. package/src/layouts/Actions.ts +146 -146
  119. package/src/layouts/CFTUtil.ts +18 -18
  120. package/src/layouts/NSALayout.tsx +750 -750
  121. package/src/layouts/NSALayout_Field.ts +125 -125
  122. package/src/layouts/NSASectionEdit.tsx +279 -279
  123. package/src/layouts/NSASectionEditTabPage.module.css +4 -4
  124. package/src/layouts/NSASectionEditTabPage.tsx +256 -256
  125. package/src/layouts/NSASectionList.module.css +24 -24
  126. package/src/layouts/NSASectionList.tsx +165 -165
  127. package/src/layouts/NSASectionView.tsx +98 -98
  128. package/src/layouts/NSASectionViewTabMore.tsx +78 -78
  129. package/src/layouts/NSASectionViewTabPage.module.css +47 -47
  130. package/src/layouts/NSASectionViewTabPage.tsx +400 -400
  131. package/src/main.ts +52 -52
  132. package/src/pages/NSAConsentPage.module.css +26 -26
  133. package/src/pages/NSAConsentPage.tsx +120 -120
  134. package/src/pages/NSAEmailVerificationPage.tsx +30 -30
  135. package/src/pages/NSAHomePage.module.css +41 -41
  136. package/src/pages/NSAHomePage.tsx +113 -113
  137. package/src/pages/NSALoginPage.module.css +26 -26
  138. package/src/pages/NSALoginPage.tsx +87 -87
  139. package/src/pages/NSAPhoneVerificationPage.tsx +106 -94
  140. package/src/pages/NSAVerificationPage.module.css +31 -31
  141. package/src/pages/NSAVerificationPage.tsx +185 -185
  142. package/src/pages/NSFCategoryEditPage.tsx +87 -87
  143. package/src/pages/NSFCategoryListPage.tsx +23 -23
  144. package/src/pages/NSFCategoryViewPage.tsx +23 -23
  145. package/src/pages/NSFEntities.ts +58 -58
  146. package/src/pages/PaymentRequired.tsx +80 -80
  147. package/tsconfig.json +43 -43
@@ -1,111 +1,111 @@
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
- // valueless operators negate by swapping, value operators by the not flag
21
- private static readonly VALUELESS_INVERSE_MAP: Record<string, string> = {
22
- exists: "empty",
23
- empty: "exists",
24
- };
25
-
26
- private buildMeta()
27
- {
28
- const { config } = this.props;
29
- const table = new BaseMetaTable(null, config.column.table.name, config.column.table.text);
30
- const column = new BaseMetaColumn(table, config.column.name, config.column.text, config.column.type, false);
31
- return { table, column };
32
- }
33
-
34
- protected buildFilterItem(...values: string[]): FilterItem
35
- {
36
- const { table, column } = this.buildMeta();
37
- const key = this.props.config.operatorName ?? "";
38
- const isNot = key in NSAFilterBoxBase.NOT_OPERATOR_MAP;
39
- const resolvedKey = isNot ? NSAFilterBoxBase.NOT_OPERATOR_MAP[key] : key;
40
- const operator = resolvedKey
41
- ? FilterItemOperator.getByName(resolvedKey)
42
- : FilterItemOperator.all.equals;
43
- return new FilterItem(table, column, isNot, operator, ...values);
44
- }
45
-
46
- protected buildInverseFilterItem(...values: string[]): FilterItem
47
- {
48
- const { table, column } = this.buildMeta();
49
- const key = this.props.config.operatorName ?? "";
50
- const valuelessInverse = NSAFilterBoxBase.VALUELESS_INVERSE_MAP[key];
51
- if (valuelessInverse)
52
- return new FilterItem(table, column, false, FilterItemOperator.getByName(valuelessInverse));
53
- const resolvedKey = key in NSAFilterBoxBase.NOT_OPERATOR_MAP ? NSAFilterBoxBase.NOT_OPERATOR_MAP[key] : key;
54
- const operator = resolvedKey
55
- ? FilterItemOperator.getByName(resolvedKey)
56
- : FilterItemOperator.all.equals;
57
- return new FilterItem(table, column, true, operator, ...values);
58
- }
59
-
60
- protected buildBetweenFilterItems(from: string, to: string): FilterItem[]
61
- {
62
- const { table, column } = this.buildMeta();
63
- return [
64
- new FilterItem(table, column, false, FilterItemOperator.all.morethanequal, from),
65
- new FilterItem(table, column, false, FilterItemOperator.all.lessthanequal, to),
66
- ];
67
- }
68
-
69
- protected getLabel(): string
70
- {
71
- const { config } = this.props;
72
- const base = config.title || config.column.text;
73
- if (!config.operatorName)
74
- return base;
75
- const sign = FilterItemOperator.getByName(config.operatorName).sign;
76
- return `${base} ${sign}`;
77
- }
78
-
79
- protected getInitialItems(): FilterItem[]
80
- {
81
- const initial = this.props.initial;
82
- if (!initial)
83
- return [];
84
- return Array.isArray(initial) ? initial : [initial];
85
- }
86
-
87
- protected getInitialValue(): string | undefined
88
- {
89
- return this.getInitialItems()[0]?.values[0];
90
- }
91
-
92
- protected getInitialValues(): string[]
93
- {
94
- return this.getInitialItems().flatMap(i => i.values);
95
- }
96
-
97
- protected getInitialBetween(): { from: string; to: string } | undefined
98
- {
99
- const items = this.getInitialItems();
100
- if (items.length < 2)
101
- return undefined;
102
- const from = items.find(i => i.operator?.name === "morethanequal")?.values[0] ?? items[0].values[0];
103
- const to = items.find(i => i.operator?.name === "lessthanequal")?.values[0] ?? items[1].values[0];
104
- return { from, to };
105
- }
106
-
107
- protected parseDBDate(value: string): Date
108
- {
109
- return new Date(value.replace(" ", "T") + "Z");
110
- }
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
+ // valueless operators negate by swapping, value operators by the not flag
21
+ private static readonly VALUELESS_INVERSE_MAP: Record<string, string> = {
22
+ exists: "empty",
23
+ empty: "exists",
24
+ };
25
+
26
+ private buildMeta()
27
+ {
28
+ const { config } = this.props;
29
+ const table = new BaseMetaTable(null, config.column.table.name, config.column.table.text);
30
+ const column = new BaseMetaColumn(table, config.column.name, config.column.text, config.column.type, false);
31
+ return { table, column };
32
+ }
33
+
34
+ protected buildFilterItem(...values: string[]): FilterItem
35
+ {
36
+ const { table, column } = this.buildMeta();
37
+ const key = this.props.config.operatorName ?? "";
38
+ const isNot = key in NSAFilterBoxBase.NOT_OPERATOR_MAP;
39
+ const resolvedKey = isNot ? NSAFilterBoxBase.NOT_OPERATOR_MAP[key] : key;
40
+ const operator = resolvedKey
41
+ ? FilterItemOperator.getByName(resolvedKey)
42
+ : FilterItemOperator.all.equals;
43
+ return new FilterItem(table, column, isNot, operator, ...values);
44
+ }
45
+
46
+ protected buildInverseFilterItem(...values: string[]): FilterItem
47
+ {
48
+ const { table, column } = this.buildMeta();
49
+ const key = this.props.config.operatorName ?? "";
50
+ const valuelessInverse = NSAFilterBoxBase.VALUELESS_INVERSE_MAP[key];
51
+ if (valuelessInverse)
52
+ return new FilterItem(table, column, false, FilterItemOperator.getByName(valuelessInverse));
53
+ const resolvedKey = key in NSAFilterBoxBase.NOT_OPERATOR_MAP ? NSAFilterBoxBase.NOT_OPERATOR_MAP[key] : key;
54
+ const operator = resolvedKey
55
+ ? FilterItemOperator.getByName(resolvedKey)
56
+ : FilterItemOperator.all.equals;
57
+ return new FilterItem(table, column, true, operator, ...values);
58
+ }
59
+
60
+ protected buildBetweenFilterItems(from: string, to: string): FilterItem[]
61
+ {
62
+ const { table, column } = this.buildMeta();
63
+ return [
64
+ new FilterItem(table, column, false, FilterItemOperator.all.morethanequal, from),
65
+ new FilterItem(table, column, false, FilterItemOperator.all.lessthanequal, to),
66
+ ];
67
+ }
68
+
69
+ protected getLabel(): string
70
+ {
71
+ const { config } = this.props;
72
+ const base = config.title || config.column.text;
73
+ if (!config.operatorName)
74
+ return base;
75
+ const sign = FilterItemOperator.getByName(config.operatorName).sign;
76
+ return `${base} ${sign}`;
77
+ }
78
+
79
+ protected getInitialItems(): FilterItem[]
80
+ {
81
+ const initial = this.props.initial;
82
+ if (!initial)
83
+ return [];
84
+ return Array.isArray(initial) ? initial : [initial];
85
+ }
86
+
87
+ protected getInitialValue(): string | undefined
88
+ {
89
+ return this.getInitialItems()[0]?.values[0];
90
+ }
91
+
92
+ protected getInitialValues(): string[]
93
+ {
94
+ return this.getInitialItems().flatMap(i => i.values);
95
+ }
96
+
97
+ protected getInitialBetween(): { from: string; to: string } | undefined
98
+ {
99
+ const items = this.getInitialItems();
100
+ if (items.length < 2)
101
+ return undefined;
102
+ const from = items.find(i => i.operator?.name === "morethanequal")?.values[0] ?? items[0].values[0];
103
+ const to = items.find(i => i.operator?.name === "lessthanequal")?.values[0] ?? items[1].values[0];
104
+ return { from, to };
105
+ }
106
+
107
+ protected parseDBDate(value: string): Date
108
+ {
109
+ return new Date(value.replace(" ", "T") + "Z");
110
+ }
111
111
  }
@@ -1,73 +1,73 @@
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 items = this.getInitialItems();
25
- if (this.isValueless())
26
- {
27
- if (items.length === 0)
28
- return null;
29
- const configKey = (this.props.config.operatorName ?? "").toLowerCase();
30
- const itemKey = items[0].operator.name.replace(/\s+/g, "").toLowerCase();
31
- return itemKey === configKey;
32
- }
33
- const value = this.getInitialValue();
34
- if (value !== undefined)
35
- return value === "1";
36
- return null;
37
- }
38
-
39
- private isValueless(): boolean
40
- {
41
- const name = this.props.config.operatorName;
42
- return !!name && FilterItemOperator.getByName(name).count === 0;
43
- }
44
-
45
-
46
- private handleChange(value: boolean | null)
47
- {
48
- this.setState({ value });
49
- if (value === null)
50
- this.props.onChanged(null);
51
- else if (this.isValueless())
52
- this.props.onChanged(value ? this.buildFilterItem() : this.buildInverseFilterItem());
53
- else
54
- this.props.onChanged(this.buildFilterItem(String(Number(value))));
55
- }
56
-
57
- override render(): JSX.Element
58
- {
59
- return (
60
- <div ref={this.containerRef} style={{ width: "100%" }}>
61
- <NSBoxBoolean
62
- title={this.getLabel()}
63
- placeholder={this.getLabel()}
64
- required={false}
65
- hideHeader={true}
66
- triState={true}
67
- defaultValue={this.state.value ?? undefined}
68
- onChanged={e => this.handleChange(e.getValue())}
69
- />
70
- </div>
71
- );
72
- }
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 items = this.getInitialItems();
25
+ if (this.isValueless())
26
+ {
27
+ if (items.length === 0)
28
+ return null;
29
+ const configKey = (this.props.config.operatorName ?? "").toLowerCase();
30
+ const itemKey = items[0].operator.name.replace(/\s+/g, "").toLowerCase();
31
+ return itemKey === configKey;
32
+ }
33
+ const value = this.getInitialValue();
34
+ if (value !== undefined)
35
+ return value === "1";
36
+ return null;
37
+ }
38
+
39
+ private isValueless(): boolean
40
+ {
41
+ const name = this.props.config.operatorName;
42
+ return !!name && FilterItemOperator.getByName(name).count === 0;
43
+ }
44
+
45
+
46
+ private handleChange(value: boolean | null)
47
+ {
48
+ this.setState({ value });
49
+ if (value === null)
50
+ this.props.onChanged(null);
51
+ else if (this.isValueless())
52
+ this.props.onChanged(value ? this.buildFilterItem() : this.buildInverseFilterItem());
53
+ else
54
+ this.props.onChanged(this.buildFilterItem(String(Number(value))));
55
+ }
56
+
57
+ override render(): JSX.Element
58
+ {
59
+ return (
60
+ <div ref={this.containerRef} style={{ width: "100%" }}>
61
+ <NSBoxBoolean
62
+ title={this.getLabel()}
63
+ placeholder={this.getLabel()}
64
+ required={false}
65
+ hideHeader={true}
66
+ triState={true}
67
+ defaultValue={this.state.value ?? undefined}
68
+ onChanged={e => this.handleChange(e.getValue())}
69
+ />
70
+ </div>
71
+ );
72
+ }
73
73
  }
@@ -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
  }