@carlonicora/nextjs-jsonapi 0.0.1 → 1.0.4

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 (303) hide show
  1. package/dist/BlockNoteEditor-VFWG6LXI.js.map +1 -1
  2. package/dist/JsonApiRequest-ZZLSP26T.js.map +1 -1
  3. package/dist/atoms/index.js.map +1 -1
  4. package/dist/chunk-2K3Q24UF.js.map +1 -1
  5. package/dist/chunk-3FBCC4G3.js.map +1 -1
  6. package/dist/chunk-4HCRAOS5.js.map +1 -1
  7. package/dist/chunk-6GKHCVF6.js.map +1 -1
  8. package/dist/chunk-7QVYU63E.js.map +1 -1
  9. package/dist/chunk-A5DDIABK.js.map +1 -1
  10. package/dist/chunk-AWONBQQP.js.map +1 -1
  11. package/dist/chunk-CXQOWQSY.js.map +1 -1
  12. package/dist/chunk-DO2HLAZO.js.map +1 -1
  13. package/dist/chunk-EFJEWLRL.js.map +1 -1
  14. package/dist/chunk-FY4SXJGU.js.map +1 -1
  15. package/dist/chunk-H6FMOA6B.js.map +1 -1
  16. package/dist/chunk-I2REI7OA.js.map +1 -1
  17. package/dist/chunk-IBS6NI7D.js.map +1 -1
  18. package/dist/chunk-J4Q36PMP.js.map +1 -1
  19. package/dist/chunk-JC3WJK65.js.map +1 -1
  20. package/dist/chunk-LXKSUWAV.js.map +1 -1
  21. package/dist/chunk-RAF7PNLG.js.map +1 -1
  22. package/dist/chunk-RUR22SVM.js.map +1 -1
  23. package/dist/chunk-TEGF6ZWG.js.map +1 -1
  24. package/dist/chunk-TMVHSY3Y.js.map +1 -1
  25. package/dist/chunk-V2JJPI7N.js.map +1 -1
  26. package/dist/client/index.js.map +1 -1
  27. package/dist/components/index.js.map +1 -1
  28. package/dist/contexts/index.js.map +1 -1
  29. package/dist/core/index.js.map +1 -1
  30. package/dist/features/index.js.map +1 -1
  31. package/dist/hooks/index.js.map +1 -1
  32. package/dist/index.js.map +1 -1
  33. package/dist/interfaces/index.js.map +1 -1
  34. package/dist/permissions/index.js.map +1 -1
  35. package/dist/request-QFS7NEIE.js.map +1 -1
  36. package/dist/request-ZYY6RI5X.js.map +1 -1
  37. package/dist/roles/index.js.map +1 -1
  38. package/dist/server/index.js.map +1 -1
  39. package/dist/shadcnui/index.js.map +1 -1
  40. package/dist/token-MJMC26ON.js.map +1 -1
  41. package/dist/token-UYE7CV6X.js.map +1 -1
  42. package/dist/utils/index.js.map +1 -1
  43. package/package.json +6 -1
  44. package/src/atoms/index.ts +1 -0
  45. package/src/atoms/recentPagesAtom.ts +10 -0
  46. package/src/client/context/JsonApiContext.ts +61 -0
  47. package/src/client/context/JsonApiProvider.tsx +27 -0
  48. package/src/client/context/index.ts +2 -0
  49. package/src/client/hooks/index.ts +3 -0
  50. package/src/client/hooks/useJsonApiGet.ts +188 -0
  51. package/src/client/hooks/useJsonApiMutation.ts +193 -0
  52. package/src/client/hooks/useRehydration.ts +47 -0
  53. package/src/client/index.ts +11 -0
  54. package/src/client/request.ts +97 -0
  55. package/src/client/token.ts +10 -0
  56. package/src/components/containers/PageContainer.tsx +15 -0
  57. package/src/components/containers/ReactMarkdownContainer.tsx +119 -0
  58. package/src/components/containers/TabsContainer.tsx +93 -0
  59. package/src/components/containers/index.ts +3 -0
  60. package/src/components/contents/AttributeElement.tsx +20 -0
  61. package/src/components/contents/index.ts +1 -0
  62. package/src/components/details/AllowedUsersDetails.tsx +23 -0
  63. package/src/components/details/index.ts +1 -0
  64. package/src/components/editors/BlockNoteDiffInlineContent.tsx +152 -0
  65. package/src/components/editors/BlockNoteEditor.tsx +404 -0
  66. package/src/components/editors/BlockNoteEditorContainer.tsx +13 -0
  67. package/src/components/editors/BlockNoteEditorFormattingToolbar.tsx +38 -0
  68. package/src/components/editors/index.ts +1 -0
  69. package/src/components/errors/ErrorDetails.tsx +41 -0
  70. package/src/components/errors/errorToast.ts +9 -0
  71. package/src/components/errors/index.ts +2 -0
  72. package/src/components/forms/CommonAssociationForm.tsx +162 -0
  73. package/src/components/forms/CommonDeleter.tsx +94 -0
  74. package/src/components/forms/CommonEditorButtons.tsx +30 -0
  75. package/src/components/forms/CommonEditorHeader.tsx +35 -0
  76. package/src/components/forms/CommonEditorTrigger.tsx +26 -0
  77. package/src/components/forms/DatePickerPopover.tsx +219 -0
  78. package/src/components/forms/DateRangeSelector.tsx +110 -0
  79. package/src/components/forms/FileUploader.tsx +324 -0
  80. package/src/components/forms/FormCheckbox.tsx +66 -0
  81. package/src/components/forms/FormContainerGeneric.tsx +39 -0
  82. package/src/components/forms/FormDate.tsx +247 -0
  83. package/src/components/forms/FormDateTime.tsx +231 -0
  84. package/src/components/forms/FormInput.tsx +110 -0
  85. package/src/components/forms/FormPassword.tsx +54 -0
  86. package/src/components/forms/FormPlaceAutocomplete.tsx +286 -0
  87. package/src/components/forms/FormSelect.tsx +72 -0
  88. package/src/components/forms/FormSlider.tsx +51 -0
  89. package/src/components/forms/FormSwitch.tsx +25 -0
  90. package/src/components/forms/FormTextarea.tsx +44 -0
  91. package/src/components/forms/MultiFileUploader.tsx +107 -0
  92. package/src/components/forms/PasswordInput.tsx +47 -0
  93. package/src/components/forms/index.ts +21 -0
  94. package/src/components/index.ts +11 -0
  95. package/src/components/navigations/Breadcrumb.tsx +83 -0
  96. package/src/components/navigations/ContentTitle.tsx +39 -0
  97. package/src/components/navigations/Header.tsx +27 -0
  98. package/src/components/navigations/ModeToggleSwitch.tsx +25 -0
  99. package/src/components/navigations/PageSection.tsx +64 -0
  100. package/src/components/navigations/RecentPagesNavigator.tsx +52 -0
  101. package/src/components/navigations/index.ts +6 -0
  102. package/src/components/pages/PageContainerContentDetails.tsx +76 -0
  103. package/src/components/pages/PageContentContainer.tsx +31 -0
  104. package/src/components/pages/index.ts +2 -0
  105. package/src/components/tables/ContentListTable.tsx +165 -0
  106. package/src/components/tables/ContentTableSearch.tsx +105 -0
  107. package/src/components/tables/cells/cell.component.tsx +18 -0
  108. package/src/components/tables/cells/cell.date.tsx +16 -0
  109. package/src/components/tables/cells/cell.id.tsx +27 -0
  110. package/src/components/tables/cells/cell.link.tsx +18 -0
  111. package/src/components/tables/cells/cell.text.tsx +12 -0
  112. package/src/components/tables/cells/cell.url.tsx +13 -0
  113. package/src/components/tables/cells/index.ts +5 -0
  114. package/src/components/tables/index.ts +3 -0
  115. package/src/contexts/SharedContext.tsx +35 -0
  116. package/src/contexts/index.ts +2 -0
  117. package/src/core/abstracts/AbstractApiData.ts +138 -0
  118. package/src/core/abstracts/AbstractService.ts +263 -0
  119. package/src/core/abstracts/index.ts +2 -0
  120. package/src/core/endpoint/EndpointCreator.ts +97 -0
  121. package/src/core/endpoint/index.ts +1 -0
  122. package/src/core/factories/JsonApiDataFactory.ts +12 -0
  123. package/src/core/factories/RehydrationFactory.ts +30 -0
  124. package/src/core/factories/index.ts +2 -0
  125. package/src/core/fields/FieldSelector.ts +15 -0
  126. package/src/core/fields/index.ts +1 -0
  127. package/src/core/index.ts +20 -0
  128. package/src/core/interfaces/ApiData.ts +8 -0
  129. package/src/core/interfaces/ApiDataInterface.ts +15 -0
  130. package/src/core/interfaces/ApiRequestDataTypeInterface.ts +14 -0
  131. package/src/core/interfaces/ApiResponseInterface.ts +17 -0
  132. package/src/core/interfaces/JsonApiHydratedDataInterface.ts +5 -0
  133. package/src/core/interfaces/index.ts +5 -0
  134. package/src/core/registry/DataClassRegistry.ts +51 -0
  135. package/src/core/registry/ModuleRegistrar.ts +43 -0
  136. package/src/core/registry/ModuleRegistry.ts +64 -0
  137. package/src/core/registry/index.ts +3 -0
  138. package/src/core/utils/index.ts +2 -0
  139. package/src/core/utils/rehydrate.ts +24 -0
  140. package/src/core/utils/translateResponse.ts +125 -0
  141. package/src/features/auth/auth.module.ts +9 -0
  142. package/src/features/auth/config.ts +57 -0
  143. package/src/features/auth/data/auth.interface.ts +31 -0
  144. package/src/features/auth/data/auth.service.ts +159 -0
  145. package/src/features/auth/data/auth.ts +54 -0
  146. package/src/features/auth/data/index.ts +3 -0
  147. package/src/features/auth/index.ts +3 -0
  148. package/src/features/company/company.module.ts +10 -0
  149. package/src/features/company/data/company.fields.ts +6 -0
  150. package/src/features/company/data/company.interface.ts +28 -0
  151. package/src/features/company/data/company.service.ts +73 -0
  152. package/src/features/company/data/company.ts +104 -0
  153. package/src/features/company/data/index.ts +4 -0
  154. package/src/features/company/index.ts +2 -0
  155. package/src/features/content/content.module.ts +20 -0
  156. package/src/features/content/data/content.fields.ts +13 -0
  157. package/src/features/content/data/content.interface.ts +23 -0
  158. package/src/features/content/data/content.service.ts +75 -0
  159. package/src/features/content/data/content.ts +85 -0
  160. package/src/features/content/data/index.ts +4 -0
  161. package/src/features/content/index.ts +2 -0
  162. package/src/features/feature/components/forms/FormFeatures.tsx +149 -0
  163. package/src/features/feature/components/index.ts +1 -0
  164. package/src/features/feature/data/feature.interface.ts +9 -0
  165. package/src/features/feature/data/feature.service.ts +19 -0
  166. package/src/features/feature/data/feature.ts +33 -0
  167. package/src/features/feature/data/index.ts +3 -0
  168. package/src/features/feature/feature.module.ts +10 -0
  169. package/src/features/feature/index.ts +3 -0
  170. package/src/features/index.ts +12 -0
  171. package/src/features/module/data/index.ts +2 -0
  172. package/src/features/module/data/module.interface.ts +12 -0
  173. package/src/features/module/data/module.ts +42 -0
  174. package/src/features/module/index.ts +2 -0
  175. package/src/features/module/module.module.ts +10 -0
  176. package/src/features/notification/data/index.ts +4 -0
  177. package/src/features/notification/data/notification.fields.ts +8 -0
  178. package/src/features/notification/data/notification.interface.ts +14 -0
  179. package/src/features/notification/data/notification.service.ts +34 -0
  180. package/src/features/notification/data/notification.ts +51 -0
  181. package/src/features/notification/index.ts +2 -0
  182. package/src/features/notification/notification.module.ts +10 -0
  183. package/src/features/push/data/index.ts +3 -0
  184. package/src/features/push/data/push.interface.ts +8 -0
  185. package/src/features/push/data/push.service.ts +17 -0
  186. package/src/features/push/data/push.ts +18 -0
  187. package/src/features/push/index.ts +2 -0
  188. package/src/features/push/push.module.ts +10 -0
  189. package/src/features/role/data/index.ts +4 -0
  190. package/src/features/role/data/role.fields.ts +8 -0
  191. package/src/features/role/data/role.interface.ts +16 -0
  192. package/src/features/role/data/role.service.ts +117 -0
  193. package/src/features/role/data/role.ts +62 -0
  194. package/src/features/role/index.ts +2 -0
  195. package/src/features/role/role.module.ts +10 -0
  196. package/src/features/s3/data/index.ts +3 -0
  197. package/src/features/s3/data/s3.interface.ts +11 -0
  198. package/src/features/s3/data/s3.service.ts +30 -0
  199. package/src/features/s3/data/s3.ts +60 -0
  200. package/src/features/s3/index.ts +2 -0
  201. package/src/features/s3/s3.module.ts +10 -0
  202. package/src/features/search/index.ts +1 -0
  203. package/src/features/search/interfaces/index.ts +1 -0
  204. package/src/features/search/interfaces/search.result.interface.ts +3 -0
  205. package/src/features/user/author.module.ts +10 -0
  206. package/src/features/user/components/index.ts +2 -0
  207. package/src/features/user/components/lists/ContributorsList.tsx +41 -0
  208. package/src/features/user/components/lists/index.ts +1 -0
  209. package/src/features/user/components/widgets/UserAvatar.tsx +86 -0
  210. package/src/features/user/components/widgets/index.ts +1 -0
  211. package/src/features/user/contexts/CurrentUserContext.tsx +156 -0
  212. package/src/features/user/contexts/index.ts +1 -0
  213. package/src/features/user/data/index.ts +4 -0
  214. package/src/features/user/data/user.fields.ts +8 -0
  215. package/src/features/user/data/user.interface.ts +41 -0
  216. package/src/features/user/data/user.service.ts +246 -0
  217. package/src/features/user/data/user.ts +162 -0
  218. package/src/features/user/index.ts +4 -0
  219. package/src/features/user/user.module.ts +21 -0
  220. package/src/hooks/TableGeneratorRegistry.ts +53 -0
  221. package/src/hooks/index.ts +33 -0
  222. package/src/hooks/types.ts +35 -0
  223. package/src/hooks/url.rewriter.ts +22 -0
  224. package/src/hooks/useCustomD3Graph.tsx +705 -0
  225. package/src/hooks/useDataListRetriever.ts +349 -0
  226. package/src/hooks/useDebounce.ts +33 -0
  227. package/src/hooks/usePageUrlGenerator.ts +50 -0
  228. package/src/hooks/useTableGenerator.ts +16 -0
  229. package/src/i18n/config.ts +73 -0
  230. package/src/i18n/index.ts +18 -0
  231. package/src/index.ts +16 -0
  232. package/src/interfaces/breadcrumb.item.data.interface.ts +4 -0
  233. package/src/interfaces/d3.link.interface.ts +7 -0
  234. package/src/interfaces/d3.node.interface.ts +12 -0
  235. package/src/interfaces/index.ts +3 -0
  236. package/src/permissions/check.ts +127 -0
  237. package/src/permissions/index.ts +2 -0
  238. package/src/permissions/types.ts +109 -0
  239. package/src/roles/config.ts +46 -0
  240. package/src/roles/index.ts +1 -0
  241. package/src/server/cache.ts +28 -0
  242. package/src/server/index.ts +3 -0
  243. package/src/server/request.ts +113 -0
  244. package/src/server/token.ts +10 -0
  245. package/src/shadcnui/custom/kanban.tsx +1001 -0
  246. package/src/shadcnui/custom/link.tsx +18 -0
  247. package/src/shadcnui/custom/multi-select.tsx +382 -0
  248. package/src/shadcnui/index.ts +49 -0
  249. package/src/shadcnui/ui/accordion.tsx +52 -0
  250. package/src/shadcnui/ui/alert-dialog.tsx +141 -0
  251. package/src/shadcnui/ui/alert.tsx +43 -0
  252. package/src/shadcnui/ui/avatar.tsx +50 -0
  253. package/src/shadcnui/ui/badge.tsx +40 -0
  254. package/src/shadcnui/ui/breadcrumb.tsx +115 -0
  255. package/src/shadcnui/ui/button.tsx +51 -0
  256. package/src/shadcnui/ui/calendar.tsx +73 -0
  257. package/src/shadcnui/ui/card.tsx +43 -0
  258. package/src/shadcnui/ui/carousel.tsx +225 -0
  259. package/src/shadcnui/ui/chart.tsx +320 -0
  260. package/src/shadcnui/ui/checkbox.tsx +29 -0
  261. package/src/shadcnui/ui/collapsible.tsx +11 -0
  262. package/src/shadcnui/ui/command.tsx +155 -0
  263. package/src/shadcnui/ui/context-menu.tsx +179 -0
  264. package/src/shadcnui/ui/dialog.tsx +96 -0
  265. package/src/shadcnui/ui/drawer.tsx +89 -0
  266. package/src/shadcnui/ui/dropdown-menu.tsx +205 -0
  267. package/src/shadcnui/ui/form.tsx +138 -0
  268. package/src/shadcnui/ui/hover-card.tsx +29 -0
  269. package/src/shadcnui/ui/input.tsx +21 -0
  270. package/src/shadcnui/ui/label.tsx +26 -0
  271. package/src/shadcnui/ui/navigation-menu.tsx +168 -0
  272. package/src/shadcnui/ui/popover.tsx +33 -0
  273. package/src/shadcnui/ui/progress.tsx +25 -0
  274. package/src/shadcnui/ui/radio-group.tsx +37 -0
  275. package/src/shadcnui/ui/resizable.tsx +47 -0
  276. package/src/shadcnui/ui/scroll-area.tsx +40 -0
  277. package/src/shadcnui/ui/select.tsx +164 -0
  278. package/src/shadcnui/ui/separator.tsx +28 -0
  279. package/src/shadcnui/ui/sheet.tsx +139 -0
  280. package/src/shadcnui/ui/sidebar.tsx +677 -0
  281. package/src/shadcnui/ui/skeleton.tsx +13 -0
  282. package/src/shadcnui/ui/slider.tsx +25 -0
  283. package/src/shadcnui/ui/sonner.tsx +25 -0
  284. package/src/shadcnui/ui/switch.tsx +31 -0
  285. package/src/shadcnui/ui/table.tsx +120 -0
  286. package/src/shadcnui/ui/tabs.tsx +55 -0
  287. package/src/shadcnui/ui/textarea.tsx +24 -0
  288. package/src/shadcnui/ui/toggle.tsx +39 -0
  289. package/src/shadcnui/ui/tooltip.tsx +61 -0
  290. package/src/unified/JsonApiRequest.ts +325 -0
  291. package/src/unified/index.ts +1 -0
  292. package/src/utils/blocknote-diff.util.ts +815 -0
  293. package/src/utils/blocknote-word-diff-renderer.util.ts +413 -0
  294. package/src/utils/cn.ts +6 -0
  295. package/src/utils/compose-refs.ts +61 -0
  296. package/src/utils/date-formatter.ts +53 -0
  297. package/src/utils/exists.ts +7 -0
  298. package/src/utils/index.ts +15 -0
  299. package/src/utils/schemas/entity.object.schema.ts +8 -0
  300. package/src/utils/schemas/index.ts +2 -0
  301. package/src/utils/schemas/user.object.schema.ts +9 -0
  302. package/src/utils/table-options.ts +67 -0
  303. package/src/utils/use-mobile.tsx +21 -0
