namirasoft-account-react 1.5.21 → 1.5.23

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 (143) 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/Router.d.ts +1 -1
  6. package/dist/UseParams.d.ts +1 -1
  7. package/dist/components/NSAAccessListDialog.d.ts +2 -2
  8. package/dist/components/NSAAccessListDialog.module.css +71 -71
  9. package/dist/components/NSABoxSecret.d.ts +1 -1
  10. package/dist/components/NSABoxSecret.module.css +23 -23
  11. package/dist/components/NSAMasterMenu.d.ts +1 -1
  12. package/dist/components/NSAMasterMenu.module.css +250 -250
  13. package/dist/components/NSAMasterMenuItem.d.ts +1 -1
  14. package/dist/components/NSAMessageListDialog.d.ts +1 -1
  15. package/dist/components/NSAMessageListDialog.module.css +99 -99
  16. package/dist/components/NSANavigationGuard.d.ts +1 -1
  17. package/dist/components/NSAProductListDialog.d.ts +1 -1
  18. package/dist/components/NSAProductListDialog.module.css +44 -44
  19. package/dist/components/NSATaskBar.d.ts +1 -1
  20. package/dist/components/NSATaskBar.module.css +57 -57
  21. package/dist/components/NSAUserDialog.d.ts +1 -1
  22. package/dist/components/NSAUserDialog.module.css +67 -67
  23. package/dist/components/NSAWorkspaceListDialog.d.ts +1 -1
  24. package/dist/components/NSAWorkspaceListDialog.module.css +41 -41
  25. package/dist/components/NSFBoxCategoryScope.d.ts +1 -1
  26. package/dist/components/NSFBoxField.d.ts +1 -1
  27. package/dist/components/NSFBoxSlot.d.ts +1 -1
  28. package/dist/components/NSFBoxWrapper.d.ts +1 -1
  29. package/dist/components/NSLabelSecret.d.ts +1 -1
  30. package/dist/components/quickfilter/NSAFilterBoxEnum.module.css +44 -44
  31. package/dist/components/quickfilter/NSAQuickFilterBar.d.ts +1 -1
  32. package/dist/components/quickfilter/NSAQuickFilterBar.module.css +19 -19
  33. package/dist/components/quickfilter/NSAQuickFilterDialog.d.ts +1 -1
  34. package/dist/components/quickfilter/NSAQuickFilterDialog.module.css +74 -74
  35. package/dist/layouts/NSALayout.d.ts +1 -1
  36. package/dist/layouts/NSASectionEdit.d.ts +1 -1
  37. package/dist/layouts/NSASectionEditTabPage.d.ts +1 -1
  38. package/dist/layouts/NSASectionEditTabPage.module.css +4 -4
  39. package/dist/layouts/NSASectionList.d.ts +3 -1
  40. package/dist/layouts/NSASectionList.js +14 -6
  41. package/dist/layouts/NSASectionList.js.map +1 -1
  42. package/dist/layouts/NSASectionList.module.css +31 -31
  43. package/dist/layouts/NSASectionView.d.ts +1 -1
  44. package/dist/layouts/NSASectionViewTabMore.d.ts +1 -1
  45. package/dist/layouts/NSASectionViewTabPage.d.ts +1 -1
  46. package/dist/layouts/NSASectionViewTabPage.js +1 -0
  47. package/dist/layouts/NSASectionViewTabPage.js.map +1 -1
  48. package/dist/layouts/NSASectionViewTabPage.module.css +47 -47
  49. package/dist/pages/NSAConsentPage.module.css +26 -26
  50. package/dist/pages/NSAEmailVerificationPage.d.ts +1 -1
  51. package/dist/pages/NSAHomePage.d.ts +1 -1
  52. package/dist/pages/NSAHomePage.module.css +41 -41
  53. package/dist/pages/NSALoginPage.d.ts +1 -1
  54. package/dist/pages/NSALoginPage.module.css +26 -26
  55. package/dist/pages/NSAPhoneVerificationPage.d.ts +1 -1
  56. package/dist/pages/NSAVerificationPage.d.ts +1 -1
  57. package/dist/pages/NSAVerificationPage.module.css +31 -31
  58. package/package.json +95 -95
  59. package/public/index.html +21 -21
  60. package/src/App.tsx +19 -19
  61. package/src/CTFRow.ts +7 -7
  62. package/src/FieldCacheService.tsx +84 -84
  63. package/src/IEntityInfo.ts +33 -33
  64. package/src/NSACacheService.ts +120 -120
  65. package/src/NSAFilterOperators.ts +92 -92
  66. package/src/NSARouterMaker.tsx +140 -140
  67. package/src/NSARouterMakerProps.ts +23 -23
  68. package/src/NSARouterMakerResult.ts +24 -24
  69. package/src/NSFRouterMaker.tsx +35 -35
  70. package/src/NSFRouterProps.ts +7 -7
  71. package/src/NSFRoutes.ts +30 -30
  72. package/src/Router.tsx +48 -48
  73. package/src/UseParams.tsx +17 -17
  74. package/src/components/NSAAccessListDialog.module.css +71 -71
  75. package/src/components/NSAAccessListDialog.tsx +178 -178
  76. package/src/components/NSABoxSecret.module.css +23 -23
  77. package/src/components/NSABoxSecret.tsx +264 -264
  78. package/src/components/NSAMasterMenu.module.css +250 -250
  79. package/src/components/NSAMasterMenu.tsx +169 -169
  80. package/src/components/NSAMasterMenuItem.tsx +250 -250
  81. package/src/components/NSAMessageListDialog.module.css +99 -99
  82. package/src/components/NSAMessageListDialog.tsx +142 -142
  83. package/src/components/NSANavigationGuard.tsx +79 -79
  84. package/src/components/NSAProductListDialog.module.css +44 -44
  85. package/src/components/NSAProductListDialog.tsx +88 -88
  86. package/src/components/NSATable.tsx +494 -494
  87. package/src/components/NSATaskBar.module.css +57 -57
  88. package/src/components/NSATaskBar.tsx +193 -193
  89. package/src/components/NSAUserDialog.module.css +67 -67
  90. package/src/components/NSAUserDialog.tsx +122 -122
  91. package/src/components/NSAWorkspaceListDialog.module.css +41 -41
  92. package/src/components/NSAWorkspaceListDialog.tsx +147 -147
  93. package/src/components/NSFBoxCategoryScope.tsx +52 -52
  94. package/src/components/NSFBoxField.tsx +37 -37
  95. package/src/components/NSFBoxSlot.tsx +71 -71
  96. package/src/components/NSFBoxWrapper.tsx +69 -69
  97. package/src/components/NSLabelSecret.tsx +37 -37
  98. package/src/components/quickfilter/NSAFilterBoxBase.tsx +89 -89
  99. package/src/components/quickfilter/NSAFilterBoxBoolean.tsx +66 -66
  100. package/src/components/quickfilter/NSAFilterBoxDate.tsx +110 -110
  101. package/src/components/quickfilter/NSAFilterBoxDateTime.tsx +110 -110
  102. package/src/components/quickfilter/NSAFilterBoxEnum.module.css +44 -44
  103. package/src/components/quickfilter/NSAFilterBoxEnum.tsx +79 -79
  104. package/src/components/quickfilter/NSAFilterBoxNumber.tsx +145 -145
  105. package/src/components/quickfilter/NSAFilterBoxString.tsx +83 -83
  106. package/src/components/quickfilter/NSAFilterBoxTime.tsx +106 -106
  107. package/src/components/quickfilter/NSAQuickFilterBar.module.css +19 -19
  108. package/src/components/quickfilter/NSAQuickFilterBar.tsx +142 -142
  109. package/src/components/quickfilter/NSAQuickFilterDialog.module.css +74 -74
  110. package/src/components/quickfilter/NSAQuickFilterDialog.tsx +260 -260
  111. package/src/css.d.ts +13 -13
  112. package/src/formatters/SecretFormatter.tsx +24 -24
  113. package/src/index.tsx +26 -26
  114. package/src/layouts/Actions.ts +146 -146
  115. package/src/layouts/CFTUtil.ts +18 -18
  116. package/src/layouts/NSALayout.tsx +744 -744
  117. package/src/layouts/NSALayout_Field.ts +125 -125
  118. package/src/layouts/NSASectionEdit.tsx +281 -281
  119. package/src/layouts/NSASectionEditTabPage.module.css +4 -4
  120. package/src/layouts/NSASectionEditTabPage.tsx +256 -256
  121. package/src/layouts/NSASectionList.module.css +31 -31
  122. package/src/layouts/NSASectionList.tsx +166 -147
  123. package/src/layouts/NSASectionView.tsx +98 -98
  124. package/src/layouts/NSASectionViewTabMore.tsx +78 -78
  125. package/src/layouts/NSASectionViewTabPage.module.css +47 -47
  126. package/src/layouts/NSASectionViewTabPage.tsx +400 -399
  127. package/src/main.ts +52 -52
  128. package/src/pages/NSAConsentPage.module.css +26 -26
  129. package/src/pages/NSAConsentPage.tsx +120 -120
  130. package/src/pages/NSAEmailVerificationPage.tsx +30 -30
  131. package/src/pages/NSAHomePage.module.css +41 -41
  132. package/src/pages/NSAHomePage.tsx +124 -124
  133. package/src/pages/NSALoginPage.module.css +26 -26
  134. package/src/pages/NSALoginPage.tsx +87 -87
  135. package/src/pages/NSAPhoneVerificationPage.tsx +94 -94
  136. package/src/pages/NSAVerificationPage.module.css +31 -31
  137. package/src/pages/NSAVerificationPage.tsx +185 -185
  138. package/src/pages/NSFCategoryEditPage.tsx +87 -87
  139. package/src/pages/NSFCategoryListPage.tsx +23 -23
  140. package/src/pages/NSFCategoryViewPage.tsx +23 -23
  141. package/src/pages/NSFEntities.ts +58 -58
  142. package/src/pages/PaymentRequired.tsx +80 -80
  143. package/tsconfig.json +43 -43
