@solidstarters/create-solid-app 1.2.15 → 1.2.16

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 (123) hide show
  1. package/helpers.js +2 -0
  2. package/package.json +1 -1
  3. package/templates/nest-template/package-lock.json +8 -8
  4. package/templates/nest-template/package.json +2 -2
  5. package/templates/next-template/app/GlobalProvider.tsx +4 -0
  6. package/templates/next-template/app/admin/core/[moduleName]/home/page.tsx +3 -2
  7. package/templates/next-template/app/admin/extensions/BookSimilarTitles.tsx +63 -0
  8. package/templates/next-template/app/admin/extensions/ImageGrid12Column.tsx +132 -0
  9. package/templates/next-template/app/admin/extensions/bookFormViewBlurHandler.ts +21 -0
  10. package/templates/next-template/app/admin/extensions/bookFormViewChangeHandler.ts +42 -0
  11. package/templates/next-template/app/layout.tsx +3 -15
  12. package/templates/next-template/app/solid-extensions.ts +13 -0
  13. package/templates/next-template/dot-templates/dot.gitignore.template +2 -0
  14. package/templates/next-template/package-lock.json +1023 -12
  15. package/templates/next-template/package.json +2 -1
  16. package/templates/next-template/app/error.tsx +0 -30
  17. package/templates/next-template/app/favicon.ico +0 -0
  18. package/templates/next-template/app/globals.css +0 -2516
  19. package/templates/next-template/app/head.tsx +0 -17
  20. package/templates/next-template/app/loading.tsx +0 -10
  21. package/templates/next-template/app/not-found.tsx +0 -25
  22. package/templates/next-template/app/page.module.css +0 -229
  23. package/templates/next-template/app/page.tsx +0 -11
  24. package/templates/next-template/app/solid-global.css +0 -2
  25. package/templates/next-template/app/solid-stylesheet.css +0 -25
  26. package/templates/next-template/public/images/AvatarDemo.png +0 -0
  27. package/templates/next-template/public/images/Footerbg.png +0 -0
  28. package/templates/next-template/public/images/LoginBanner.png +0 -0
  29. package/templates/next-template/public/images/Navigation/Level.svg +0 -5
  30. package/templates/next-template/public/images/Navigation/Presure.svg +0 -7
  31. package/templates/next-template/public/images/Navigation/Temperature.svg +0 -13
  32. package/templates/next-template/public/images/Navigation/settings.png +0 -0
  33. package/templates/next-template/public/images/Profile/Avatar.png +0 -0
  34. package/templates/next-template/public/images/SS-Logo-1 1.png +0 -0
  35. package/templates/next-template/public/images/activity.svg +0 -3
  36. package/templates/next-template/public/images/app-builder.png +0 -0
  37. package/templates/next-template/public/images/auth/solid-left-layout-bg.png +0 -0
  38. package/templates/next-template/public/images/auth/solid-login-light.png +0 -0
  39. package/templates/next-template/public/images/auth/solid-right-layout-bg.png +0 -0
  40. package/templates/next-template/public/images/clog-wheel.png +0 -0
  41. package/templates/next-template/public/images/dark-mode.png +0 -0
  42. package/templates/next-template/public/images/dashboard/Ellipse 1.svg +0 -10
  43. package/templates/next-template/public/images/dashboard/Rectangle 17.svg +0 -10
  44. package/templates/next-template/public/images/dashboard/Rectangle 25.svg +0 -11
  45. package/templates/next-template/public/images/dashboard/image 5.svg +0 -9
  46. package/templates/next-template/public/images/eye-icon.png +0 -0
  47. package/templates/next-template/public/images/fb.svg +0 -3
  48. package/templates/next-template/public/images/fileReader/image-jpg.png +0 -0
  49. package/templates/next-template/public/images/filter-icon.png +0 -0
  50. package/templates/next-template/public/images/form/user.png +0 -0
  51. package/templates/next-template/public/images/iam.png +0 -0
  52. package/templates/next-template/public/images/icons/icon-activity.svg +0 -3
  53. package/templates/next-template/public/images/icons/icon-calender.svg +0 -3
  54. package/templates/next-template/public/images/icons/icon-graph.svg +0 -3
  55. package/templates/next-template/public/images/icons/icon-kanban.svg +0 -3
  56. package/templates/next-template/public/images/icons/icon-list.svg +0 -3
  57. package/templates/next-template/public/images/icons/icon-users.svg +0 -3
  58. package/templates/next-template/public/images/icons/jump-to-icon.png +0 -0
  59. package/templates/next-template/public/images/insta.svg +0 -3
  60. package/templates/next-template/public/images/layout/images/comfortable.png +0 -0
  61. package/templates/next-template/public/images/layout/images/compact.png +0 -0
  62. package/templates/next-template/public/images/layout/images/cozy.png +0 -0
  63. package/templates/next-template/public/images/layout/images/kanban.png +0 -0
  64. package/templates/next-template/public/images/li.svg +0 -3
  65. package/templates/next-template/public/images/loginhero.png +0 -0
  66. package/templates/next-template/public/images/logo.png +0 -0
  67. package/templates/next-template/public/images/mail-icon.png +0 -0
  68. package/templates/next-template/public/images/menu/app-builder.svg +0 -19
  69. package/templates/next-template/public/images/menu/iam.svg +0 -14
  70. package/templates/next-template/public/images/menu/logicloop-black.svg +0 -28
  71. package/templates/next-template/public/images/menu/logicloop-blue.svg +0 -32
  72. package/templates/next-template/public/images/menu/logicloop-white.svg +0 -32
  73. package/templates/next-template/public/images/menu/queues.svg +0 -14
  74. package/templates/next-template/public/images/menu/radix.svg +0 -9
  75. package/templates/next-template/public/images/menu/rl-lead-middleware.svg +0 -19
  76. package/templates/next-template/public/images/menu/solid-address-master.svg +0 -10
  77. package/templates/next-template/public/images/menu/srmd-tracker-black.svg +0 -16
  78. package/templates/next-template/public/images/menu/srmd-tracker-original.svg +0 -32
  79. package/templates/next-template/public/images/menu/srmd-tracker-white.svg +0 -17
  80. package/templates/next-template/public/images/menu/srmd-tracker.svg +0 -16
  81. package/templates/next-template/public/images/menu-icon.png +0 -0
  82. package/templates/next-template/public/images/menu-toggle.png +0 -0
  83. package/templates/next-template/public/images/password-icon.png +0 -0
  84. package/templates/next-template/public/images/profile.png +0 -0
  85. package/templates/next-template/public/images/radix-logo-white.png +0 -0
  86. package/templates/next-template/public/images/radix-logo.png +0 -0
  87. package/templates/next-template/public/images/search-icon.png +0 -0
  88. package/templates/next-template/public/images/signupBanner.png +0 -0
  89. package/templates/next-template/public/images/tw.svg +0 -3
  90. package/templates/next-template/public/images/user-icon.png +0 -0
  91. package/templates/next-template/public/styles/SF-Pro-Display-Regular.otf +0 -0
  92. package/templates/next-template/public/styles/layout/_config.scss +0 -54
  93. package/templates/next-template/public/styles/layout/_content.scss +0 -77
  94. package/templates/next-template/public/styles/layout/_footer.scss +0 -8
  95. package/templates/next-template/public/styles/layout/_main.scss +0 -47
  96. package/templates/next-template/public/styles/layout/_menu.scss +0 -185
  97. package/templates/next-template/public/styles/layout/_mixins.scss +0 -13
  98. package/templates/next-template/public/styles/layout/_responsive.scss +0 -99
  99. package/templates/next-template/public/styles/layout/_topbar.scss +0 -149
  100. package/templates/next-template/public/styles/layout/_typography.scss +0 -63
  101. package/templates/next-template/public/styles/layout/_utils.scss +0 -27
  102. package/templates/next-template/public/styles/layout/_variables.scss +0 -3
  103. package/templates/next-template/public/styles/layout/layout.scss +0 -11
  104. package/templates/next-template/public/themes/solid-dark-purple/fonts/SF-Pro-Display-Black.otf +0 -0
  105. package/templates/next-template/public/themes/solid-dark-purple/fonts/SF-Pro-Display-Bold.otf +0 -0
  106. package/templates/next-template/public/themes/solid-dark-purple/fonts/SF-Pro-Display-Heavy.otf +0 -0
  107. package/templates/next-template/public/themes/solid-dark-purple/fonts/SF-Pro-Display-Light.otf +0 -0
  108. package/templates/next-template/public/themes/solid-dark-purple/fonts/SF-Pro-Display-Medium.otf +0 -0
  109. package/templates/next-template/public/themes/solid-dark-purple/fonts/SF-Pro-Display-Regular.otf +0 -0
  110. package/templates/next-template/public/themes/solid-dark-purple/fonts/SF-Pro-Display-Semibold.otf +0 -0
  111. package/templates/next-template/public/themes/solid-dark-purple/fonts/SF-Pro-Display-Thin.otf +0 -0
  112. package/templates/next-template/public/themes/solid-dark-purple/fonts/SF-Pro-Display-Ultralight.otf +0 -0
  113. package/templates/next-template/public/themes/solid-dark-purple/theme.css +0 -9052
  114. package/templates/next-template/public/themes/solid-light-purple/fonts/SF-Pro-Display-Black.otf +0 -0
  115. package/templates/next-template/public/themes/solid-light-purple/fonts/SF-Pro-Display-Bold.otf +0 -0
  116. package/templates/next-template/public/themes/solid-light-purple/fonts/SF-Pro-Display-Heavy.otf +0 -0
  117. package/templates/next-template/public/themes/solid-light-purple/fonts/SF-Pro-Display-Light.otf +0 -0
  118. package/templates/next-template/public/themes/solid-light-purple/fonts/SF-Pro-Display-Medium.otf +0 -0
  119. package/templates/next-template/public/themes/solid-light-purple/fonts/SF-Pro-Display-Regular.otf +0 -0
  120. package/templates/next-template/public/themes/solid-light-purple/fonts/SF-Pro-Display-Semibold.otf +0 -0
  121. package/templates/next-template/public/themes/solid-light-purple/fonts/SF-Pro-Display-Thin.otf +0 -0
  122. package/templates/next-template/public/themes/solid-light-purple/fonts/SF-Pro-Display-Ultralight.otf +0 -0
  123. package/templates/next-template/public/themes/solid-light-purple/theme.css +0 -9084
