@solidstarters/solid-core-ui 1.1.21 → 1.1.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 (95) hide show
  1. package/dist/components/common/SolidBreadcrumb.d.ts +2 -10
  2. package/dist/components/common/SolidBreadcrumb.d.ts.map +1 -1
  3. package/dist/components/common/SolidBreadcrumb.js +28 -8
  4. package/dist/components/common/SolidBreadcrumb.js.map +1 -1
  5. package/dist/components/core/common/SolidGlobalSearchElement.d.ts.map +1 -1
  6. package/dist/components/core/common/SolidGlobalSearchElement.js +1 -0
  7. package/dist/components/core/common/SolidGlobalSearchElement.js.map +1 -1
  8. package/dist/components/core/common/SolidViewLayoutManager.d.ts +13 -0
  9. package/dist/components/core/common/SolidViewLayoutManager.d.ts.map +1 -0
  10. package/dist/components/core/common/SolidViewLayoutManager.js +90 -0
  11. package/dist/components/core/common/SolidViewLayoutManager.js.map +1 -0
  12. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.d.ts.map +1 -1
  13. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.js +6 -4
  14. package/dist/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.js.map +1 -1
  15. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.d.ts.map +1 -1
  16. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.js +5 -3
  17. package/dist/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.js.map +1 -1
  18. package/dist/components/core/form/SolidFormLayouts.d.ts.map +1 -1
  19. package/dist/components/core/form/SolidFormLayouts.js +6 -2
  20. package/dist/components/core/form/SolidFormLayouts.js.map +1 -1
  21. package/dist/components/core/form/SolidFormView.d.ts.map +1 -1
  22. package/dist/components/core/form/SolidFormView.js +157 -44
  23. package/dist/components/core/form/SolidFormView.js.map +1 -1
  24. package/dist/components/core/form/fields/ISolidField.d.ts +2 -0
  25. package/dist/components/core/form/fields/ISolidField.d.ts.map +1 -1
  26. package/dist/components/core/form/fields/SolidSelectionStaticField.d.ts.map +1 -1
  27. package/dist/components/core/form/fields/SolidSelectionStaticField.js +3 -1
  28. package/dist/components/core/form/fields/SolidSelectionStaticField.js.map +1 -1
  29. package/dist/components/core/form/fields/SolidShortTextField.d.ts.map +1 -1
  30. package/dist/components/core/form/fields/SolidShortTextField.js +4 -1
  31. package/dist/components/core/form/fields/SolidShortTextField.js.map +1 -1
  32. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.d.ts.map +1 -1
  33. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js +0 -2
  34. package/dist/components/core/form/fields/relations/SolidRelationManyToManyField.js.map +1 -1
  35. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js +2 -2
  36. package/dist/components/core/form/fields/relations/SolidRelationManyToOneField.js.map +1 -1
  37. package/dist/components/core/list/SolidListView.js +1 -1
  38. package/dist/components/core/model/CreateModel.d.ts.map +1 -1
  39. package/dist/components/core/model/CreateModel.js +3 -9
  40. package/dist/components/core/model/CreateModel.js.map +1 -1
  41. package/dist/components/core/model/FieldMetaData.d.ts +1 -1
  42. package/dist/components/core/model/FieldMetaData.d.ts.map +1 -1
  43. package/dist/components/core/model/FieldMetaData.js +2 -2
  44. package/dist/components/core/model/FieldMetaData.js.map +1 -1
  45. package/dist/components/core/model/FieldMetaDataForm.d.ts +1 -1
  46. package/dist/components/core/model/FieldMetaDataForm.d.ts.map +1 -1
  47. package/dist/components/core/model/FieldMetaDataForm.js +17 -9
  48. package/dist/components/core/model/FieldMetaDataForm.js.map +1 -1
  49. package/dist/components/core/model/ModelMetaData.js +5 -5
  50. package/dist/components/core/model/ModelMetaData.js.map +1 -1
  51. package/dist/components/core/module/CreateModule.d.ts.map +1 -1
  52. package/dist/components/core/module/CreateModule.js +1 -5
  53. package/dist/components/core/module/CreateModule.js.map +1 -1
  54. package/dist/components/core/users/CreateUser.d.ts.map +1 -1
  55. package/dist/components/core/users/CreateUser.js +1 -5
  56. package/dist/components/core/users/CreateUser.js.map +1 -1
  57. package/dist/components/layout/AppSidebar.d.ts.map +1 -1
  58. package/dist/components/layout/AppSidebar.js +21 -34
  59. package/dist/components/layout/AppSidebar.js.map +1 -1
  60. package/dist/helpers/AppTitle.d.ts.map +1 -1
  61. package/dist/helpers/AppTitle.js.map +1 -1
  62. package/dist/helpers/registry.d.ts +6 -0
  63. package/dist/helpers/registry.d.ts.map +1 -0
  64. package/dist/helpers/registry.js +37 -0
  65. package/dist/helpers/registry.js.map +1 -0
  66. package/dist/index.d.ts +3 -1
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +2 -0
  69. package/dist/index.js.map +1 -1
  70. package/package.json +1 -1
  71. package/src/components/common/SolidBreadcrumb.tsx +38 -14
  72. package/src/components/core/common/SolidGlobalSearchElement.tsx +2 -0
  73. package/src/components/core/common/SolidViewLayoutManager.ts +85 -0
  74. package/src/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction.tsx +11 -1
  75. package/src/components/core/extension/solid-core/moduleMetadata/list/GenerateModuleCodeRowAction.tsx +16 -7
  76. package/src/components/core/form/SolidFormLayouts.tsx +6 -3
  77. package/src/components/core/form/SolidFormView.tsx +180 -38
  78. package/src/components/core/form/fields/ISolidField.tsx +3 -1
  79. package/src/components/core/form/fields/SolidSelectionStaticField.tsx +2 -1
  80. package/src/components/core/form/fields/SolidShortTextField.tsx +4 -2
  81. package/src/components/core/form/fields/relations/SolidRelationManyToManyField.tsx +0 -2
  82. package/src/components/core/form/fields/relations/SolidRelationManyToOneField.tsx +6 -6
  83. package/src/components/core/list/SolidListView.tsx +1 -1
  84. package/src/components/core/model/CreateModel.tsx +8 -12
  85. package/src/components/core/model/FieldMetaData.tsx +2 -2
  86. package/src/components/core/model/FieldMetaDataForm.tsx +338 -332
  87. package/src/components/core/model/ModelMetaData.tsx +5 -5
  88. package/src/components/core/module/CreateModule.tsx +1 -6
  89. package/src/components/core/users/CreateUser.tsx +1 -6
  90. package/src/components/layout/AppSidebar.tsx +3 -21
  91. package/src/helpers/AppTitle.tsx +0 -2
  92. package/src/helpers/registry.ts +52 -0
  93. package/src/index.ts +16 -1
  94. package/src/types/index.d.ts +26 -1
  95. package/src/types/solid-core.d.ts +90 -0
