Skip to content
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

[WIP] Update Manager Refactor #1259

Draft
wants to merge 110 commits into
base: wip/support-uploading-packages
Choose a base branch
from

Conversation

jaxwilko
Copy link
Member

@jaxwilko jaxwilko commented Nov 29, 2024

Me and Luke are working on a little refactor of how the UpdateManager works...

It also includes some components from my old composer PR found here: #967

The core idea of this is that there should be consistent interfaces to interact with different things built on top of Winter (i.e. modules, plugins & themes). Each of these elements will now have their class (i.e. Theme, PluginBase, ModuleServiceProvider) will now extend WinterExtension which will allow them to all interact with the update manager and other system functions directly.

In addition PluginManager, ThemeManager & ModuleManager (new) will all implement the ExtensionManager interface, which will allow for a consistant way to interact with all Winter extensions.

I.e. You will be able to call PluginManager::instance()->update($plugin) or ThemeManager::instance()->update($theme).

This also allows us to do some cool stuff like (only support for plugin installing is currently functional)

(new ExtensionSource(
    ExtensionSource::SOURCE_COMPOSER,
    ExtensionSource::TYPE_PLUGIN,
    composerPackage: 'jaxwilko/datamigrator'
))->install();

(new ExtensionSource(
    ExtensionSource::SOURCE_COMPOSER,
    ExtensionSource::TYPE_THEME,
    composerPackage: 'jaxwilko/custom-theme'
))->install();

(new ExtensionSource(
    ExtensionSource::SOURCE_LOCAL,
    ExtensionSource::TYPE_PLUGIN,
    code: 'winter.demo'
))->install();

(new ExtensionSource(
    ExtensionSource::SOURCE_LOCAL,
    ExtensionSource::TYPE_PLUGIN,
    path: 'plugins/winter/demo'
))->install();

By the end of the PR, the UpdateManager as is may no longer exist as is, instead each ExtensionManager will be responsible for it's existing functionality.

Requires storm branch: https://github.com/wintercms/storm/tree/wip/support-uploading-packages-update-manager-changes

@jaxwilko jaxwilko marked this pull request as draft November 29, 2024 18:41
@jaxwilko jaxwilko requested a review from LukeTowers November 29, 2024 18:41
mjauvin and others added 7 commits December 19, 2024 05:31
The TagList formwidget was not working properly in relation mode if the relation was not using a pivot table (e.g. morphMany/hasMany)

All modes did not update the model field or relation when all tags had been cleared.

Fixes #1223
bennothommo and others added 30 commits January 13, 2025 01:57
Co-authored-by: HitArrowLegend <[email protected]>
Co-authored-by: Ben Thomson <[email protected]>
Co-authored-by: Luke Towers <[email protected]>
Related: wintercms/storm#204

This adds a fully backwards compatible "v2" log viewer that allows of unrolling of all previous exceptions. It also adds snippets for each frame in the call stack and extra information about the environment is recorded and displayed to the user.

This is a stopgap solution until we get around to fully implementing the Ignition error page in Winter CMS core and displaying stored errors with that instead.
Documented by wintercms/docs#229.

Additional instructions for adding to a theme:

- Run `artisan create:theme mytheme tailwind` to generate a theme that makes use of Tailwind
- Run `artisan vite:create theme-mytheme --tailwind --react --force` to generate the required files for React
- Run `artisan vite:install` and answer yes to the prompt asking to include mytheme in your package workspace if it asks.
- Add `{{ viteReactRefresh('theme-mytheme') }}` immediately above the `{{ vite() }}` tag in `themes/mytheme/partials/site/footer.htm`
Add the `<div id="root"></div>` element wherever you want your React app to be injected into the DOM (either in `themes/mytheme/layouts/default.htm` or `themes/mytheme/pages/home.htm`).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants