Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
bde5492
chore(page-builder): initial page-builder plugin setup
antony-lambdacurry Feb 26, 2025
8d409ae
feat(page-builder): add initial components
antony-lambdacurry Feb 28, 2025
ee88c9c
feat(page-builder): add core models/links
antony-lambdacurry Mar 1, 2025
72ab84c
feat(page-builder): update admin UI components and routes
antony-lambdacurry Mar 4, 2025
4617a56
Merge remote-tracking branch 'origin/page-builder' into antony/mkt-13…
antony-lambdacurry Mar 4, 2025
de0aca0
feat(page-builder): add core models/services/module/migrations/links
antony-lambdacurry Mar 5, 2025
b8a5251
fix(page-builder): remove sidebar-container export
antony-lambdacurry Mar 6, 2025
08a47bf
chore(page-builder): upgrade Medusa dependencies to version 2.6.0
antony-lambdacurry Mar 6, 2025
8fab899
temporary fix(page-builder): convert page with dynamic params to stat…
antony-lambdacurry Mar 6, 2025
dd687f2
refactor(page-builder): restructure editor route components and provi…
antony-lambdacurry Mar 6, 2025
0d5a8b4
Merge remote-tracking branch 'origin/page-builder' into antony/mkt-13…
antony-lambdacurry Mar 6, 2025
336fdbc
feat(page-builder): add main Content page components
antony-lambdacurry Mar 8, 2025
f980596
feat(page-builder): simplify content page and create data table compo…
antony-lambdacurry Mar 11, 2025
15eebfc
feat(page-builder): rename models for consistency and introduce commo…
antony-lambdacurry Mar 13, 2025
0395d14
feat(page-builder): add pageBuilderModuleEvents for post creation events
antony-lambdacurry Mar 13, 2025
b07d71b
feat(page-builder): update post model and migration for handle column
antony-lambdacurry Mar 13, 2025
900e7f3
feat(page-builder): implement create post workflow and related types
antony-lambdacurry Mar 13, 2025
1d0f0d6
feat(page-builder): add admin post routes and middlewares
antony-lambdacurry Mar 13, 2025
41c70ac
feat(page-builder): implement ExtendedMedusaSDK and resource classes
antony-lambdacurry Mar 13, 2025
16469e8
feat(page-builder): add sdk.ts for ExtendedMedusaSDK initialization
antony-lambdacurry Mar 13, 2025
3b6ad24
fix(page-builder): replace fragment shorthand with Fragment component…
antony-lambdacurry Mar 13, 2025
3988c99
feat(page-builder): implement post creation and listing hooks
antony-lambdacurry Mar 13, 2025
09ce659
feat(page-builder): implement post update workflow and related types
antony-lambdacurry Mar 13, 2025
6881701
feat(page-builder): add post update functionality and related types
antony-lambdacurry Mar 13, 2025
51cfeaf
feat(page-builder): enhance post managemen
antony-lambdacurry Mar 17, 2025
d2c8d8e
feat(page-builder): add update and delete post functionality
antony-lambdacurry Mar 17, 2025
fea918a
feat(page-builder): add post update and delete hooks
antony-lambdacurry Mar 17, 2025
36c8582
feat(page-builder): implement duplicate post workflow and related steps
antony-lambdacurry Mar 19, 2025
daadc42
feat(page-builder): add duplicate post functionality and related types
antony-lambdacurry Mar 19, 2025
087769a
feat(page-builder): add POST route for duplicating posts
antony-lambdacurry Mar 19, 2025
3925212
feat(page-builder): add duplicate post functionality to posts data …
antony-lambdacurry Mar 19, 2025
e8921f1
refactor(page-builder): remove unused PostSection import in duplicate…
antony-lambdacurry Mar 19, 2025
b6c60a1
refactor(page-builder): change imports to type imports in posts route
antony-lambdacurry Mar 19, 2025
3626b2a
feat(page-builder): make post fields searchable in PostModel
antony-lambdacurry Mar 19, 2025
72e2490
feat(page-builder): implement useQueryParams hook and refactor PostsD…
antony-lambdacurry Mar 19, 2025
dd75ef0
feat(page-builder-types): add initial type definitions and package co…
antony-lambdacurry Mar 24, 2025
37933b6
feat(plugins-sdk): update version and add page builder resources
antony-lambdacurry Mar 24, 2025
f132a75
feat(page-builder): refactor post management and update dependencies
antony-lambdacurry Mar 24, 2025
6e6cd86
refactor(page-builder): update SDK imports and type definitions
antony-lambdacurry Mar 24, 2025
0ea43de
Merge pull request #5 from lambda-curry/antony/mkt-135-migrate-core-p…
antony-lambdacurry Mar 31, 2025
0ef7e30
Merge pull request #8 from lambda-curry/antony/mkt-137-post-managemen…
antony-lambdacurry Mar 31, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/page-builder-types/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
node_modules
18 changes: 18 additions & 0 deletions packages/page-builder-types/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"name": "@lambdacurry/medusa-page-builder-types",
"version": "0.0.4",
"packageManager": "yarn@4.6.0",
"types": "./src/index.d.ts",
"devDependencies": {
"typescript": "5.7.3"
},
"exports": {
".": "./src/index.d.ts"
},
"installConfig": {
"hoistingLimits": "workspaces"
},
"files": [
"src"
]
}
78 changes: 78 additions & 0 deletions packages/page-builder-types/src/admins.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import type { Post } from './models'