@@ -256,11 +256,11 @@ const ModelMetaData = React.forwardRef(({ modelMetaData, setModelMetaData, allMo
256
256
 
257
257
  }, [formik.values])
258
258
 
259
- useEffect(() => {
260
- if (formik.dirty) {
261
- setIsDirty(true);
262
- }
263
- }, [formik.dirty]);
259
+ // useEffect(() => {
260
+ // if (formik.dirty) {
261
+ // setIsDirty(true);
262
+ // }
263
+ // }, [formik.dirty]);
264
264
 
265
265
  return (
266
266
 
@@ -375,11 +375,6 @@ const CreateModule = ({ data }: any) => {
375
375
  )
376
376
  }
377
377
 
378
- const breadcrumbData = [
379
- { label: 'Module', link: '/admin/core/solid-core/model-metadata/list' },
380
- { label: pathname.includes('new') ? 'Create Module' : 'Edit Module' },
381
- ];
382
-
383
378
  return (
384
379
  <div className="solid-form-wrapper">
385
380
  <Toast ref={toast} />
@@ -418,7 +413,7 @@ const CreateModule = ({ data }: any) => {
418
413
  </>
419
414
  }
420
415
  </div>
421
- <SolidBreadcrumb breadcrumbItems={breadcrumbData} />
416
+ <SolidBreadcrumb />
422
417
  {/* <div className="solid-form-stepper">
423
418
  <SolidFormStepper />
424
419
  </div> */}
@@ -231,11 +231,6 @@ const CreateUser = ({ data, params }: any) => {
231
231
  }
232
232
  }, [isSuccess, isDeleteUserSuceess, isUpdateuserSuceess])