@@ -1,148 +1,167 @@
1
- import { EntityResolveResponseRow } from "namirasoft-field";
2
- import { IBaseComponentProps, NSBoxCombo, NSRow, NSSpace, NSSpaceSizeType, NSSplitter } from "namirasoft-site-react";
3
- import { Component, ReactNode, createRef } from "react";
4
- import { IEntityInfo } from "../IEntityInfo";
5
- import { NSARouterMakerResult } from "../NSARouterMakerResult";
6
- import { NSATable, NSATableUIProps } from "../components/NSATable";
7
- import Styles from "./NSASectionList.module.css";
8
- import { NSASectionViewTabPage, NSASectionViewTabPageUIProps } from "./NSASectionViewTabPage";
9
-
10
- export interface NSASectionListCustomProps<RowType extends { id: string }, RowTypeInput = RowType>
11
- {
12
- ui?: NSATableUIProps<RowType> & {
13
- modes?: { [name: string]: { getChild: (entity: IEntityInfo<RowType, RowTypeInput>) => JSX.Element, show_view?: boolean } };
14
- default_mode?: string;
15
- tab_page_view?: NSASectionViewTabPageUIProps<RowType>;
16
- };
17
- onIDsChanged?: () => void;
18
- children?: React.ReactNode;
19
- }
20
-
21
- export interface NSASectionListProps<RowType extends { id: string }, RowTypeInput = RowType> extends IBaseComponentProps, NSARouterMakerResult, NSASectionListCustomProps<RowType, RowTypeInput>
22
- {
23
- entity: IEntityInfo<RowType, RowTypeInput>;
24
- ctf: {
25
- enabled: boolean;
26
- rows: EntityResolveResponseRow | null;
27
- };
28
- children?: ReactNode;
29
- }
30
-
31
- export interface NSASectionListState
32
- {
33
- mode: string;
34
- selected_row_ids: string[];
35
- }
36
-
37
- export class NSASectionList<RowType extends { id: string }, RowTypeInput = RowType>
38
- extends Component<NSASectionListProps<RowType, RowTypeInput>, NSASectionListState>
39
- {
40
- public NSBoxCombo_Mode = createRef<NSBoxCombo>();
41
- public NSATable_Main = createRef<NSATable<RowType, RowTypeInput>>();
42
- public NSASectionViewTabPage_Ref = createRef<NSASectionViewTabPage<RowType, RowTypeInput>>();
43
-
44
- constructor(props: NSASectionListProps<RowType, RowTypeInput>)
45
- {
46
- super(props);
47
- this.state = { mode: props.ui?.default_mode ?? "", selected_row_ids: [] };
48
- }
49
-
50
- getSelectedIDs(): string[]
51
- {
52
- return this.NSATable_Main.current?.getSelectedIDs() ?? [];
53
- }
54
- getSelectedRows(): RowType[]
55
- {
56
- return this.NSATable_Main.current?.getSelectedRows() ?? [];
57
- }
58
-
59
- override render()
60
- {
61
- let table_renderer = () => (
62
- <NSATable<RowType, RowTypeInput>
63
- ref={this.NSATable_Main}
64
- entity={this.props.entity}
65
- ctf={this.props.ctf}
66
- url={this.props.url}
67
- ui={this.props.ui}
68
- classList={[Styles.nsa_table]}
69
- onSelectionChanged={() =>
70
- {
71
- this.props.onIDsChanged?.();
72
- this.setState({ selected_row_ids: this.getSelectedIDs() });
73
- }}
74
- />
75
- );
76
-
77
- let modes = this.props.ui?.modes ?? {};
78
- if (!modes)
79
- modes = {};
80
- if (!modes["Table"])
81
- modes = { Table: { getChild: table_renderer, show_view: true }, ...modes };
82
-
83
- let mode_names = Object.keys(modes);
84
- let mode_name_current = this.state.mode;
85
- if (!mode_names.includes(mode_name_current))
86
- mode_name_current = mode_names[0];
87
- let mode_current = modes[mode_name_current];
88
- let show_view = (mode_current.show_view ?? false);
89
- return (
90
- <>
91
- <div
92
- id={this.props.id}
93
- className={`${this.props.classList?.join(" ") ?? ""}`}
94
- style={{ ...this.props.style }}
95
- >
96
- {
97
- mode_names.length > 1 &&
98
- <>
99
- <NSRow style={{ justifyContent: "flex-end", alignItems: "center" }}>
100
- <div className={Styles.nsa_section_list_actions}>
101
- <NSBoxCombo
102
- ref={this.NSBoxCombo_Mode}
103
- title="Mode"
104
- hideHeader
105
- required
106
- searchable={false}
107
- placeholder=""
108
- defaultValue={mode_name_current}
109
- getOptions={() => mode_names.map(m => ({ value: m, title: m }))}
110
- multiple={false}
111
- style={{ width: "100px" }}
112
- onChanged={e =>
113
- {
114
- this.setState({ mode: e.getValueOne(false) ?? "" });
115
- }}
116
- />
117
- </div>
118
- </NSRow>
119
- <NSSpace size={NSSpaceSizeType.MINI} />
120
- </>
121
- }
122
- {
123
- show_view ?
124
- <NSSplitter
125
- storage_key={`ns-splitter-product:${this.props.entity.product_id}-entity:${this.props.entity.name}-height`}
126
- master_content={mode_current.getChild(this.props.entity)}
127
- detail_content={(
128
- this.state.selected_row_ids.length === 1 &&
129
- <NSASectionViewTabPage<RowType, RowTypeInput>
130
- key={this.state.selected_row_ids[0]}
131
- ref={this.NSASectionViewTabPage_Ref}
132
- {...this.props}
133
- ui={this.props.ui?.tab_page_view}
134
- model={{
135
- id: this.getSelectedIDs()[0],
136
- row: this.getSelectedRows()[0]
137
- }}
138
- />
139
- )}
140
- /> :
141
- mode_current.getChild(this.props.entity)
142
- }
143
- </div>
144
- {this.props.children}
145
- </>
146
- );
147
- }
1
+ import { EntityResolveResponseRow } from "namirasoft-field";
2
+ import { IBaseComponentProps, NSBoxCombo, NSRow, NSSpace, NSSpaceSizeType, NSSplitter } from "namirasoft-site-react";
3
+ import { Component, ReactNode, createRef } from "react";
4
+ import { IEntityInfo } from "../IEntityInfo";
5
+ import { NSARouterMakerResult } from "../NSARouterMakerResult";
6
+ import { NSATable, NSATableUIProps } from "../components/NSATable";
7
+ import Styles from "./NSASectionList.module.css";
8
+ import { NSASectionViewTabPage, NSASectionViewTabPageUIProps } from "./NSASectionViewTabPage";
9
+
10
+ export interface NSASectionListCustomProps<RowType extends { id: string }, RowTypeInput = RowType>
11
+ {
12
+ ui?: NSATableUIProps<RowType> & {
13
+ modes?: { [name: string]: { getChild: (entity: IEntityInfo<RowType, RowTypeInput>) => JSX.Element, show_view?: boolean } };
14
+ default_mode?: string;
15
+ tab_page_view?: NSASectionViewTabPageUIProps<RowType>;
16
+ getChildrenBefore?: (id: string, row: RowType | null) => ReactNode;
17
+ getChildrenAfter?: (id: string, row: RowType | null) => ReactNode;
18
+ };
19
+ onIDsChanged?: () => void;
20
+ children?: React.ReactNode;
21
+ }
22
+
23
+ export interface NSASectionListProps<RowType extends { id: string }, RowTypeInput = RowType> extends IBaseComponentProps, NSARouterMakerResult, NSASectionListCustomProps<RowType, RowTypeInput>
24
+ {
25
+ entity: IEntityInfo<RowType, RowTypeInput>;
26
+ ctf: {
27
+ enabled: boolean;
28
+ rows: EntityResolveResponseRow | null;
29
+ };
30
+ children?: ReactNode;
31
+ }
32
+
33
+ export interface NSASectionListState
34
+ {
35
+ mode: string;
36
+ selected_row_ids: string[];
37
+ }
38
+
39
+ export class NSASectionList<RowType extends { id: string }, RowTypeInput = RowType>
40
+ extends Component<NSASectionListProps<RowType, RowTypeInput>, NSASectionListState>
41
+ {
42
+ public NSBoxCombo_Mode = createRef<NSBoxCombo>();
43
+ public NSATable_Main = createRef<NSATable<RowType, RowTypeInput>>();
44
+ public NSASectionViewTabPage_Ref = createRef<NSASectionViewTabPage<RowType, RowTypeInput>>();
45
+
46
+ constructor(props: NSASectionListProps<RowType, RowTypeInput>)
47
+ {
48
+ super(props);
49
+ this.state = { mode: props.ui?.default_mode ?? "", selected_row_ids: [] };
50
+ }
51
+
52
+ getSelectedIDs(): string[]
53
+ {
54
+ return this.NSATable_Main.current?.getSelectedIDs() ?? [];
55
+ }
56
+ getSelectedRows(): RowType[]
57
+ {
58
+ return this.NSATable_Main.current?.getSelectedRows() ?? [];
59
+ }
60
+
61
+ override render()
62
+ {
63
+ let table_renderer = () => (
64
+ <NSATable<RowType, RowTypeInput>
65
+ ref={this.NSATable_Main}
66
+ entity={this.props.entity}
67
+ ctf={this.props.ctf}
68
+ url={this.props.url}
69
+ ui={this.props.ui}
70
+ classList={[Styles.nsa_table]}
71
+ onSelectionChanged={() =>
72
+ {
73
+ this.props.onIDsChanged?.();
74
+ this.setState({ selected_row_ids: this.getSelectedIDs() });
75
+ }}
76
+ />
77
+ );
78
+
79
+ let modes = this.props.ui?.modes ?? {};
80
+ if (!modes)
81
+ modes = {};
82
+ if (!modes["Table"])
83
+ modes = { Table: { getChild: table_renderer, show_view: true }, ...modes };
84
+
85
+ let mode_names = Object.keys(modes);
86
+ let mode_name_current = this.state.mode;
87
+ if (!mode_names.includes(mode_name_current))
88
+ mode_name_current = mode_names[0];
89
+ let mode_current = modes[mode_name_current];
90
+ let show_view = (mode_current.show_view ?? false);
91
+ return (
92
+ <>
93
+ <div
94
+ id={this.props.id}
95
+ className={`${this.props.classList?.join(" ") ?? ""}`}
96
+ style={{ ...this.props.style }}
97
+ >
98
+ {
99
+ mode_names.length > 1 &&
100
+ <>
101
+ <NSRow style={{ justifyContent: "flex-end", alignItems: "center" }}>
102
+ <div className={Styles.nsa_section_list_actions}>
103
+ <NSBoxCombo
104
+ ref={this.NSBoxCombo_Mode}
105
+ title="Mode"
106
+ hideHeader
107
+ required
108
+ searchable={false}
109
+ placeholder=""
110
+ defaultValue={mode_name_current}
111
+ getOptions={() => mode_names.map(m => ({ value: m, title: m }))}
112
+ multiple={false}
113
+ style={{ width: "100px" }}
114
+ onChanged={e =>
115
+ {
116
+ this.setState({ mode: e.getValueOne(false) ?? "" });
117
+ }}
118
+ />
119
+ </div>
120
+ </NSRow>
121
+ <NSSpace size={NSSpaceSizeType.MINI} />
122
+ </>
123
+ }
124
+ {
125
+ show_view ?
126
+ <NSSplitter
127
+ storage_key={`ns-splitter-product:${this.props.entity.product_id}-entity:${this.props.entity.name}-height`}
128
+ master_content={mode_current.getChild(this.props.entity)}
129
+ detail_content={
130
+ (() =>
131
+ {
132
+ let _id = this.getSelectedIDs()[0];
133
+ let _row = this.getSelectedRows()[0];
134
+
135
+ if (this.state.selected_row_ids.length === 1)
136
+ return <>
137
+ {
138
+ this.props.ui?.getChildrenBefore &&
139
+ this.props.ui?.getChildrenBefore(_id, _row)
140
+ }
141
+ <NSASectionViewTabPage<RowType, RowTypeInput>
142
+ key={this.state.selected_row_ids[0]}
143
+ ref={this.NSASectionViewTabPage_Ref}
144
+ {...this.props}
145
+ ui={this.props.ui?.tab_page_view}
146
+ model={{
147
+ id: _id,
148
+ row: _row
149
+ }}
150
+ />
151
+ {
152
+ this.props.ui?.getChildrenAfter &&
153
+ this.props.ui?.getChildrenAfter(_id, _row)
154
+ }
155
+ </>;
156
+ return <></>;
157
+ })()
158
+ }
159
+ /> :
160
+ mode_current.getChild(this.props.entity)
161
+ }
162
+ </div>
163
+ {this.props.children}
164
+ </>
165
+ );
166
+ }
148
167
  }
@@ -1,99 +1,99 @@
1
- import { EntityResolveResponseRow } from "namirasoft-field";
2
- import { IBaseComponentProps, NSLoading } from "namirasoft-site-react";
3
- import { Component, createRef, ReactNode } from "react";
4
- import { IEntityInfo } from "../IEntityInfo";
5
- import { NSARouterMakerResult } from "../NSARouterMakerResult";
6
- import { NSASectionViewTabPage, NSASectionViewTabPageUIProps } from "./NSASectionViewTabPage";
7
-
8
- export interface NSASectionViewCutomProps<RowType> extends IBaseComponentProps
9
- {
10
- ui?: {
11
- tab_page_view?: NSASectionViewTabPageUIProps<RowType>;
12
- getChildrenBefore?: (id: string, row: RowType) => ReactNode;
13
- getChildrenAfter?: (id: string, row: RowType) => ReactNode;
14
- };
15
- onRowLoaded?: (row: RowType) => void;
16
- children?: React.ReactNode;
17
- }
18
-
19
- export interface NSASectionViewProps<RowType extends { id: string }, RowTypeInput = RowType> extends NSARouterMakerResult, NSASectionViewCutomProps<RowType>
20
- {
21
- entity: IEntityInfo<RowType, RowTypeInput>;
22
- ctf: {
23
- enabled: boolean;
24
- rows: EntityResolveResponseRow | null;
25
- };
26
- model: {
27
- id: string | null;
28
- row: RowType | null;
29
- };
30
- }
31
-
32
- interface NSASectionViewState<RowType>
33
- {
34
- row: RowType | null;
35
- }
36
-
37
- export class NSASectionView<RowType extends { id: string }, RowTypeInput = RowType> extends Component<NSASectionViewProps<RowType, RowTypeInput>, NSASectionViewState<RowType>>
38
- {
39
- NSASectionViewTabPage_Ref = createRef<NSASectionViewTabPage<RowType, RowTypeInput>>();
40
-
41
- constructor(props: NSASectionViewProps<RowType, RowTypeInput>)
42
- {
43
- super(props);
44
-
45
- this.state = { row: this.props.model.row };
46
-
47
- this.reload = this.reload.bind(this);
48
- this.getRow = this.getRow.bind(this);
49
- }
50
- reload()
51
- {
52
- this.setState(prev => ({ ...prev, row: null }));
53
- if (this.props.model.id)
54
- if (this.props.entity.server.get)
55
- this.props.entity.server.get(this.props.model.id).then(row =>
56
- {
57
- this.setState(prev => ({ ...prev, row }), () =>
58
- {
59
- this.props.onRowLoaded?.(row);
60
- });
61
- }).catch(() => { });
62
- }
63
- getRow()
64
- {
65
- return this.state.row;
66
- }
67
- override componentDidMount()
68
- {
69
- if (this.props.model.id)
70
- if (!this.props.model.row || this.props.model.row.id !== this.props.model.id)
71
- this.reload();
72
- }
73
- override render()
74
- {
75
- if (this.props.model.id && this.state.row != null)
76
- return (
77
- <div
78
- id={this.props.id}
79
- className={`${this.props.classList?.join(" ") ?? ""}`}
80
- style={{ ...this.props.style }}
81
- >
82
- {this.props.ui?.getChildrenBefore && this.props.ui?.getChildrenBefore(this.props.model.id, this.state.row)}
83
- <NSASectionViewTabPage<RowType, RowTypeInput>
84
- ref={this.NSASectionViewTabPage_Ref}
85
- {...this.props}
86
- model={{
87
- id: this.props.model.id,
88
- row: this.state.row
89
- }}
90
- ui={this.props.ui?.tab_page_view}
91
- />
92
- {this.props.ui?.getChildrenAfter && this.props.ui?.getChildrenAfter(this.props.model.id, this.state.row)}
93
- {this.props.children}
94
- </div>
95
- );
96
-
97
- return <NSLoading></NSLoading>;
98
- }
1
+ import { EntityResolveResponseRow } from "namirasoft-field";
2
+ import { IBaseComponentProps, NSLoading } from "namirasoft-site-react";
3
+ import { Component, createRef, ReactNode } from "react";
4
+ import { IEntityInfo } from "../IEntityInfo";
5
+ import { NSARouterMakerResult } from "../NSARouterMakerResult";
6
+ import { NSASectionViewTabPage, NSASectionViewTabPageUIProps } from "./NSASectionViewTabPage";
7
+
8
+ export interface NSASectionViewCutomProps<RowType> extends IBaseComponentProps
9
+ {
10
+ ui?: {
11
+ tab_page_view?: NSASectionViewTabPageUIProps<RowType>;
12
+ getChildrenBefore?: (id: string, row: RowType) => ReactNode;
13
+ getChildrenAfter?: (id: string, row: RowType) => ReactNode;
14
+ };
15
+ onRowLoaded?: (row: RowType) => void;
16
+ children?: React.ReactNode;
17
+ }
18
+
19
+ export interface NSASectionViewProps<RowType extends { id: string }, RowTypeInput = RowType> extends NSARouterMakerResult, NSASectionViewCutomProps<RowType>
20
+ {
21
+ entity: IEntityInfo<RowType, RowTypeInput>;
22
+ ctf: {
23
+ enabled: boolean;
24
+ rows: EntityResolveResponseRow | null;
25
+ };
26
+ model: {
27
+ id: string | null;
28
+ row: RowType | null;
29
+ };
30
+ }
31
+
32
+ interface NSASectionViewState<RowType>
33
+ {
34
+ row: RowType | null;
35
+ }
36
+
37
+ export class NSASectionView<RowType extends { id: string }, RowTypeInput = RowType> extends Component<NSASectionViewProps<RowType, RowTypeInput>, NSASectionViewState<RowType>>
38
+ {
39
+ NSASectionViewTabPage_Ref = createRef<NSASectionViewTabPage<RowType, RowTypeInput>>();
40
+
41
+ constructor(props: NSASectionViewProps<RowType, RowTypeInput>)
42
+ {
43
+ super(props);
44
+
45
+ this.state = { row: this.props.model.row };
46
+
47
+ this.reload = this.reload.bind(this);
48
+ this.getRow = this.getRow.bind(this);
49
+ }
50
+ reload()
51
+ {
52
+ this.setState(prev => ({ ...prev, row: null }));
53
+ if (this.props.model.id)
54
+ if (this.props.entity.server.get)
55
+ this.props.entity.server.get(this.props.model.id).then(row =>
56
+ {
57
+ this.setState(prev => ({ ...prev, row }), () =>
58
+ {
59
+ this.props.onRowLoaded?.(row);
60
+ });
61
+ }).catch(() => { });
62
+ }
63
+ getRow()
64
+ {
65
+ return this.state.row;
66
+ }
67
+ override componentDidMount()
68
+ {
69
+ if (this.props.model.id)
70
+ if (!this.props.model.row || this.props.model.row.id !== this.props.model.id)
71
+ this.reload();
72
+ }
73
+ override render()
74
+ {
75
+ if (this.props.model.id && this.state.row != null)
76
+ return (
77
+ <div
78
+ id={this.props.id}
79
+ className={`${this.props.classList?.join(" ") ?? ""}`}
80
+ style={{ ...this.props.style }}
81
+ >
82
+ {this.props.ui?.getChildrenBefore && this.props.ui?.getChildrenBefore(this.props.model.id, this.state.row)}
83
+ <NSASectionViewTabPage<RowType, RowTypeInput>
84
+ ref={this.NSASectionViewTabPage_Ref}
85
+ {...this.props}
86
+ model={{
87
+ id: this.props.model.id,
88
+ row: this.state.row
89
+ }}
90
+ ui={this.props.ui?.tab_page_view}
91
+ />
92
+ {this.props.ui?.getChildrenAfter && this.props.ui?.getChildrenAfter(this.props.model.id, this.state.row)}
93
+ {this.props.children}
94
+ </div>
95
+ );
96
+
97
+ return <NSLoading></NSLoading>;
98
+ }
99
99
  }