// Response Types
export interface PaginatedResponse {
count: number
offset: number
limit: number
}

export type AdminPageBuilderListPostsQuery = {
offset?: number
limit?: number
q?: string
id?: string | string[]
title?: string
handle?: string
status?: PostStatus | PostStatus[]
type?: PostType | PostType[]
content_mode?: PostContentMode | PostContentMode[]
is_home_page?: boolean
// biome-ignore lint/suspicious/noExplicitAny: medusa infered type
published_at?: any
// biome-ignore lint/suspicious/noExplicitAny: medusa infered type
archived_at?: any
// biome-ignore lint/suspicious/noExplicitAny: medusa infered type
created_at?: any
// biome-ignore lint/suspicious/noExplicitAny: medusa infered type
updated_at?: any
order?: string
fields?: string
}

export interface AdminPageBuilderListPostsResponse extends PaginatedResponse {
posts: Post[]
}

export type AdminPageBuilderCreatePostBody = {
title: string
handle?: string
excerpt?: string
content?: Record<string, unknown>
status?: PostStatus
type?: PostType
content_mode?: PostContentMode
seo?: Record<string, unknown>
is_home_page?: boolean
}

export interface AdminPageBuilderCreatePostResponse {
post: Post
}

export type AdminPageBuilderUpdatePostBody = {
id: string
title?: string
handle?: string
excerpt?: string
content?: Record<string, unknown>
status?: PostStatus
type?: PostType
content_mode?: PostContentMode
seo?: Record<string, unknown>
is_home_page?: boolean
}

export interface AdminPageBuilderUpdatePostResponse {
post: Post
}

export interface AdminPageBuilderDeletePostResponse {
id: string
object: string
deleted: boolean
}

export interface AdminPageBuilderDuplicatePostResponse {
post: Post
}
39 changes: 39 additions & 0 deletions packages/page-builder-types/src/common.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/**
* Common type declarations for page builder
*/

export type PostStatus = 'draft' | 'published' | 'archived'

export type PostType = 'page' | 'post'

export type PostContentMode = 'basic' | 'advanced'

// These would be defined in the implementation file
export declare const postStatuses: readonly PostStatus[]
export declare const postTypes: readonly PostType[]
export declare const postContentModes: readonly PostContentMode[]

export interface SortOptions {
sort?: string
order?: 'ASC' | 'DESC'
}

export interface PaginationOptions {
limit?: number
offset?: number
}

export interface FilterOptions {
q?: string
[key: string]: unknown
}

export type QueryOptions = SortOptions & PaginationOptions & FilterOptions

export interface FindConfig<T> extends QueryOptions {
select?: (keyof T)[]
relations?: string[]
where?: { [K in keyof T]?: T[K] | T[K][] } & {
[key: string]: unknown
}
}
4 changes: 4 additions & 0 deletions packages/page-builder-types/src/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
export * from './admins'
export * from './common'
export * from './models'
export * from './storefronts'
92 changes: 92 additions & 0 deletions packages/page-builder-types/src/models.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
/**
* Type declarations for page builder models
*/

import type { PostContentMode, PostStatus, PostType } from './common'

export interface Base {
id: string
created_at: string
updated_at: string | undefined
}

export interface Post extends Base {
title: string
handle?: string | null
excerpt?: string | null
content?: Record<string, unknown> | null
status: PostStatus
type: PostType
content_mode: PostContentMode
seo?: Record<string, unknown> | null
is_home_page: boolean
published_at?: string | null
archived_at?: string | null
featured_image_id?: string
featured_image?: Image
authors?: PostAuthor[]
tags?: PostTag[]
sections?: PostSection[]
root_id?: string
root?: PostTemplate
}

export interface Image extends Base {
url: string
alt?: string
width?: number
height?: number
mime_type?: string
file_size?: number
metadata?: Record<string, unknown>
}

export interface NavigationItem extends Base {
title: string
url: string
parent_id?: string
parent?: NavigationItem
children?: NavigationItem[]
}