233
233
 
234
- const breadcrumbData = [
235
- { label: 'User', link: '/admin/core/solid-core/model-metadata/list' },
236
- { label: params.id === "new" ? 'Create User' : 'Edit User' },
237
- ];
238
-
239
234
  return (
240
235
  <div className="solid-form-wrapper">
241
236
  <Toast ref={toast} />
@@ -274,7 +269,7 @@ const CreateUser = ({ data, params }: any) => {
274
269
  </>
275
270
  )}
276
271
  </div>
277
- <SolidBreadcrumb breadcrumbItems={breadcrumbData} />
272
+ <SolidBreadcrumb />
278
273
  {/* <div className="solid-form-stepper">
279
274
  <SolidFormStepper />
280
275
  </div> */}
@@ -10,6 +10,7 @@ import UserProfileMenu from "./user-profile-menu";
10
10
  import Image from "next/image";
11
11
  import AppBuilderSvg from '../../resources/images/menu/app-builder.svg'
12
12
  import SettingImage from '../../resources/images/Navigation/settings.png'
13
+ import { Avatar } from "primereact/avatar";
13
14
 
14
15
  // import menu from "@/helpers/menu";
15
16
 
@@ -169,26 +170,7 @@ const AppSidebar = () => {
169
170
  // src={`/images/menu/app-builder.svg`}
170
171
  // alt={m.title}
171
172
  // />
172
- ((
173
- <div
174
- style={{
175
- width: "40px",
176
- height: "40px",
177
- display: "flex",
178
- alignItems: "center",
179
- justifyContent: "center",
180
- backgroundColor: "#722ED1",
181
- color: "white",
182
- fontWeight: "bold",
183
- borderRadius: "50%",
184
- fontSize: "18px",
185
- textTransform: "uppercase",
186
- cursor: "pointer",
187
- }}
188
- >
189
- {m.title.charAt(0)}
190
- </div>
191
- ))
173
+ <Avatar label={m.title.charAt(0)}shape="circle" style={{backgroundColor:'var(--primary-color)'}}/>
192
174
  }
193
175
  </a>
194
176
  </div>
@@ -196,7 +178,7 @@ const AppSidebar = () => {
196
178
  })}
197
179
  </div>
198
180
 
199
- <UserProfileMenu></UserProfileMenu>
181
+ {/* <UserProfileMenu></UserProfileMenu> */}
200
182
  </div>