package/helpers.js CHANGED
@@ -154,6 +154,8 @@ export function getFrontendEnvJson(answers) {
154
154
  NEXT_PUBLIC_SOLID_APP_DESCRIPTION: '',
155
155
  NEXT_PUBLIC_ENABLE_CUSTOM_HEADER_FOOTER: false,
156
156
  NEXT_PUBLIC_DEFAULT_MENU_KEY: `${answers.projectName}-tracker`,
157
+ NEXT_PUBLIC_SHOW_SETTINGS:false,
158
+ NEXT_PUBLIC_LOGIN_REDIRECT_URL:/admin/core/solid-core/user/list
157
159
  }
158
160
  };
159
161
  return envConfig;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solidstarters/create-solid-app",
3
- "version": "1.2.15",
3
+ "version": "1.2.16",
4
4
  "main": "index.js",
5
5
  "private": false,
6
6
  "publishConfig": {
@@ -27,7 +27,7 @@
27
27
  "@nestjs/serve-static": "^4.0.2",
28
28
  "@nestjs/swagger": "^7.2.0",
29
29
  "@nestjs/typeorm": "^10.0.1",
30
- "@solidstarters/solid-core": "^1.2.24",
30
+ "@solidstarters/solid-core": "^1.2.40",
31
31
  "@types/luxon": "^3.4.2",
32
32
  "amqplib": "^0.10.4",
33
33
  "axios": "^1.7.0",
@@ -67,7 +67,7 @@
67
67
  "devDependencies": {
68
68
  "@nestjs/cli": "^10.0.0",
69
69
  "@nestjs/testing": "^10.0.0",
70
- "@solidstarters/solid-code-builder": "^1.0.13",
70
+ "@solidstarters/solid-code-builder": "^1.0.21",
71
71
  "@types/express": "^4.17.17",
72
72
  "@types/hapi__joi": "^17.1.12",
73
73
  "@types/jest": "^29.5.2",
@@ -4424,9 +4424,9 @@
4424
4424
  }
4425
4425
  },
4426
4426
  "node_modules/@solidstarters/solid-code-builder": {
4427
- "version": "1.0.13",
4428
- "resolved": "https://registry.npmjs.org/@solidstarters/solid-code-builder/-/solid-code-builder-1.0.13.tgz",
4429
- "integrity": "sha512-JIF7IdugJyucIumAR/NB8SRC1umSSCzqeNK1yhcI6BePaA5T3RIqeZhJ1Ys5xNpfvcp7pMK5A1KdiMTvNOWSHA==",
4427
+ "version": "1.0.21",
4428
+ "resolved": "https://registry.npmjs.org/@solidstarters/solid-code-builder/-/solid-code-builder-1.0.21.tgz",
4429
+ "integrity": "sha512-2A4+K/JDJD5EW8r1WQkAm41vJMlyAe+06WgvyPGbjMTZAwiLDudI5SwnivJrgKSghhOHeFulU/FDIrGjDvZP8A==",
4430
4430
  "dev": true,
4431
4431
  "license": "MIT",
4432
4432
  "dependencies": {
@@ -4469,9 +4469,9 @@
4469
4469
  }
4470
4470
  },
4471
4471
  "node_modules/@solidstarters/solid-core": {
4472
- "version": "1.2.24",
4473
- "resolved": "https://registry.npmjs.org/@solidstarters/solid-core/-/solid-core-1.2.24.tgz",
4474
- "integrity": "sha512-RBXssYLq68kHIh8YBabp6xK77SOJKVIjoR5ljMAfU+QhbMe1fY2pJJW+r/ZSjEcYPt4pdj3Z7y5920xFSLNHXA==",
4472
+ "version": "1.2.40",
4473
+ "resolved": "https://registry.npmjs.org/@solidstarters/solid-core/-/solid-core-1.2.40.tgz",
4474
+ "integrity": "sha512-G/KyFrDE85jS7jKZqTL6lwzGLRSPzTCmV+KHIWECg9LudJJGNlKIBT0o4BrrtWoG+AQZWZ7qIZQBe74uSr1elw==",
4475
4475
  "license": "ISC",
4476
4476
  "dependencies": {
4477
4477
  "@angular-devkit/core": "^18.0.3",
@@ -42,7 +42,7 @@
42
42
  "@nestjs/serve-static": "^4.0.2",
43
43
  "@nestjs/swagger": "^7.2.0",
44
44
  "@nestjs/typeorm": "^10.0.1",
45
- "@solidstarters/solid-core": "^1.2.24",
45
+ "@solidstarters/solid-core": "^1.2.40",
46
46
  "@types/luxon": "^3.4.2",
47
47
  "amqplib": "^0.10.4",
48
48
  "axios": "^1.7.0",
@@ -79,7 +79,7 @@
79
79
  "devDependencies": {
80
80
  "@nestjs/cli": "^10.0.0",
81
81
  "@nestjs/testing": "^10.0.0",
82
- "@solidstarters/solid-code-builder": "^1.0.13",
82
+ "@solidstarters/solid-code-builder": "^1.0.21",
83
83
  "@types/express": "^4.17.17",
84
84
  "@types/hapi__joi": "^17.1.12",
85
85
  "@types/jest": "^29.5.2",
@@ -5,6 +5,10 @@ import { Toaster } from "react-hot-toast";
5
5
  import { Provider } from "react-redux";
6
6
  import { initializeStore } from "@/redux/store";
7
7
 
8
+ // Load all overrides.
9
+ // TODO: Putting this here as this seems to the most top level component used with "use client"
10
+ import "./solid-extensions";
11
+
8
12
  export function GlobalProvider({ children, entities }: { children: React.ReactNode, entities: string[] }) {
9
13
  const store = initializeStore(entities);
10
14
 
@@ -1,8 +1,9 @@
1
+ import { SolidModuleHome } from '@solidstarters/solid-core-ui';
2
+
1
3
  export default function ModuleHome() {
2
4
  return (
3
5
  <div>
4
- <h1>Module Home Page</h1>
5
- <p>Welcome to the module home page.</p>
6
+ <SolidModuleHome moduleName="Library Management" />
6
7
  </div>
7
8
  );
8
9
  }
@@ -0,0 +1,63 @@
1
+ "use client";
2
+
3
+ import Image from "next/image";
4
+ import { useEffect, useState } from "react";
5
+ import { SolidFormWidgetProps } from '@solidstarters/solid-core-ui';
6
+
7
+ const BookSimilarTitles = ({ formData, field, fieldsMetadata, viewMetadata }: SolidFormWidgetProps) => {
8
+ const [books, setBooks] = useState<any[]>([]);
9
+
10
+ useEffect(() => {
11
+
12
+ const myHeaders = new Headers();
13
+ myHeaders.append("Authorization", "AIzaSyDxskVYoHM7b1sY_6_9SHb471Ue_CC1Yh8");
14
+
15
+ const requestOptions = {
16
+ method: "GET",
17
+ headers: myHeaders
18
+ };
19
+
20
+ async function fetchBookData() {
21
+ try {
22
+ const title = formData['title'];
23
+ console.log(`Fetching similar titles for ${title}`);
24
+
25
+ const endpoint = `https://www.googleapis.com/books/v1/volumes?q=${title}&maxResults=40`;
26
+ const response = await fetch(encodeURI(endpoint), requestOptions);
27
+ const result = await response.json();
28
+ console.log(`Loaded similar titles from Google Books API`, result);
29
+ setBooks(result.items);
30
+ } catch (error) {
31
+ console.error(error);
32
+ }
33
+ }
34
+
35
+ // Call the function
36
+ fetchBookData();
37
+ }, []);
38
+
39
+ return (
40
+ <>
41
+ <div className="flex justify-center">
42
+ <div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-12 gap-4" style={{ minWidth: "30vw" }}>
43
+ {books.map((book, index) => (
44
+ <div key={index} className=" h-32 relative" style={{ width: "100px", height: "100px" }}>
45
+ <a target="_blank" href={book.volumeInfo.infoLink}>
46
+ <Image
47
+ src={book.volumeInfo.imageLinks?.thumbnail}
48
+ alt={`Book description: ${book.volumeInfo.description}`}
49
+ layout="fill"
50
+ objectFit="cover"
51
+ className="rounded"
52
+ unoptimized={true}
53
+ />
54
+ </a>
55
+ </div>
56
+ ))}
57
+ </div>
58
+ </div>
59
+ </>
60
+ );
61
+ };
62
+
63
+ export default BookSimilarTitles
@@ -0,0 +1,132 @@
1
+ "use client";
2
+
3
+ import Image from "next/image";
4
+ import { useEffect, useState } from "react";
5
+
6
+ const ImageGrid12Column = () => {
7
+ const [images, setImages] = useState<string[]>([]);
8
+
9
+ useEffect(() => {
10
+ setImages([
11
+ "https://randomuser.me/api/portraits/women/29.jpg",
12
+ "https://randomuser.me/api/portraits/women/29.jpg",
13
+ "https://randomuser.me/api/portraits/women/31.jpg",
14
+ "https://randomuser.me/api/portraits/women/44.jpg",
15
+ "https://randomuser.me/api/portraits/women/81.jpg",
16
+ "https://randomuser.me/api/portraits/women/80.jpg",
17
+ "https://randomuser.me/api/portraits/women/64.jpg",
18
+ "https://randomuser.me/api/portraits/women/61.jpg",
19
+ "https://randomuser.me/api/portraits/women/28.jpg",
20
+ "https://randomuser.me/api/portraits/women/40.jpg",
21
+ "https://randomuser.me/api/portraits/women/91.jpg",
22
+ "https://randomuser.me/api/portraits/women/63.jpg",
23
+ "https://randomuser.me/api/portraits/women/73.jpg",
24
+ "https://randomuser.me/api/portraits/women/6.jpg",
25
+ "https://randomuser.me/api/portraits/women/30.jpg",
26
+ "https://randomuser.me/api/portraits/women/42.jpg",
27
+ "https://randomuser.me/api/portraits/women/78.jpg",
28
+ "https://randomuser.me/api/portraits/women/14.jpg",
29
+ "https://randomuser.me/api/portraits/women/52.jpg",
30
+ "https://randomuser.me/api/portraits/women/55.jpg",
31
+ "https://randomuser.me/api/portraits/women/2.jpg",
32
+ "https://randomuser.me/api/portraits/women/75.jpg",
33
+ "https://randomuser.me/api/portraits/women/24.jpg",
34
+ "https://randomuser.me/api/portraits/women/15.jpg",
35
+ "https://randomuser.me/api/portraits/women/48.jpg",
36
+ "https://randomuser.me/api/portraits/women/54.jpg",
37
+ "https://randomuser.me/api/portraits/women/47.jpg",
38
+ "https://randomuser.me/api/portraits/women/43.jpg",
39
+ "https://randomuser.me/api/portraits/women/39.jpg",
40
+ "https://randomuser.me/api/portraits/women/57.jpg",
41
+ "https://randomuser.me/api/portraits/women/37.jpg",
42
+ "https://randomuser.me/api/portraits/women/22.jpg",
43
+ "https://randomuser.me/api/portraits/women/85.jpg",
44
+ "https://randomuser.me/api/portraits/women/69.jpg",
45
+ "https://randomuser.me/api/portraits/women/90.jpg",
46
+ "https://randomuser.me/api/portraits/women/18.jpg",
47
+ "https://randomuser.me/api/portraits/women/8.jpg",
48
+ "https://randomuser.me/api/portraits/women/87.jpg",
49
+ "https://randomuser.me/api/portraits/women/82.jpg",
50
+ "https://randomuser.me/api/portraits/women/71.jpg",
51
+ "https://randomuser.me/api/portraits/women/45.jpg",
52
+ "https://randomuser.me/api/portraits/women/12.jpg",
53
+ "https://randomuser.me/api/portraits/women/5.jpg",
54
+ "https://randomuser.me/api/portraits/women/16.jpg",
55
+ "https://randomuser.me/api/portraits/women/84.jpg",
56
+ "https://randomuser.me/api/portraits/women/11.jpg",
57
+ "https://randomuser.me/api/portraits/women/59.jpg",
58
+ "https://randomuser.me/api/portraits/women/19.jpg",
59
+ "https://randomuser.me/api/portraits/women/27.jpg",
60
+ "https://randomuser.me/api/portraits/women/7.jpg",
61
+ "https://randomuser.me/api/portraits/women/49.jpg",
62
+ "https://randomuser.me/api/portraits/women/83.jpg",
63
+ "https://randomuser.me/api/portraits/women/33.jpg",
64
+ "https://randomuser.me/api/portraits/women/3.jpg",
65
+ "https://randomuser.me/api/portraits/women/17.jpg",
66
+ "https://randomuser.me/api/portraits/women/13.jpg",
67
+ "https://randomuser.me/api/portraits/women/77.jpg",
68
+ "https://randomuser.me/api/portraits/women/50.jpg",
69
+ "https://randomuser.me/api/portraits/women/0.jpg",
70
+ "https://randomuser.me/api/portraits/women/67.jpg",
71
+ "https://randomuser.me/api/portraits/women/68.jpg",
72
+ "https://randomuser.me/api/portraits/women/65.jpg",
73
+ "https://randomuser.me/api/portraits/women/66.jpg",
74
+ "https://randomuser.me/api/portraits/women/94.jpg",
75
+ "https://randomuser.me/api/portraits/women/38.jpg",
76
+ "https://randomuser.me/api/portraits/women/88.jpg",
77
+ "https://randomuser.me/api/portraits/women/1.jpg",
78
+ "https://randomuser.me/api/portraits/women/36.jpg",
79
+ "https://randomuser.me/api/portraits/women/20.jpg",
80
+ "https://randomuser.me/api/portraits/women/70.jpg",
81
+ "https://randomuser.me/api/portraits/women/21.jpg",
82
+ "https://randomuser.me/api/portraits/women/34.jpg",
83
+ "https://randomuser.me/api/portraits/women/46.jpg",
84
+ "https://randomuser.me/api/portraits/women/4.jpg",
85
+ "https://randomuser.me/api/portraits/women/58.jpg",
86
+ "https://randomuser.me/api/portraits/women/32.jpg",
87
+ "https://randomuser.me/api/portraits/women/76.jpg",
88
+ "https://randomuser.me/api/portraits/women/9.jpg",
89
+ "https://randomuser.me/api/portraits/women/51.jpg",
90
+ "https://randomuser.me/api/portraits/women/72.jpg",
91
+ "https://randomuser.me/api/portraits/women/89.jpg",
92
+ "https://randomuser.me/api/portraits/women/92.jpg",
93
+ "https://randomuser.me/api/portraits/women/86.jpg",
94
+ "https://randomuser.me/api/portraits/women/35.jpg",
95
+ "https://randomuser.me/api/portraits/women/62.jpg",
96
+ "https://randomuser.me/api/portraits/women/23.jpg",
97
+ "https://randomuser.me/api/portraits/women/53.jpg",
98
+ "https://randomuser.me/api/portraits/women/10.jpg",
99
+ "https://randomuser.me/api/portraits/women/74.jpg",
100
+ "https://randomuser.me/api/portraits/women/79.jpg",
101
+ "https://randomuser.me/api/portraits/women/93.jpg",
102
+ "https://randomuser.me/api/portraits/women/25.jpg",
103
+ "https://randomuser.me/api/portraits/women/26.jpg",
104
+ "https://randomuser.me/api/portraits/women/56.jpg",
105
+ "https://randomuser.me/api/portraits/women/41.jpg",
106
+ "https://randomuser.me/api/portraits/women/60.jpg",
107
+ ]);
108
+ }, []);
109
+
110
+ return (
111
+ <>
112
+ <div className="flex justify-center">
113
+ <div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-12 gap-4" style={{ minWidth: "30vw" }}>
114
+ {images.map((src, index) => (
115
+ <div key={index} className=" h-32 relative" style={{ width: "100px", height: "100px" }}>
116
+ <Image
117
+ src={src}
118
+ alt={`Image ${index + 1}`}
119
+ layout="fill"
120
+ objectFit="cover"
121
+ className="rounded"
122
+ unoptimized={true} // Temporarily bypass Next.js optimization
123
+ />
124
+ </div>
125
+ ))}
126
+ </div>
127
+ </div>
128
+ </>
129
+ );
130
+ };
131
+
132
+ export default ImageGrid12Column
@@ -0,0 +1,21 @@
1
+ import { SolidUiEvent, SolidViewLayoutManager } from '@solidstarters/solid-core-ui';
2
+
3
+ const handleBookFormViewBlur = (event: SolidUiEvent) => {
4
+ console.log(`handleBookFormViewBlur event triggered:`);
5
+ console.log(event);
6
+
7
+ const { type, modifiedField, formData, viewMetadata, fieldsMetadata } = event;
8
+
9
+ // TODO: make an api call to get title & pageCount given the ISBN.
10
+ if (modifiedField === 'isbn') {
11
+ // return {
12
+ // layoutChanged: false,
13
+ // dataChanged: true,
14
+ // newFormData: {
15
+ // title: 'The Oxygen Advantage',
16
+ // pageCount: '277',
17
+ // },
18
+ // }
19
+ }
20
+ }
21
+ export default handleBookFormViewBlur;
@@ -0,0 +1,42 @@
1
+ import { SolidUiEvent, SolidViewLayoutManager } from '@solidstarters/solid-core-ui';
2
+
3
+ const handleBookFormViewChange = (event: SolidUiEvent) => {
4
+ console.log(`handleBookFormViewChange triggered:`);
5
+ console.log(event);
6
+
7
+ const { type, modifiedField, modifiedFieldValue, formData, viewMetadata, fieldsMetadata } = event;
8
+ const layout = viewMetadata.layout;
9
+ const model = viewMetadata.model;
10
+ const module = viewMetadata.module;
11
+ const viewName = viewMetadata.name;
12
+
13
+ // handle change to title.
14
+ // TODO: here we intend on injecting something in the form context which we will then use to render a message somewhere on the form view.
15
+ if (modifiedField === 'title') {
16
+ // const title = formData['title'];
17
+ const title = modifiedFieldValue;
18
+ const layoutManager = new SolidViewLayoutManager(layout);
19
+ layoutManager.updateNodeAttributes('page-1-row-1-div-1-div-1-title-custom', { visible: true });
20
+ return {
21
+ layoutChanged: true,
22
+ dataChanged: true,
23
+ newFormData: {
24
+ ctxtTitleAlphpabetCount: title ? title.length : 0
25
+ },
26
+ newLayout: layoutManager.getLayout()
27
+ }
28
+ }
29
+
30
+ if (modifiedField === 'enableSeo') {
31
+ // const enableSeo = formData['enableSeo'];
32
+ // console.log(`Examining enableSeo: `, enableSeo);
33
+ const layoutManager = new SolidViewLayoutManager(layout);
34
+ layoutManager.updateNodeAttributes('page-4', { visible: (modifiedFieldValue.value === 'yes') });
35
+ return {
36
+ layoutChanged: true,
37
+ newLayout: layoutManager.getLayout(),
38
+ dataChanged: false,
39
+ }
40
+ }
41
+ }
42
+ export default handleBookFormViewChange;
@@ -1,17 +1,11 @@
1
-
2
- import "./solid-global.css";
3
- import '../public/styles/layout/layout.scss';
4
- // import "primereact/resources/themes/lara-light-cyan/theme.css";
5
- // import "primereact/resources/primereact.min.css";
6
- import "primereact/resources/primereact.css";
1
+ import "@solidstarters/solid-core-ui/dist/resources/solid-primereact.css";
2
+ import "@solidstarters/solid-core-ui/dist/resources/globals.css";
3
+ import "@solidstarters/solid-core-ui/dist/resources/stylesheets/layout.scss"
7
4
  import "primeicons/primeicons.css";
8
5
  import "primeflex/primeflex.css";
9
- import type { Metadata } from "next";
10
6
  import { Inter } from "next/font/google";
11
7
  import { GlobalProvider } from "./GlobalProvider";
12
8
  import { PrimeReactProvider } from "primereact/api";
13
- import { CustomHeader } from "@solidstarters/solid-core-ui";
14
- import { CustomFooter } from "@solidstarters/solid-core-ui";
15
9
  import { LayoutProvider } from "@solidstarters/solid-core-ui";
16
10
  import { SolidThemeLink } from "@solidstarters/solid-core-ui";
17
11
 
@@ -21,12 +15,6 @@ const inter = Inter({
21
15
  variable: '--font-inter',
22
16
  });
23
17
 
24
- // export const metadata: Metadata = {
25
- // title: process.env.SOLID_APP_TITLE,
26
- // description: process.env.SOLID_APP_DESCRIPTION,
27
- // };
28
-
29
-
30
18
  // Fetch a list of entities dynamically
31
19
  async function fetchEntities() {
32
20
  const url = `${process.env.NEXT_PUBLIC_BACKEND_API_URL}/api/model-metadata/public`;
@@ -0,0 +1,13 @@
1
+ import { registerExtensionComponent, registerExtensionFunction } from "@solidstarters/solid-core-ui";
2
+ import ImageGrid12Column from "./admin/extensions/ImageGrid12Column";
3
+ import handleBookFormViewChange from "./admin/extensions/bookFormViewChangeHandler";
4
+ import handleBookFormViewBlur from "./admin/extensions/bookFormViewBlurHandler";
5
+ import BookSimilarTitles from "./admin/extensions/BookSimilarTitles";
6
+
7
+ // Registering a custom component
8
+ registerExtensionComponent("BookFormViewDynamicComponent", ImageGrid12Column);
9
+ registerExtensionComponent("BookSimilarTitles", BookSimilarTitles);
10
+
11
+ // Registering a custom function
12
+ registerExtensionFunction("bookFormViewChangeHandler", handleBookFormViewChange);
13
+ registerExtensionFunction("bookFormViewBlurHandler", handleBookFormViewBlur);
@@ -39,3 +39,5 @@ yarn-error.log*
39
39
  # typescript
40
40
  *.tsbuildinfo
41
41
  next-env.d.ts
42
+
43
+ public/themes