-
Notifications
You must be signed in to change notification settings - Fork 454
Feat(page): Add exporting components and APIs for page component to support page template extension (alpha version) #797
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feat(page): Add exporting components and APIs for page component to support page template extension (alpha version) #797
Conversation
WalkthroughThe pull request introduces several modifications across multiple files, primarily focusing on enhancing the exports of various modules. Key changes include the addition of Changes
Possibly related PRs
Suggested labels
Suggested reviewers
📜 Recent review detailsConfiguration used: CodeRabbit UI 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
…iny-engine into feat/plugin-tree-demo
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Outside diff range and nitpick comments (3)
packages/plugins/page/src/Main.vue (2)
Line range hint
115-134: Consider refactoringopenSettingPanelfor improved readabilityThe
openSettingPanelmethod is quite complex and handles multiple responsibilities. Consider breaking it down into smaller, more focused functions to improve readability and maintainability.Here's a suggested refactor:
const handlePanelChange = (isFolder, isPageChange) => { if (isFolder) { isPageChange && closePageSettingPanel(); openFolderSettingPanel(); } else { isPageChange && closeFolderSettingPanel(); openPageSettingPanel(); } }; const openSettingPanel = async (node) => { state.isFolder = !node.data.isPage; pageSettingState.isNew = false; const isPageChange = node.data.id !== pageSettingState.currentPageData.id; handlePanelChange(state.isFolder, isPageChange); const pageDetail = await fetchPageDetail(node.data?.id); initCurrentPageData(pageDetail); };This refactoring separates the panel opening/closing logic into a separate function, making the main
openSettingPanelfunction more concise and easier to understand.
Line range hint
115-134: Add error handling for asynchronous operationsThe
openSettingPanelmethod contains an asynchronous operation (fetchPageDetail) without any error handling. This could lead to unhandled promise rejections if the fetch operation fails.Consider adding try-catch blocks to handle potential errors:
const openSettingPanel = async (node) => { try { state.isFolder = !node.data.isPage; pageSettingState.isNew = false; const isPageChange = node.data.id !== pageSettingState.currentPageData.id; handlePanelChange(state.isFolder, isPageChange); const pageDetail = await fetchPageDetail(node.data?.id); initCurrentPageData(pageDetail); } catch (error) { console.error('Error opening setting panel:', error); // Handle the error appropriately, e.g., show an error message to the user } };This change ensures that any errors during the asynchronous operation are caught and handled appropriately, improving the robustness of the application.
packages/plugins/page/src/PageSetting.vue (1)
22-22: Nitpick: AddkeyAttribute to Dynamic ComponentAdding a
keyattribute to the dynamic component helps Vue optimize rendering and improves performance.Apply this suggestion:
<component :is="pageGeneral" + :key="pageGeneral" ref="pageGeneralRef" :isFolder="isFolder" ></component>
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (4)
- packages/common/component/MetaListItem.vue (4 hunks)
- packages/design-core/index.js (1 hunks)
- packages/plugins/page/src/Main.vue (1 hunks)
- packages/plugins/page/src/PageSetting.vue (4 hunks)
✅ Files skipped from review due to trivial changes (1)
- packages/common/component/MetaListItem.vue
🧰 Additional context used
🔇 Additional comments (8)
packages/design-core/index.js (1)
36-36: LGTM! VerifyPluginSettingimplementation.The addition of
PluginSettingto the exports aligns with the PR objectives of expanding functionality. This change makesPluginSettingavailable for use in other parts of the application, which is beneficial for the AstroPro page template enhancements.To ensure the correctness of this change, please verify that
PluginSettingis properly implemented in the '@opentiny/tiny-engine-common' package. Run the following script to check its implementation:packages/plugins/page/src/Main.vue (3)
Line range hint
1-28: LGTM: Template changes enhance user interactionThe new SVG buttons for creating folders and pages, along with the corresponding event handlers, improve the user interface and align well with the PR objectives. The use of
reffor thepage-treecomponent is a good practice for managing complex interactions.
Line range hint
169-176: LGTM: Style changes are minimal and consistentThe style changes for the
.tiny-buttonclass are minimal and appear to be consistent with the existing codebase. The use of the:deep()selector is correct for targeting nested components in Vue 3.
Line range hint
1-176: Overall assessment: Good additions with room for improvementThe changes in this file successfully implement new features for page and folder management, aligning well with the PR objectives. The new UI elements and corresponding logic enhance the user experience and functionality of the application.
However, there are opportunities for improvement:
- Extracting default values for pages and folders into utility functions.
- Refactoring the
openSettingPanelmethod for better readability and maintainability.- Adding error handling for asynchronous operations.
Addressing these points would further improve the code quality and robustness of the application. Despite these suggestions, the overall implementation is solid and contributes positively to the project.
packages/plugins/page/src/PageSetting.vue (4)
22-22: Approved: Dynamic Component Rendering ofpageGeneralThe static component
<PageGeneral>has been replaced with a dynamic component using<component :is="pageGeneral">. This enhances flexibility by allowingpageGeneralto be assigned at runtime from the registry.
60-68: Approved: ImportinggetMergeRegistryand Organizing ImportsThe addition of
getMergeRegistryto the imports from@opentiny/tiny-engine-meta-registeris appropriate for accessing registry components. The imports are well-organized, improving readability.
76-76: Verify the Import Path ofmetaPlease ensure that the import statement for
metais correct. Verify that'../meta'is the correct relative path and thatmetaexports the necessary properties (type,id) used ingetMergeRegistry.
134-135: Approved: Dynamic Retrieval ofPageGeneralfrom RegistryRetrieving
PageGeneraldynamically usinggetMergeRegistry(meta.type, meta.id)enhances modularity and allows for more flexible component management.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
🧹 Outside diff range and nitpick comments (3)
packages/plugins/page/src/composable/usePage.js (1)
42-42: Approved, but please add documentation forselectedTemplateCard.The addition of
selectedTemplateCardas a reactive reference is a good practice. However, its purpose and usage are not immediately clear from the context.Could you please add a comment explaining the intended use of
selectedTemplateCardand how it interacts with other parts of the page management system?packages/plugins/page/src/PageSetting.vue (2)
101-104: Provide documentation for thebeforeCreatePagehookThe introduction of the
beforeCreatePageasynchronous method in theapiobject allows for pre-processing before page creation. Consider adding documentation or comments to explain its intended use and how developers can override or extend it.
Line range hint
166-185: Handle potential exceptions frombeforeCreatePageThe
beforeCreatePagefunction is awaited without a try-catch block. If it throws an error, it could cause the page creation process to fail silently. To enhance error handling and provide user feedback, wrap the call in a try-catch block.Apply this diff to handle errors:
const createPage = async () => { const { page_content, ...other } = DEFAULT_PAGE; const { page_content: page_content_state, ...pageSettingStateOther } = pageSettingState.currentPageData; const createParams = { ...other, ...pageSettingStateOther, page_content: { ...page_content, ...page_content_state, fileName: pageSettingState.currentPageData.name }, app: appInfoState.selectedId, isPage: true }; if (createParams.id) { delete createParams.id; delete createParams._id; } + try { await api.beforeCreatePage(createParams); + } catch (error) { + useNotify({ + type: 'error', + title: 'Error before creating page', + message: error.message || 'An error occurred in beforeCreatePage.' + }); + return; + } requestCreatePage(createParams) .then((data) => { pageSettingState.updateTreeData(); // Remaining code...
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
📒 Files selected for processing (3)
- packages/plugins/page/index.js (1 hunks)
- packages/plugins/page/src/PageSetting.vue (7 hunks)
- packages/plugins/page/src/composable/usePage.js (3 hunks)
🧰 Additional context used
🔇 Additional comments (9)
packages/plugins/page/index.js (3)
16-17: LGTM: New imports added for enhanced functionality.The new imports for
PageGeneralandpageSettingApiare consistent with the changes in the exported object and suggest new functionality being added to the page plugin.
Line range hint
1-31: LGTM: Well-integrated enhancements to the page plugin.The changes to this file are consistent with the PR objectives and enhance the plugin's functionality as intended. The new imports and modifications to the exported object are well-integrated into the existing structure without introducing apparent conflicts.
21-21: LGTM: Enhanced plugin configuration.The changes to the exported object expand the plugin's capabilities:
- The
apisproperty now includes bothapiandpageSettingApi, increasing the API surface.- The new
componentsproperty makesPageGeneralavailable within the plugin.These updates align with the PR objectives of expanding the AstroPro page template functionality.
As these changes might introduce a breaking change, please ensure that:
- The documentation is updated to reflect these new APIs and components.
- Any existing code that relies on the previous structure is updated accordingly.
Run the following script to check for potential documentation updates:
Also applies to: 23-25
packages/plugins/page/src/composable/usePage.js (3)
13-13: LGTM: Import ofrefis appropriate.The addition of
refto the import statement is necessary for creating the newselectedTemplateCardreactive reference. This change aligns with Vue 3 composition API best practices.
Line range hint
1-150: Summary: Changes look good, but more context needed.The changes to this file are minimal and focused, introducing a new reactive reference
selectedTemplateCard. The implementation follows Vue 3 best practices. However, to fully understand the impact and purpose of these changes, more context is needed.Could you please provide more information on:
- The overall feature this change is part of?
- How
selectedTemplateCardwill be used in the page management system?- Any related changes in other components that interact with this composable?
This context will help ensure that the changes are fully aligned with the project's objectives and maintain consistency across the codebase.
138-138: LGTM: Export ofselectedTemplateCardis consistent.The addition of
selectedTemplateCardto the exported object is appropriate and consistent with its introduction as a new state variable.To ensure proper integration, please verify the usage of
selectedTemplateCardin other components:packages/plugins/page/src/PageSetting.vue (3)
60-68: Successfully imported necessary modulesThe addition of
getMergeRegistryfrom@opentiny/tiny-engine-meta-registeris appropriate and used correctly in the code.
76-76: Importingmetamodule for registry usageImporting
metaenables the retrieval of component metadata, which is crucial for dynamic component registration.
382-382: ExposepageGeneralandpageGeneralRefto the templateReturning
pageGeneralandpageGeneralReffrom the setup function allows the template to dynamically render and interact with thepageGeneralcomponent.
hexqi
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PR的标题尽量用英文
English | 简体中文
PR
PR Checklist
Please check if your PR fulfills the following requirements:
PR Type
What kind of change does this PR introduce?
Background and solution
What is the current behavior?
Issue Number: N/A
What is the new behavior?
Does this PR introduce a breaking change?
Other information
Summary by CodeRabbit
New Features
PageGeneralfor improved page structure.PageSettingfor enhanced flexibility.Improvements