@@ -0,0 +1,12 @@
1
+ import { ApiDataInterface } from "../../../core";
2
+
3
+ export interface ModuleInterface extends ApiDataInterface {
4
+ get name(): string;
5
+ get isCore(): boolean;
6
+ get permissions(): {
7
+ create: boolean | string;
8
+ read: boolean | string;
9
+ update: boolean | string;
10
+ delete: boolean | string;
11
+ };
12
+ }
@@ -0,0 +1,42 @@
1
+ import { AbstractApiData, JsonApiHydratedDataInterface } from "../../../core";
2
+ import { ModuleInterface } from "./module.interface";
3
+
4
+ export class Module extends AbstractApiData implements ModuleInterface {
5
+ private _name?: string;
6
+ private _isCore?: boolean;
7
+ private _permissions?: {
8
+ create: boolean | string;
9
+ read: boolean | string;
10
+ update: boolean | string;
11
+ delete: boolean | string;
12
+ };
13
+
14
+ get name(): string {
15
+ if (!this._name) throw new Error("Name is not defined");
16
+ return this._name ?? "";
17
+ }
18
+
19
+ get isCore(): boolean {
20
+ return this._isCore ?? false;
21
+ }
22
+
23
+ get permissions(): {
24
+ create: boolean | string;
25
+ read: boolean | string;
26
+ update: boolean | string;
27
+ delete: boolean | string;
28
+ } {
29
+ if (!this._permissions) throw new Error("Permissions is not defined");
30
+ return this._permissions;
31
+ }
32
+
33
+ rehydrate(data: JsonApiHydratedDataInterface): this {
34
+ super.rehydrate(data);
35
+
36
+ this._name = data.jsonApi.attributes.name;
37
+ this._isCore = data.jsonApi.attributes.isCore;
38
+ this._permissions = data.jsonApi.meta.permissions;
39
+
40
+ return this;
41
+ }
42
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./data";
2
+ export * from "./module.module";
@@ -0,0 +1,10 @@
1
+ import { ModuleFactory } from "../../permissions";
2
+ import { Module } from "./data";
3
+
4
+ export const ModuleModule = (factory: ModuleFactory) =>
5
+ factory({
6
+ pageUrl: "/modules",
7
+ name: "modules",
8
+ model: Module,
9
+ moduleId: "25ffd868-8341-4ca7-963b-6e1c56b03b1d",
10
+ });
@@ -0,0 +1,4 @@
1
+ export * from "./notification";
2
+ export * from "./notification.fields";
3
+ export * from "./notification.interface";
4
+ export * from "./notification.service";
@@ -0,0 +1,8 @@
1
+ export enum NotificationFields {
2
+ notificationId = "notificationId",
3
+
4
+ name = "name",
5
+
6
+ createdAt = "createdAt",
7
+ updatedAt = "updatedAt",
8
+ }
@@ -0,0 +1,14 @@
1
+ import { ApiDataInterface } from "../../../core";
2
+ import { UserInterface } from "../../user";
3
+
4
+ export type NotificationInput = {
5
+ id: string;
6
+ isRead: boolean;
7
+ };
8
+
9
+ export interface NotificationInterface extends ApiDataInterface {
10
+ get notificationType(): string;
11
+ get isRead(): boolean;
12
+
13
+ get actor(): UserInterface | undefined;
14
+ }
@@ -0,0 +1,34 @@
1
+ import { AbstractService, EndpointCreator, HttpMethod, Modules, NextRef } from "../../../core";
2
+ import { NotificationInterface } from "./notification.interface";
3
+
4
+ export class NotificationService extends AbstractService {
5
+ static async findMany(params: { isArchived?: boolean; next?: NextRef }): Promise<NotificationInterface[]> {
6
+ const endpoint = new EndpointCreator({ endpoint: Modules.Notification });
7
+
8
+ if (params.isArchived) endpoint.addAdditionalParam("isArchived", "true");
9
+
10
+ return this.callApi<NotificationInterface[]>({
11
+ type: Modules.Notification,
12
+ method: HttpMethod.GET,
13
+ endpoint: endpoint.generate(),
14
+ next: params.next,
15
+ });
16
+ }
17
+
18
+ static async markAsRead(params: { data: any }): Promise<void> {
19
+ const endpoint = new EndpointCreator({ endpoint: Modules.Notification });
20
+ await this.callApi({
21
+ type: Modules.Notification,
22
+ method: HttpMethod.PATCH,
23
+ endpoint: endpoint.generate(),
24
+ input: params.data,
25
+ overridesJsonApiCreation: true,
26
+ });
27
+ }
28
+
29
+ static async archive(params: { id: string }): Promise<void> {
30
+ const endpoint = new EndpointCreator({ endpoint: Modules.Notification, id: params.id, childEndpoint: "archive" });
31
+
32
+ await this.callApi({ type: Modules.Notification, method: HttpMethod.POST, endpoint: endpoint.generate() });
33
+ }
34
+ }
@@ -0,0 +1,51 @@
1
+ import { AbstractApiData, JsonApiHydratedDataInterface, Modules } from "../../../core";
2
+ import { UserInterface } from "../../user";
3
+ import { NotificationInput, NotificationInterface } from "./notification.interface";
4
+
5
+ export class Notification extends AbstractApiData implements NotificationInterface {
6
+ private _notificationType?: string;
7
+ private _isRead?: boolean;
8
+
9
+ private _actor?: UserInterface;
10
+
11
+ get notificationType(): string {
12
+ if (this._notificationType === undefined) throw new Error("notificationType is not set");
13
+ return this._notificationType;
14
+ }
15
+
16
+ get isRead(): boolean {
17
+ return this._isRead === undefined ? false : this._isRead;
18
+ }
19
+
20
+ get actor(): UserInterface | undefined {
21
+ return this._actor;
22
+ }
23
+
24
+ rehydrate(data: JsonApiHydratedDataInterface): this {
25
+ super.rehydrate(data);
26
+
27
+ this._notificationType = data.jsonApi.attributes.notificationType;
28
+ this._isRead = data.jsonApi.attributes.isRead;
29
+
30
+ this._actor = this._readIncluded(data, "actor", Modules.User) as UserInterface;
31
+
32
+ return this;
33
+ }
34
+
35
+ createJsonApi(data: NotificationInput) {
36
+ const response: any = {
37
+ data: {
38
+ type: Modules.Notification.name,
39
+ id: data.id,
40
+ attributes: {
41
+ isRead: data.isRead,
42
+ },
43
+ meta: {},
44
+ relationships: {},
45
+ },
46
+ included: [],
47
+ };
48
+
49
+ return response;
50
+ }
51
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./data";
2
+ export * from "./notification.module";
@@ -0,0 +1,10 @@
1
+ import { ModuleFactory } from "../../permissions";
2
+ import { Notification } from "./data/notification";
3
+
4
+ export const NotificationModule = (factory: ModuleFactory) =>
5
+ factory({
6
+ pageUrl: "/notifications",
7
+ name: "notifications",
8
+ model: Notification,
9
+ moduleId: "9259d704-c670-4e77-a3a1-a728ffc5be3d",
10
+ });
@@ -0,0 +1,3 @@
1
+ export * from "./push";
2
+ export * from "./push.interface";
3
+ export * from "./push.service";
@@ -0,0 +1,8 @@
1
+ import { ApiDataInterface } from "../../../core";
2
+
3
+ export type PushInput = {
4
+ key: string;
5
+ contentType?: string;
6
+ };
7
+
8
+ export interface PushInterface extends ApiDataInterface {}
@@ -0,0 +1,17 @@
1
+ import { AbstractService, HttpMethod } from "../../../core";
2
+ import { EndpointCreator } from "../../../core";
3
+ import { Modules } from "../../../core";
4
+
5
+ export class PushService extends AbstractService {
6
+ static async register(params: { data: any }): Promise<void> {
7
+ const endpoint = new EndpointCreator({ endpoint: Modules.Push });
8
+
9
+ await this.callApi({
10
+ type: Modules.Push,
11
+ method: HttpMethod.POST,
12
+ endpoint: endpoint.generate(),
13
+ input: params.data,
14
+ overridesJsonApiCreation: true,
15
+ });
16
+ }
17
+ }
@@ -0,0 +1,18 @@
1
+ import { AbstractApiData, Modules } from "../../../core";
2
+ import { PushInput, PushInterface } from "./push.interface";
3
+
4
+ export class Push extends AbstractApiData implements PushInterface {
5
+ createJsonApi(data: PushInput) {
6
+ const response: any = {
7
+ data: {
8
+ type: Modules.Push.name,
9
+ attributes: {
10
+ key: data.key,
11
+ },
12
+ },
13
+ included: [],
14
+ };
15
+
16
+ return response;
17
+ }
18
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./data";
2
+ export * from "./push.module";
@@ -0,0 +1,10 @@
1
+ import { ModuleFactory } from "../../permissions";
2
+ import { Push } from "./data/push";
3
+
4
+ export const PushModule = (factory: ModuleFactory) =>
5
+ factory({
6
+ pageUrl: "/push",
7
+ name: "push",
8
+ model: Push,
9
+ moduleId: "",
10
+ });
@@ -0,0 +1,4 @@
1
+ export * from "./role";
2
+ export * from "./role.fields";
3
+ export * from "./role.interface";
4
+ export * from "./role.service";
@@ -0,0 +1,8 @@
1
+ export enum RoleFields {
2
+ roleId = "roleId",
3
+ name = "name",
4
+ description = "description",
5
+
6
+ createdAt = "createdAt",
7
+ updatedAt = "updatedAt",
8
+ }
@@ -0,0 +1,16 @@
1
+ import { ApiDataInterface } from "../../../core";
2
+ import { FeatureInterface } from "../../feature";
3
+
4
+ export type RoleInput = {
5
+ id: string;
6
+ name: string;
7
+ description?: string;
8
+ };
9
+
10
+ export interface RoleInterface extends ApiDataInterface {
11
+ get name(): string;
12
+ get description(): string;
13
+ get isSelectable(): boolean;
14
+
15
+ get requiredFeature(): FeatureInterface | undefined;
16
+ }
@@ -0,0 +1,117 @@
1
+ import { AbstractService, EndpointCreator, HttpMethod, Modules, NextRef, PreviousRef } from "../../../core";
2
+ import { RoleInput, RoleInterface } from "./role.interface";
3
+
4
+ export class RoleService extends AbstractService {
5
+ static async findById(params: { roleId: string }): Promise<RoleInterface> {
6
+ return this.callApi<RoleInterface>({
7
+ type: Modules.Role,
8
+ method: HttpMethod.GET,
9
+ endpoint: new EndpointCreator({ endpoint: Modules.Role, id: params.roleId }).generate(),
10
+ });
11
+ }
12
+
13
+ static async findAllRoles(params: { search?: string; next?: NextRef }): Promise<RoleInterface[]> {
14
+ const endpoint = new EndpointCreator({ endpoint: Modules.Role });
15
+
16
+ if (params.search) endpoint.addAdditionalParam("search", params.search);
17
+
18
+ return this.callApi({
19
+ type: Modules.Role,
20
+ method: HttpMethod.GET,
21
+ endpoint: endpoint.generate(),
22
+ next: params.next,
23
+ });
24
+ }
25
+
26
+ static async findAllRolesByUser(params: {
27
+ userId: string;
28
+ search?: string;
29
+ next?: NextRef;
30
+ prev?: PreviousRef;
31
+ }): Promise<RoleInterface[]> {
32
+ const endpoint = new EndpointCreator({ endpoint: Modules.User, id: params.userId, childEndpoint: Modules.Role });
33
+
34
+ if (params.search) endpoint.addAdditionalParam("search", params.search);
35
+
36
+ return this.callApi({
37
+ type: Modules.Role,
38
+ method: HttpMethod.GET,
39
+ endpoint: endpoint.generate(),
40
+ next: params.next,
41
+ });
42
+ }
43
+
44
+ static async findAllRolesUserNotIn(params: {
45
+ userId: string;
46
+ search?: string;
47
+ next?: NextRef;
48
+ prev?: PreviousRef;
49
+ }): Promise<RoleInterface[]> {
50
+ const endpoint = new EndpointCreator({
51
+ endpoint: Modules.User,
52
+ id: params.userId,
53
+ childEndpoint: Modules.Role,
54
+ }).addAdditionalParam("userNotIn", "true");
55
+
56
+ if (params.search) endpoint.addAdditionalParam("search", params.search);
57
+
58
+ return this.callApi({
59
+ type: Modules.Role,
60
+ method: HttpMethod.GET,
61
+ endpoint: endpoint.generate(),
62
+ next: params.next,
63
+ });
64
+ }
65
+
66
+ static async addUserToRole(params: { userId: string; roleId: string }): Promise<void> {
67
+ this.callApi<RoleInterface>({
68
+ type: Modules.Role,
69
+ method: HttpMethod.POST,
70
+ endpoint: new EndpointCreator({
71
+ endpoint: Modules.Role,
72
+ id: params.roleId,
73
+ childEndpoint: Modules.User,
74
+ childId: params.userId,
75
+ }).generate(),
76
+ });
77
+ }
78
+
79
+ static async removeUserFromRole(params: { userId: string; roleId: string }): Promise<void> {
80
+ this.callApi<RoleInterface>({
81
+ type: Modules.Role,
82
+ method: HttpMethod.DELETE,
83
+ endpoint: new EndpointCreator({
84
+ endpoint: Modules.Role,
85
+ id: params.roleId,
86
+ childEndpoint: Modules.User,
87
+ childId: params.userId,
88
+ }).generate(),
89
+ });
90
+ }
91
+
92
+ static async create(params: { roleId: string; name: string; description?: string }): Promise<RoleInterface> {
93
+ return this.callApi<RoleInterface>({
94
+ type: Modules.Role,
95
+ method: HttpMethod.POST,
96
+ endpoint: new EndpointCreator({ endpoint: Modules.Role }).generate(),
97
+ input: { id: params.roleId, name: params.name, description: params.description } as RoleInput,
98
+ });
99
+ }
100
+
101
+ static async update(params: { roleId: string; name: string; description?: string }): Promise<RoleInterface> {
102
+ return this.callApi<RoleInterface>({
103
+ type: Modules.Role,
104
+ method: HttpMethod.PUT,
105
+ endpoint: new EndpointCreator({ endpoint: Modules.Role, id: params.roleId }).generate(),
106
+ input: { id: params.roleId, name: params.name, description: params.description } as RoleInput,
107
+ });
108
+ }
109
+
110
+ static async delete(params: { roleId: string }): Promise<RoleInterface> {
111
+ return this.callApi<RoleInterface>({
112
+ type: Modules.Role,
113
+ method: HttpMethod.DELETE,
114
+ endpoint: new EndpointCreator({ endpoint: Modules.Role, id: params.roleId }).generate(),
115
+ });
116
+ }
117
+ }
@@ -0,0 +1,62 @@
1
+ import { AbstractApiData, JsonApiHydratedDataInterface, Modules } from "../../../core";
2
+ import { FeatureInterface } from "../../feature";
3
+ import { RoleInput, RoleInterface } from "./role.interface";
4
+
5
+ export class Role extends AbstractApiData implements RoleInterface {
6
+ private _name?: string;
7
+ private _description?: string;
8
+ private _isSelectable?: boolean;
9
+
10
+ private _requiredFeature?: FeatureInterface;
11
+
12
+ get name(): string {
13
+ if (!this._name) throw new Error("Name is not defined");
14
+ return this._name;
15
+ }
16
+
17
+ get description(): string {
18
+ return this._description ?? "";
19
+ }
20
+
21
+ get isSelectable(): boolean {
22
+ return this._isSelectable ?? false;
23
+ }
24
+
25
+ get requiredFeature(): FeatureInterface | undefined {
26
+ return this._requiredFeature;
27
+ }
28
+
29
+ rehydrate(data: JsonApiHydratedDataInterface): this {
30
+ super.rehydrate(data);
31
+
32
+ this._name = data.jsonApi.attributes.name ?? undefined;
33
+ this._description = data.jsonApi.attributes.description ?? undefined;
34
+ this._isSelectable = data.jsonApi.attributes.isSelectable ?? undefined;
35
+
36
+ this._requiredFeature = this._readIncluded<FeatureInterface>(
37
+ data,
38
+ "requiredFeature",
39
+ Modules.Feature,
40
+ ) as FeatureInterface;
41
+
42
+ return this;
43
+ }
44
+
45
+ createJsonApi(data: RoleInput) {
46
+ const response: any = {
47
+ data: {
48
+ type: Modules.Role.name,
49
+ id: data.id,
50
+ attributes: {
51
+ name: data.name,
52
+ },
53
+ meta: {},
54
+ },
55
+ included: [],
56
+ };
57
+
58
+ if (data.description !== undefined) response.data.attributes.description = data.description;
59
+
60
+ return response;
61
+ }
62
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./data";
2
+ export * from "./role.module";
@@ -0,0 +1,10 @@
1
+ import { ModuleFactory } from "../../permissions";
2
+ import { Role } from "./data/role";
3
+
4
+ export const RoleModule = (factory: ModuleFactory) =>
5
+ factory({
6
+ pageUrl: "/roles",
7
+ name: "roles",
8
+ model: Role,
9
+ moduleId: "9f6416e6-7b9b-4e1a-a99f-833191eca8a9",
10
+ });
@@ -0,0 +1,3 @@
1
+ export * from "./s3";
2
+ export * from "./s3.interface";
3
+ export * from "./s3.service";
@@ -0,0 +1,11 @@
1
+ import { ApiDataInterface } from "../../../core";
2
+
3
+ export type S3Input = {
4
+ key: string;
5
+ contentType?: string;
6
+ };
7
+
8
+ export interface S3Interface extends ApiDataInterface {
9
+ get url(): string;
10
+ get headers(): Record<string, string>;
11
+ }
@@ -0,0 +1,30 @@
1
+ import { AbstractService, EndpointCreator, HttpMethod, Modules } from "../../../core";
2
+ import { S3Interface } from "./s3.interface";
3
+
4
+ export class S3Service extends AbstractService {
5
+ static async getPreSignedUrl(params: { key: string; contentType: string; isPublic?: boolean }): Promise<S3Interface> {
6
+ const endpoint = new EndpointCreator({ endpoint: Modules.S3 })
7
+ .addAdditionalParam("key", params.key)
8
+ .addAdditionalParam("contentType", params.contentType);
9
+
10
+ if (params.isPublic) endpoint.addAdditionalParam("isPublic", "true");
11
+
12
+ return this.callApi<S3Interface>({ type: Modules.S3, method: HttpMethod.GET, endpoint: endpoint.generate() });
13
+ }
14
+
15
+ static async getSignedUrl(params: { key: string; isPublic?: boolean }): Promise<S3Interface> {
16
+ const endpoint = new EndpointCreator({ endpoint: Modules.S3, id: "sign" }).addAdditionalParam("key", params.key);
17
+
18
+ if (params.isPublic) endpoint.addAdditionalParam("isPublic", "true");
19
+
20
+ return this.callApi<S3Interface>({ type: Modules.S3, method: HttpMethod.GET, endpoint: endpoint.generate() });
21
+ }
22
+
23
+ static async deleteFile(params: { key: string }): Promise<void> {
24
+ this.callApi<S3Interface>({
25
+ type: Modules.S3,
26
+ method: HttpMethod.DELETE,
27
+ endpoint: new EndpointCreator({ endpoint: Modules.S3 }).addAdditionalParam("key", params.key).generate(),
28
+ });
29
+ }
30
+ }
@@ -0,0 +1,60 @@
1
+ import { AbstractApiData, JsonApiHydratedDataInterface, Modules } from "../../../core";
2
+ import { S3Input, S3Interface } from "./s3.interface";
3
+
4
+ export class S3 extends AbstractApiData implements S3Interface {
5
+ private _url?: string;
6
+ private _storageType?: string;
7
+ private _contentType?: string;
8
+ private _blobType?: string;
9
+ private _acl?: string;
10
+
11
+ get url(): string {
12
+ if (!this._url) throw new Error("Image URL is not set.");
13
+ return this._url;
14
+ }
15
+
16
+ get headers(): Record<string, string> {
17
+ const headers: Record<string, string> = {};
18
+
19
+ if (this._contentType) {
20
+ headers["Content-Type"] = this._contentType;
21
+ }
22
+
23
+ if (this._blobType) {
24
+ headers["x-ms-blob-type"] = this._blobType;
25
+ }
26
+
27
+ if (this._acl) {
28
+ headers["x-amz-acl"] = this._acl;
29
+ }
30
+
31
+ return headers;
32
+ }
33
+ rehydrate(data: JsonApiHydratedDataInterface): this {
34
+ super.rehydrate(data);
35
+
36
+ this._url = data.jsonApi.attributes.url ?? undefined;
37
+ this._storageType = data.jsonApi.attributes.storageType ?? undefined;
38
+ this._contentType = data.jsonApi.attributes.contentType ?? undefined;
39
+ this._blobType = data.jsonApi.attributes.blobType ?? undefined;
40
+ this._acl = data.jsonApi.attributes.acl ?? undefined;
41
+
42
+ return this;
43
+ }
44
+
45
+ createJsonApi(data: S3Input) {
46
+ const response: any = {
47
+ data: {
48
+ type: Modules.S3.name,
49
+ attributes: {
50
+ key: data.key,
51
+ },
52
+ },
53
+ included: [],
54
+ };
55
+
56
+ if (data.contentType) response.data.attributes.contentType = data.contentType;
57
+
58
+ return response;
59
+ }
60
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./data";
2
+ export * from "./s3.module";
@@ -0,0 +1,10 @@
1
+ import { ModuleFactory } from "../../permissions";
2
+ import { S3 } from "./data/s3";
3
+
4
+ export const S3Module = (factory: ModuleFactory) =>
5
+ factory({
6
+ pageUrl: "/s3",
7
+ name: "s3",
8
+ model: S3,
9
+ moduleId: "db41ba46-e171-4324-8845-99353eba8568",
10
+ });
@@ -0,0 +1 @@
1
+ export * from "./interfaces";
@@ -0,0 +1 @@
1
+ export * from "./search.result.interface";
@@ -0,0 +1,3 @@
1
+ export interface SearchResultInterface {
2
+ get searchResult(): string;
3
+ }
@@ -0,0 +1,10 @@
1
+ import { ModuleFactory } from "../../permissions";
2
+ import { User } from "./data";
3
+
4
+ export const AuthorModule = (factory: ModuleFactory) =>
5
+ factory({
6
+ pageUrl: "/authors",
7
+ name: "authors",
8
+ model: User,
9
+ moduleId: "04cfc677-0fd2-4f5e-adf4-2483a00c0277",
10
+ });
@@ -0,0 +1,2 @@
1
+ export * from "./lists";
2
+ export * from "./widgets";