201
183
  {currentMenu && (
202
184
  <div className={`sidebar-right ${visibleNavbar ? "open" : ""}`}>
@@ -1,5 +1,3 @@
1
- import React from 'react'
2
-
3
1
  export const AppTitle = ({ title }: { title: any }) => {
4
2
  const appTitle = title ? title?.data?.appTitle : "Solid Starters";
5
3
  return (
@@ -0,0 +1,52 @@
1
+ import React from "react";
2
+
3
+ type ExtensionRegistry = {
4
+ components: Record<string, React.ComponentType<any>>;
5
+ functions: Record<string, (...args: any[]) => any>;
6
+ };
7
+
8
+ const extensionRegistry: ExtensionRegistry = {
9
+ components: {},
10
+ functions: {},
11
+ };
12
+
13
+ export const registerExtensionComponent = (name: string, component: React.ComponentType<any>) => {
14
+ // console.log(`registerExtensionComponent invoked... ${name}`);
15
+ extensionRegistry.components[name] = component;
16
+ };
17
+
18
+ export const registerExtensionFunction = (name: string, fn: (...args: any[]) => any) => {
19
+ // console.log(`registerExtensionFunction invoked... ${name}`);
20
+ extensionRegistry.functions[name] = fn;
21
+ };
22
+
23
+ export const getExtensionComponent = (name: string): React.ComponentType<any> | null => {
24
+ if (extensionRegistry.components[name]) {
25
+ return extensionRegistry.components[name];
26
+ }
27
+
28
+ return null;
29
+
30
+ // const extensionsPath = process.env.NEXT_PUBLIC_SOLID_EXTENSIONS_PATH || "";
31
+
32
+ // // Ensure the environment variable is set
33
+ // if (!extensionsPath) {
34
+ // console.warn(`No overrides path found. Using default components.`);
35
+ // return () => React.createElement("div", { className: "error-message" }, "Loading dynamic component failed (extensions path not found)");
36
+ // }
37
+
38
+ // try {
39
+ // // return dynamic(() => import(`@solid-extensions/${name}`).then((mod) => mod.default));
40
+ // return dynamic(() => import(`${extensionsPath}/${name}`).then((mod) => mod.default));
41
+ // } catch (error) {
42
+ // console.warn(`Component ${name} not found, returning fallback.`);
43
+ // }
44
+
45
+ // // Return an empty component
46
+ // return () => React.createElement("div", { className: "error-message" }, "Loading dynamic component failed (component not found)");
47
+ };
48
+
49
+ export const getExtensionFunction = (name: string) => {
50
+ // console.log(`Registry state: `, extensionRegistry);
51
+ return extensionRegistry.functions[name];
52
+ };
package/src/index.ts CHANGED
@@ -219,6 +219,7 @@ export { NotFound } from '@/components/common/NotFound'
219
219
  import Error from '@/components/common/error';
220
220
  export { Error };
221
221
  export { SolidFormStepper } from '@/components/common/SolidFormStepper'
222
+ export { SolidViewLayoutManager } from '@/components/core/common/SolidViewLayoutManager';
222
223
 
223
224
  // export { SolidListViewOptions } from '@/components/core/common/SolidListViewOptions';
224
225
  export { SolidConfigureLayoutElement } from '@/components/core/common/SolidConfigureLayoutElement';
@@ -375,6 +376,7 @@ export { addCommasToAmount, calculateDaysOfStay, getSingularAndPlural } from '@/
375
376
  // export * from '@/helpers/menu';
376
377
  export { createPermission, deletePermission, updatePermission } from '@/helpers/permissions';
377
378
  export { revalidateTag } from '@/helpers/revalidate';
379
+ export { registerExtensionComponent, registerExtensionFunction } from '@/helpers/registry';
378
380
 
379
381
  // redux
380
382
  // ├── api
@@ -615,7 +617,20 @@ export { default as userReducer } from '@/redux/features/userSlice';
615
617
  export { default as GenerateModelCodeRowAction } from '@/components/core/extension/solid-core/modelMetadata/list/GenerateModelCodeRowAction'
616
618
 
617
619
  // types
618
- export type { LayoutConfig } from '@/types';
620
+ export type {
621
+ LayoutConfig,
622
+ CommonEntity,
623
+ ModelMetadata,
624
+ ModuleMetadata,
625
+ FieldMetadata,
626
+ FieldsMetadata,
627
+ SolidView,
628
+ LayoutAttribute,
629
+ LayoutNode,
630
+ LayoutNodeType,
631
+ SolidUiEvents,
632
+ SolidUiEvent
633
+ } from '@/types';
619
634
  export { GeneralSettings } from '@/components/common/GeneralSettings';
620
635
 
621
636
  export { default as authProviders } from '@/nextAuth/authProviders'
@@ -14,6 +14,20 @@ import {
14
14
  AppConfigProps
15
15
  } from './layout';
16
16
 
17
+ import {
18
+ CommonEntity,
19
+ ModelMetadata,
20
+ ModuleMetadata,
21
+ FieldMetadata,
22
+ FieldsMetadata,
23
+ SolidView,
24
+ LayoutAttribute,
25
+ LayoutNode,
26
+ LayoutNodeType,
27
+ SolidUiEvents,
28
+ SolidUiEvent
29
+ } from './solid-core';
30
+
17
31
  type ChildContainerProps = {
18
32
  children: ReactNode;
19
33
  };
@@ -29,5 +43,16 @@ export type {
29
43
  LayoutContextProps,
30
44
  ChildContainerProps,
31
45
  AppConfigProps,
32
- MenuContextProps
46
+ MenuContextProps,
47
+ CommonEntity,
48
+ ModelMetadata,
49
+ ModuleMetadata,
50
+ FieldMetadata,
51
+ FieldsMetadata,
52
+ SolidView,
53
+ LayoutAttribute,
54
+ LayoutNode,
55
+ LayoutNodeType,
56
+ SolidUiEvents,
57
+ SolidUiEvent
33
58
  };
@@ -0,0 +1,90 @@
1
+ // Base type of all Solid entities
2
+ export type CommonEntity = {
3
+ id: number;
4
+ createdAt: string;
5
+ updatedAt: string;
6
+ deletedAt: string | null;
7
+ deletedTracker: string;
8
+ };
9
+
10
+ // Model
11
+ export type ModelMetadata = CommonEntity & {
12
+ singularName: string;
13
+ tableName: string;
14
+ pluralName: string;
15
+ displayName: string;
16
+ description: string;
17
+ dataSource: string;
18
+ dataSourceType: string;
19
+ enableSoftDelete: boolean;
20
+ enableAuditTracking: boolean;
21
+ internationalisation: boolean;
22
+ isSystem: boolean;
23
+ userKeyField: string | null;
24
+ };
25
+
26
+ // Module
27
+ export type ModuleMetadata = CommonEntity & {
28
+ displayName: string;
29
+ name: string;
30
+ description: string;
31
+ menuIconUrl: string | null;
32
+ menuSequenceNumber: number;
33
+ defaultDataSource: string;
34
+ isSystem: boolean;
35
+ };
36
+
37
+ // Define a general Field type with id and name as required properties
38
+ export type FieldMetadata = CommonEntity & {
39
+ id: number;
40
+ name: string;
41
+ displayName: string;
42
+
43
+ // For now we have kept it flexible allowing any number of other key / value pairs...
44
+ [key: string]: any;
45
+ };
46
+
47
+ // Represents a collection of fields.
48
+ export type FieldsMetadata = {
49
+ [key: string]: Field;
50
+ };
51
+
52
+ // Solid View
53
+ export type SolidView = CommonEntity & {
54
+ name: string;
55
+ displayName: string;
56
+ type: string;
57
+ // TODO: maybe change this in the future to set this to a json object...
58
+ context: string;
59
+ layout: LayoutNode;
60
+ model: Model;
61
+ module: Module;
62
+ };
63
+
64
+ // Layout Types
65
+ export type LayoutAttribute = {
66
+ name: string;
67
+ label?: string;
68
+ className?: string;
69
+ inlineCreate?: string;
70
+ };
71
+
72
+ // Generic representation of any node in our layout
73
+ export type LayoutNodeType = "form" | "sheet" | "notebook" | "page" | "row" | "column" | "field";
74
+ export type LayoutNode = {
75
+ type: LayoutNodeType;
76
+ attrs: LayoutAttribute;
77
+ children?: LayoutNode[];
78
+ };
79
+
80
+ // Event type
81
+ export type SolidUiEvents = "onFieldChange" | "onFieldBlur";
82
+ export type SolidUiEvent = {
83
+ type: SolidUiEvents;
84
+ modifiedField: string;
85
+ modifiedFieldValue: any;
86
+ // This comes from Formik...
87
+ formData: Record<string, any>;
88
+ viewMetadata: SolidView;
89
+ fieldsMetadata: FieldsMetadata;
90
+ };