fixes https://github.com/TryGhost/Team/issues/3392
- the "price" here can contain a slash, which is encoded/escaped by default by
i18next
- this disables the escaping to fix the text that is shown to the user
refs: https://github.com/TryGhost/Ghost/issues/16628
This adds a library for interpolating strings with React components, which allows us to pass HTML elements / React components into our i18n templates. We can further templatize those components to have fully translated, nested components.
refs: https://github.com/TryGhost/Ghost/issues/16628
Separate commit for these, this change was a little more complex since the string "Complimentary" was repeated several times, with different additional context.
I decided to keep "Complimentary" by itself as a translatable string, and concatenated a second string for the expiry.
If this would be better as 3 strings, then we could switch to having these:
- "Complimentary"
- "Complimentary ({{label}})"
- "Complimentary - Expires {{expiry date}}"
^ Makes sense only if the use of parentheses & hyphens would be changed in other locales
refs https://github.com/TryGhost/Team/issues/2841
- currently, the link to other plans is always shown regardless of
whether if there's any other paid plan or not
- this adds a check to show the link only when there are other plans
We only display the signup checkbox if both the checkbox is required AND we
have some terms to display alongside it. However we require the checkbox to be
checked, regardless of if it is displayed. This results in the Signup button
not working at all if your settings are in this state.
fixes https://github.com/TryGhost/Team/issues/2980
This change adds an error message below the submit buttons on the signup page (if there are multiple tiers), when one or multiple fields have an error. That way, the error message is visible and not out of view.
---------
Co-authored-by: Sanne de Vries <sannedv@protonmail.com>
Refs https://github.com/TryGhost/Team/issues/2878
- The free-only version of Portal will show the signup terms just above the signup button, whereas the non-free Portal version will show the signup terms above the plan selection
- The signup terms settings have been moved to the "Signup options" section
Because we load Portal in an iFrame the anchor tags do nto work
correctly. We've intercepted all clicks on them and manually opened
the URL in a new window instead.
Refs https://github.com/TryGhost/Team/issues/2878
- The default checkbox component is limited in terms of styling. This commit replaces the default checkbox with a custom checkbox component in Portal, which turns red when a signup attempt is made without checking the box.
refs https://github.com/TryGhost/Team/issues/2878
We've updated the signup page to display the signup terms and checkbox when
they've been set, as well as denying the signup from occuring if the checkbox
is required and not checked.
We've had to add a random value for the `key` property of the checkbox because
otherwise it isn't rendered correctly, unsure why that is at the moment.
Without the random key, the checkbox is never visually checked, even though the
internal state of both the component and the virtual DOM do say it should be
checked, it seems some kind of equality checker is broken.
We had two implementations for the same signup logic, which meant that we would
have to update two places when modifying the logic. This consolidates the logic
into a single method so that when we add the terms and checkbox feature we can
make the checks in a single place.
closes https://github.com/TryGhost/Team/issues/2888
Due to lack of member's created at date, we previously called the FirstPromoter tracking function for all logged-in members irrespective of when they signed up. This caused issues in few cases where members who were already signed up were getting falsely attributed as referrals if they had clicked on a referral link previously.
This change uses the member's created at date which is now available on frontend for logged-in members, and ignored the FirstPromoter tracking script if member had signed up more than 24 hours ago.
refs https://github.com/TryGhost/Team/issues/2674
When going to /#/portal/account when not signed in, you are redirected
to the login page. But once signed in, you aren't redirected back to the
account page. This fixes this issue by adding an extra and optional
redirect parameter when requesting a magic token via email.
This new parameter allows to override the default behaviour of using the
Referer HTTP header, which doesn't include the hash/fragment part of the
URL.
The referrer is already restricted to only allow redirects to the site,
not external URLs.
refs https://github.com/TryGhost/Ghost/issues/15502
- this commit migrates Portal from CRA to Vite, as it brings the
package more inline with the direction we're going in terms of tooling
for builds
- the bulk of the changes here are just config related to get things
working with Vite, and then cleaning up all the CRA boilerplate
- `compilerOptions.baseUrl` is nice but it means we end up with two
different styles of import paths for project files - relative and from
`src/`
- to fix this, we're going to standardize on relative imports and remove
the ability to import relative to the top-level project folder
- this removes the jsconfig line and fixes all existing imports
- we use ES6 `import` for all other imports so this standardizes the
React package to also use import vs require
- merged with other imports from the react package if present
refs https://github.com/TryGhost/Ghost/issues/15502
- in order to use the translations, strings must be wrapped in the `t`
function, which is passed through AppContext
- whilst I haven't instrumented all public strings, the vast majority
are done here and the strings have been brought into the JSON locale files using `yarn translate:generate`
refs https://github.com/TryGhost/Ghost/issues/15502
- this adds the package to Portal and integrates it into the state we
pass around
- note: I've currently left the detection of the language
(`site.locale`) commented for now until we flesh more of the
implementation out
Portal currently has a Globals.js file that spells out all the colors in use in Portal, which should make it easy to customize the portal colors to match the chosen theme. There are a bunch of hardcoded values and this PR deals with those. The final outcome of these changes is absolutely invisible.
Co-authored-by: Peter Zimon <zimo@ghost.org>
closes https://github.com/TryGhost/Team/issues/2276
Portal had died with an unintelligible error about portal plans/includes being undefined when there was missing site data in some extreme edge cases. This change catches any errors in site transformation and logs it to console instead of crashing portal unexpectedly
no refs.
Post feedback popups were not optimised for mobile usage at all. All the content was on top of the window which is really hard to reach using a single hand/thumb and it just looked like a scaled down version of a desktop modal.