refs https://github.com/TryGhost/Team/issues/643
With custom products and prices, the old data attributes for members functionality - `data-members-plan` - was still using the plan name for checkout session which won't work as it now expects a price ID. This change reworks how we setup to listen to `data-members-*` attributes and moves them inside App.js so they can work with API data fetched from site settings and use the price ID for the `monthly` and `yearly` names as fallback.
refs https://github.com/TryGhost/Team/issues/671
When turning on custom products, existing sites should have default price description that retains current behaviour. This change adds custom description with discount value for Yearly Plans to keep the existing behavior for sites that mimic the old setup.
refs https://github.com/TryGhost/Team/issues/637
Since we allow setting custom name and description for free price now, this wires up the values for free membership price settings to API
refs https://github.com/TryGhost/Team/issues/643
Previously, we always expected `Monthly` or `Yearly` prices to be available for attribtues/links as those were the only prices allowed in Portal. With custom prices, as prices can have dynamic names, we still support Monthly/Yearly prices for backwards compatibility.
The way Monthly/Yearly prices are determined with custom prices is first trying to find the first price by the name same as `Monthly` / `Yearly`, followed by finding a plan having interval `month`/`year`. This gives us the best possible window to continue supporting Monthly/Yearly till all themes have time to adapt to custom prices
refs https://github.com/TryGhost/Team/issues/643
Previously, Portal only worked with hardcoded `Monthly` and `Yearly` plans as those were the only possible prices available to members. With custom prices and products, Portal is now expanded to work with any number of custom prices as well as allow links/attributes for them to work via IDs.
Also, to continue backwards compatibility with Monthly/Yearly, Portal will support their data attributes/links, finding the first relevant Monthly/Yearly plan by nickname, falling back on interval if needed.
refs https://github.com/TryGhost/Team/issues/644
In Preview mode during launch wizard in Admin, we show owners dummy Monthly/Yearly plan since the prices are not yet created but will be created if everything looks good in the next step. This change handles the dummy Monthly/yearly prices without actually having the values in DB or settings.
refs https://github.com/TryGhost/Team/issues/579
We added a new setting to explicitly set `invite-only` mode which was not handled in the signup button and header icon for signup page
refs https://github.com/TryGhost/Team/issues/579
Admin preview screen now sends `allowSelfSignup` as a query param that allows customising the Portal preview UI based on the changes selected by the Admin. This change handles the new query param in Portal
refs https://github.com/TryGhost/Team/issues/579
A new setting `members_signup_access` can be set to `invite` by the site owner which explicitly makes Portal to behave invite only, this change updates Portal to handle the setting
refs https://github.com/TryGhost/Team/issues/530
This makes sure that sites not using the Portal modal will have their
cancel behaviour updated too.
* Added missing newline
refs https://github.com/TryGhost/Team/issues/530
A continueSubscription action has been added to handle continuing
subscriptions as a different flow since we now have `smart_cancel` for the cancellation. The "continue subscription" button in Portal is updated to use the new action to correctly continue a subscription instead of old action which did both cancel and continue.
refs https://github.com/TryGhost/Team/issues/530
The members-api now accepts the `smart_cancel` option when updating
subscriptions. This will automatically handle cancelling the
subscription if it is in an overdue state.
A continueSubscription action has been added to handle continuing
subscriptions.
refs https://github.com/TryGhost/Team/issues/536
From 4.0, we ensure and require that accent colour is always set. This change removes hardcoded accent color fallbacks to avoid confusion as well as cause accidental fallback that is undesired causing themes to look different
no refs
The portal links were not working in case of a trailing slash at the end, this fix updates the regex to allow and ignore the trailing slashes in portal links as it can be a common mistake to include trailing slashes.
SITE/#/portal/ - Did not work previously, now works
vs
SITE/#/portal - Works
no refs
Does member data refresh when hiding notification to ensure subscription data for member is fetched if Stripe webhooks are delayed on server and shows no subscription in first request.
no refs
- We updated site plans to use `currency_symbol` instead of `currency`, but missed updating it here so the popup showed `undefined` for the new plan on confirmation screen
- applied blur on modal cover background
- adjusted positioning of modal
- refined sign in / sign up link style
- adjusted magic link envelope icon position and size
no refs
`yarn build` used to throw up a lot of warnings because the webpack config was not correctly updated to use performance config for portal's usecase, this change -
- Sets the `mode` to explicit `production` instead of implicit which throws a warning
- Updated performance max* sizes to account for a single portal chunk bundled up as an external script
closes https://github.com/TryGhost/Team/issues/512
Updates naming of root container to `ghost-portal-root` instead of `ghost-membersjs-root` inline with overall naming to portal everywhere.
refs https://github.com/TryGhost/Team/issues/473
refs https://github.com/TryGhost/Ghost/pull/12700/commits/006cf434
Ghost no longer sends back currency symbols from the API, so we calculate the currency
symbol using `Intl.NumberFormat`.
We've also renamed the `currency` property to `currency_symbol` - as it does not store a currency.
Depending on currency and locale, currency symbols can be the currency ISO code (e.g. AED).
In order to style these differently we add a different class to the element.
- This is a temporary solution to being able to pass in the accent color
- Need to review if attributes / links should definitely support all of the current preview query params (probably should)
refs b739f14183
While adding plans params in preview mode, the site plans were incorrectly overridden with default empty value from preview mode so plan values didn't show up on the screen at all. This commit updates correct structure for site plans
no refs
Adds default opacity to trigger button iframe allowing themes like Edition to modify visibility of portal button in preview mode, but doesn't change any existing behavior
no issue
As part of launch wizard in Ghost-Admin, we allow site owner/admins to try different pricing and currency in Admin preview. This change allows Portal popup to consume and update pricing/currency/background on the preview screen using `monthlyPrice`, `yearlyPrice`, `currency` and `disableBackground` params.
- `monthlyPrice`- Allows updating monthly price value via preview
- `yearlyPrice`- Allows updating yearly price value via preview
- `currency`- Allows updating currency value via preview
- `disableBackground`- Allows disabling preview background for Portal UI
no issue
depends on https://github.com/TryGhost/Ghost/pull/12540
FirstPromoter allows sites to build their own referral programs.
Portal reads FirstPromoter settings from site data and uses them to setup FirstPromoter script to track member referrals
no refs
Using `location.hash` to remove hash params on Portal still keeps the `#` on browser. Instead, we take advantage of history API to remove Portal hash params from screen
no issue
Previously, we only returned active subscription for a member in their list of subscriptions, and Portal picked the first subscription in list for a paid member assuming it as active. This doesn't hold true since we now return list of all subscriptions for a member.
This patch updates to use first "active" subscription for a member in the subscription list instead.
no issue
Custom class is appended to trigger buttons based on popup state to allow UI changes based on different popup state. The class name is updated from using members terminology to new Portal terminology now.
closes https://github.com/TryGhost/Ghost/issues/12367
- Support and powered by links were not opened through `href` inside iframe
- Adds support to open these links via `window.open` to bypass iframe restriction
refs https://github.com/TryGhost/Ghost/issues/12403
This gives members the ability to share their cancellation reason with site owners.
The reason is included in the cancellation request and stored both in Ghost & Stripe.
Co-authored-by: Peter Zimon <zimo@ghost.org>
refs https://github.com/TryGhost/Ghost/issues/12365
Stripe back button previously redirected user to site home instead of keeping existing link where the checkout was triggered from. This updates the link to go back to old site URL in case the previous URL was still on the Ghost site.
no refs
- Updates stripe actions via portal to use custom parameter values to show notifications
- Updated parameter don't interfere with existing theme notifications
refs https://github.com/TryGhost/Ghost/issues/12365
- Added direct portal link handling for - `/signup/free` - to open Portal with Free plan only when available
- In case free plan is not available, Portal will show default signup screen
refs https://github.com/TryGhost/Ghost/issues/12365
- Browser back button from Stripe checkout takes users to infinite navigation loop as we were not clearing the direct checkout link
- Clears direct checkout link on load so user can continue navigation as normal
no issue
- Notification was fetching member's first name which caused error in case the member was not logged in
- Adds check for member to exist before fetching first name
There is a bug in these version where Portal does not load correctly after a successful
Stripe Checkout. We are reverting until we can determine the cause of the bug and fix it
* Revert "v0.11.1"
This reverts commit 828c4d59e2.
* Revert "Fixed incorrect link/path handling"
This reverts commit 9d853be979.
* Revert "v0.11.0"
This reverts commit 16c2224b9b.
* Revert "Updated portal direct checkout links to use path"
This reverts commit d26fad1ef2.
* Revert "Added direct links for monthly/yearly checkout"
This reverts commit bbea4f7ec5.
* Revert "Added user select style to plan container"
This reverts commit a665ca5923.
* Revert "Refined copy"
This reverts commit 32d4949e1d.
* Revert "Account home page refinements"
This reverts commit 6587eca37d.
* Revert "Notification refinements"
This reverts commit 23c75e3acc.
* Revert "Added name to welcome notification"
This reverts commit 7220049830.
* Revert "Refined notification"
This reverts commit d1c091584f.
refs https://github.com/TryGhost/Ghost/issues/12365
Last commit added Portal checkout links using query param on signup link - `signup?plan=monthly/yearly`, this updates the checkout links to use path instead of params on links and data attributes instead.
Portal link for monthly plan checkout - `#/portal/signup/monthly`
Portal data attribute for monthly plan checkout - `data-portal=signup/monthly`
Portal link for yearly plan checkout - `#/portal/signup/yearly`
Portal data attribute for monthly plan checkout - `data-portal=signup/yearly`
refs https://github.com/TryGhost/Ghost/issues/12365
Currently, while its possible to open Stripe checkout directly on a monthly/yearly plan, Portal links don't allow similar feature. This change allows opening a site on a specific Portal link that can directly open Stripe checkout for monthly/yearly plan, if the plan is allowed.
- Adds handling for new portal signup link for monthly plan - `/#/portal/signup?plan=monthly`
- Adds handling for new portal signup link for yearly plan - `/#/portal/signup?plan=yearly`
no issue
Ghost sends email on successful signup to a paid plan via Stripe checkout, but couldn't differentiate between a Stripe checkout as new member or as an upgrade previously. This led to an extra second email with magic link on upgrading to paid plan while logged in.
Passing `checkoutType` metadata to Stripe checkout allows webhook to ignore second email in case of an upgrade scenario.
refs https://github.com/TryGhost/Ghost/issues/12253
- Handles custom action param for requests from Portal by listening on `portal-action` instead of `action` and `portal-stripe` instead of `stripe` in query params for magic link and stripe checkout changes
- Allows theme to continue using the old params so in future Portal doesn't interfere with theme notifications
no issue
- If the site owner has no active plan enabled for signup in settings, it implies an invite-only site usecase which needs to be highlighted to he user
- Shows the invite only message along with option to login when SIgnup screen is opened in such scenario
no issue
- Default site fixtures for tests often break them as tests expect all 3 plans to be present at the moment, change here updates the tests to use custom site fixture with all 3 plans to avoid breaking with any changes for dev testing
no issue
- Currently, the newsletter switch works on the value update from the API which can have slight delay causing sluggish feeling on using the switch
- Adds logic to locally update the switch state before resetting to whatever value comes from the update so the behavior feels instant
no issue
- On closing portal popup, the hash link was not getting reset which then prevented the popup to be opened again
- Clears portal hash link on popup close
no issue
- We had previously removed the Back button for account profile/plan pages when opened directly via Portal link
- This updates the behavior to show the back button which takes back to Account Home as the previous behavior seemed incomplete to users
no issue
- Hash handler was not updating Portal state if it pointed to a Portal link, which caused the need for a full refresh to reflect new link triggers
- Updates hash handler to use handle both preview and link states
no issue
- When account plan/profile pages are opened via Portal Link, the back button is non-functional as we don't have a last page to go to, fix hides the back button in such cases
refs #12249
refs ce14d8113a
This was incorrectly assuming the presence of the data-members-name
element in the document. By guarding against it and defaulting to
undefined, we fallback to the existing behaviour when the element is not
present.
no issue
- Added yearly back to fixtures as tests rely on them
- Long term fix is to directly override fixtures with expected value for tests to not rely on value in file
- Updated notification style for a less opinionated design so that it works better with any accent color
- Changed full width notificaiton style to smaller to avoid covering navigation
no issue
Current logic ignored empty accent color value coming from the preview url which did not unset the accent color when removed from preview. The fix allows for empty accent color in preview so that it can be reset to default.
no issue
- We recently updated Ghost to allow theme developers to pass member's name via `data-members-name` attribute
- The script covers the usecase for any themes using the attribute to fill member's name during the signup process
refs https://github.com/TryGhost/Team/issues/393
- Updates behavior of popup notification for account update
- Updates popup notification clear without animation for manual close and retry click
- Adds redirect to home page correctly for popup notification on success
no issue
- Adds success and error notification messages for different actions
- Cleans up notification flows and messages
- Adds new helpers for members and site
- Updates actions for email/name update
no refs.
- added different disabled cookie warning messages depending on the context
- disabled input fields, checkboxes and buttons globally if cookies are disabled
- refined copy and visuals
no issue
- Adds new helpers to create portal links on existing site url paths
- Updates retry links for signin and signup to use new helpers
- Helps preventing any unwanted bugs with Portal links by providing consistent link creation
no refs.
- added CloseButton component to be able to use it in multiple pages
- moved close button inside content container so that it scrolls with the page on smaller screen sizes
no issue
- Updates the new plan's start date based on billing interval change
- If current and new billing interval is same, plan starts at period end, immediately otherwise
no issue
- Refactors the plan upgrade flow for a free member
- Removes confirmation for free member and brings back checkboxes
- Takes straight to stripe checkout on plan confirmation
no issue
- Updates various flows to update/change plan for a member
- Adds a confirmation step for different change plan actions
- Adds new helpers for plans and members
- Updates Account plan page to use more streamlined components
- Fixed lint
no refs.
Prepared the container system to responsive sizes.
- added inner scrollable container for all content
- made footer sticky
- set max height for each screen
no refs.
For when a signle plan is enabled in Portal settings:
- removed selected style from the plan on the signup page
- updated the width of the popup
no refs.
- hides free plan if that's the only enabled plan
- refined copy for sign up button when no plans are available (e.g. Stripe is not set up or free is the only plan)
no issue
- Cleans up the code structure used to render different sections for paid members on account home
- Adds new member helper method to check if the member is complimentary or not
no refs.
- removed the ability to change plan and billing info section from account home for members with complimentary plan
- refined copy for plan section
no issue
- To correctly inject the members.js script to any theme, it needs to know the correct site URL to access Ghost APIs.
- `data-ghost` attribute is needed on the script to define the correct Site url
no issue
- We don't want to keep any old "last page" state for the popup once its closed, which is used to determine which page to to go back to with "Cancel"
- If no "last page" is found, going back closes the popup instead which is expected behavior
no issue
- Previously, a timeout after 5s for previous action was resetting the action state, but didn't take into account any consecutive action and reset state incorrectly
- Timeout is reset on every action so only the last action outside timelimit causes action state to reset