export interface PostAuthor extends Base {
name: string
bio?: string
posts?: Post[]
}

export interface PostSection extends Base {
name: string
data?: Record<string, unknown>
order: number
post_id?: string
post?: Post
parent_section_id?: string
parent_section?: PostSection
child_sections?: PostSection[]
}

export interface PostTag extends Base {
name: string
posts?: Post[]
}

export interface PostTemplate extends Base {
name: string
data?: Record<string, unknown>
posts?: Post[]
}

export interface SiteSettings extends Base {
site_name: string
site_url?: string
logo_id?: string
logo?: Image
favicon_id?: string
favicon?: Image
social_links?: Record<string, string>
navigation?: Record<string, NavigationItem[]>
custom_css?: string
custom_js?: string
meta_defaults?: Record<string, unknown>
}
49 changes: 49 additions & 0 deletions packages/page-builder-types/src/storefronts.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/**
* Storefront type declarations for page builder
*/

import type { Post, PostAuthor, PostTag, SiteSettings } from './models'

export interface StorefrontGetPostParams {
handle: string
}

export interface StorefrontGetPostResponse {
post: Post
}

export interface StorefrontListPostsParams {
limit?: number
offset?: number
type?: string
tag?: string
author?: string
sort?: string
order?: 'asc' | 'desc'
}

export interface StorefrontListPostsResponse {
posts: Post[]
count: number
offset: number
limit: number
}

export interface StorefrontGetTagsResponse {
tags: PostTag[]
}

export interface StorefrontGetAuthorsResponse {
authors: PostAuthor[]
}

export interface StorefrontGetSiteSettingsResponse {
settings: SiteSettings
}

export interface StorefrontRenderOptions {
cacheControl?: string
handle?: string
language?: string
preview?: boolean
}
7 changes: 4 additions & 3 deletions packages/plugins-sdk/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@lambdacurry/medusa-plugins-sdk",
"version": "0.0.5",
"version": "0.0.6-beta.3",
"description": "SDK for Medusa plugins",
"author": "Lambda Curry (https://lambdacurry.dev)",
"license": "MIT",
Expand Down Expand Up @@ -38,15 +38,16 @@
"dev:publish": "yalc publish"
},
"devDependencies": {
"@medusajs/types": "^2.5.0",
"@medusajs/types": "^2.6.1",
"prettier": "^3.2.5",
"rimraf": "^6.0.1",
"tsup": "^8.0.2",
"typescript": "^5.7.2",
"yalc": "^1.0.0-pre.53"
},
"dependencies": {
"@medusajs/js-sdk": "^2.5.0",
"@lambdacurry/medusa-page-builder-types": "0.0.4",
"@medusajs/js-sdk": "^2.6.1",
"@types/express": "^5.0.0",
"@types/multer": "^1.4.12",
"form-data": "^4.0.2"
Expand Down
63 changes: 63 additions & 0 deletions packages/plugins-sdk/src/sdk/admin/admin-page-builder.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import type { Client } from '@medusajs/js-sdk'
import type {
AdminPageBuilderCreatePostBody,
AdminPageBuilderCreatePostResponse,
AdminPageBuilderListPostsQuery,
AdminPageBuilderListPostsResponse,
AdminPageBuilderDeletePostResponse,
AdminPageBuilderUpdatePostBody,
AdminPageBuilderUpdatePostResponse,
AdminPageBuilderDuplicatePostResponse,
} from '@lambdacurry/medusa-page-builder-types'

export class AdminPageBuilderResource {
constructor(private client: Client) {}

async listPosts(query: AdminPageBuilderListPostsQuery) {
return this.client.fetch<AdminPageBuilderListPostsResponse>(
'/admin/content/posts',
{
method: 'GET',
query,
},
)
}

async createPost(data: AdminPageBuilderCreatePostBody) {
return this.client.fetch<AdminPageBuilderCreatePostResponse>(
'/admin/content/posts',
{
method: 'POST',
body: data,
},
)
}

async updatePost(id: string, data: AdminPageBuilderUpdatePostBody) {
return this.client.fetch<AdminPageBuilderUpdatePostResponse>(
`/admin/content/posts/${id}`,
{
method: 'PUT',
body: data,
},
)
}

async deletePost(id: string) {
return this.client.fetch<AdminPageBuilderDeletePostResponse>(
`/admin/content/posts/${id}`,
{
method: 'DELETE',
},
)
}

async duplicatePost(id: string) {
return this.client.fetch<AdminPageBuilderDuplicatePostResponse>(
`/admin/content/posts/${id}/duplicate`,
{
method: 'POST',
},
)
}
}
Loading