diff --git a/README.md b/README.md index 6beb2c0a9..60fe87c7a 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@

- +

@@ -83,7 +83,7 @@ Also, feel free to join our [Slack](https://slack.openreplay.com) to ask questio ## Roadmap -Check out our roadmap and keep an eye on what's coming next. You're free to submit new ideas and vote on features. +Check out our [roadmap](https://www.notion.so/openreplay/Roadmap-889d2c3d968b4786ab9b281ab2394a94) and keep an eye on what's coming next. You're free to [submit](https://github.com/openreplay/openreplay/issues/new) new ideas and vote on features. ## License diff --git a/ee/LICENSE.md b/ee/LICENSE.md index 38053f2f5..d0ab5e345 100644 --- a/ee/LICENSE.md +++ b/ee/LICENSE.md @@ -9,7 +9,7 @@ and are in compliance with, the OpenReplay Subscription Terms of Service, availa at https://openreplay.com/terms.html (the “Enterprise Edition”), or other agreement governing the use of the Software, as agreed by you and OpenReplay, and otherwise have a valid OpenReplay Enterprise license for the -correct volume and number of seats. Subject to the foregoing sentence, you are free to +correct usage. Subject to the foregoing sentence, you are free to modify this Software and publish patches to the Software. You agree that OpenReplay and/or its licensors (as applicable) retain all right, title and interest in and to all such modifications and/or patches, and all such modifications and/or diff --git a/frontend/README.md b/frontend/README.md index 1837339a8..c7fcc1885 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -1,10 +1,9 @@ # openreplay-ui -Openreplay prototype UI +OpenReplay prototype UI On new icon addition: `npm run generate:icons` - ## Documentation * [Redux](https://redux.js.org/) @@ -12,7 +11,6 @@ On new icon addition: * [Ducks](https://github.com/erikras/ducks-modular-redux) * [CSS Modules](https://github.com/css-modules/css-modules) - Labels in comments: TEMP = temporary code -TODO = things to implement \ No newline at end of file +TODO = things to implement diff --git a/frontend/app/components/Announcements/Announcements.js b/frontend/app/components/Announcements/Announcements.js index 6da12b118..43d213168 100644 --- a/frontend/app/components/Announcements/Announcements.js +++ b/frontend/app/components/Announcements/Announcements.js @@ -73,8 +73,8 @@ class Announcements extends React.Component { content={
- License Number +
{account.license}
+
Expires At: {account.expirationDate && account.expirationDate.toFormat('LLL dd, yyyy')}
) } + +export default connect(state => ({ + account: state.getIn([ 'user', 'account' ]), +}))(Licenses) diff --git a/frontend/app/components/Client/ProfileSettings/ProfileSettings.js b/frontend/app/components/Client/ProfileSettings/ProfileSettings.js index ac04d53fe..1e6a31c59 100644 --- a/frontend/app/components/Client/ProfileSettings/ProfileSettings.js +++ b/frontend/app/components/Client/ProfileSettings/ProfileSettings.js @@ -53,8 +53,7 @@ export default class ProfileSettings extends React.PureComponent {
-

{ 'Licenses' }

- {/*
{ 'Your API key gives you access to an extra set of services.' }
*/} +

{ 'License' }

diff --git a/frontend/app/components/Client/Sites/Sites.js b/frontend/app/components/Client/Sites/Sites.js index ac02268ab..087cca66f 100644 --- a/frontend/app/components/Client/Sites/Sites.js +++ b/frontend/app/components/Client/Sites/Sites.js @@ -162,7 +162,7 @@ class Sites extends React.PureComponent { diff --git a/frontend/app/components/Header/OnboardingExplore/FeatureItem.js b/frontend/app/components/Header/OnboardingExplore/FeatureItem.js index d89e2b7e0..cbb0c3472 100644 --- a/frontend/app/components/Header/OnboardingExplore/FeatureItem.js +++ b/frontend/app/components/Header/OnboardingExplore/FeatureItem.js @@ -9,7 +9,7 @@ const FeatureItem = ({ label, completed = false, subText, onClick }) => { className={ cn(stl.wrapper, stl.activeLink, { [stl.completed]: completed }) } onClick={onClick && onClick} > -
+
{ completed && }
{label}
diff --git a/frontend/app/components/Onboarding/components/OnboardingTabs/ProjectCodeSnippet/ProjectCodeSnippet.js b/frontend/app/components/Onboarding/components/OnboardingTabs/ProjectCodeSnippet/ProjectCodeSnippet.js index 65c1527d6..a093c4f94 100644 --- a/frontend/app/components/Onboarding/components/OnboardingTabs/ProjectCodeSnippet/ProjectCodeSnippet.js +++ b/frontend/app/components/Onboarding/components/OnboardingTabs/ProjectCodeSnippet/ProjectCodeSnippet.js @@ -28,11 +28,10 @@ const codeSnippet = ` r.setMetadata=function(k,v){r.push([4,k,v])}; r.event=function(k,p,i){r.push([5,k,p,i])}; r.issue=function(k,p){r.push([6,k,p])}; - r.isActive=function(){return false}; - r.getSessionToken=function(){}; - r.i="https://${window.location.hostname}/ingest"; -})(0, "PROJECT_KEY", "//static.openreplay.com/${window.ENV.TRACKER_VERSION}/openreplay.js",1,XXX); -`; const ProjectCodeSnippet = props => { diff --git a/frontend/app/components/shared/NoSessionsMessage/NoSessionsMessage.js b/frontend/app/components/shared/NoSessionsMessage/NoSessionsMessage.js index 7639d9c4b..a3011db44 100644 --- a/frontend/app/components/shared/NoSessionsMessage/NoSessionsMessage.js +++ b/frontend/app/components/shared/NoSessionsMessage/NoSessionsMessage.js @@ -7,10 +7,9 @@ import * as routes from '../../../routes'; const withSiteId = routes.withSiteId; const NoSessionsMessage= (props) => { - const { site, sites, match: { params: { siteId } } } = props; + const { sites, match: { params: { siteId } } } = props; const activeSite = sites.find(s => s.id == siteId); const showNoSessions = !!activeSite && !activeSite.recorded; - console.log('site', activeSite); return ( <> {showNoSessions && ( diff --git a/frontend/app/components/shared/TrackingCodeModal/ProjectCodeSnippet/ProjectCodeSnippet.js b/frontend/app/components/shared/TrackingCodeModal/ProjectCodeSnippet/ProjectCodeSnippet.js index bac018a87..bacb71bfe 100644 --- a/frontend/app/components/shared/TrackingCodeModal/ProjectCodeSnippet/ProjectCodeSnippet.js +++ b/frontend/app/components/shared/TrackingCodeModal/ProjectCodeSnippet/ProjectCodeSnippet.js @@ -27,11 +27,10 @@ const codeSnippet = ` r.setMetadata=function(k,v){r.push([4,k,v])}; r.event=function(k,p,i){r.push([5,k,p,i])}; r.issue=function(k,p){r.push([6,k,p])}; - r.isActive=function(){return false}; - r.getSessionToken=function(){}; - r.i="https://${window.location.hostname}/ingest"; -})(0, "PROJECT_KEY", "//static.openreplay.com/${window.ENV.TRACKER_VERSION}/openreplay.js",1,XXX); -`; const ProjectCodeSnippet = props => { diff --git a/frontend/app/types/account/account.js b/frontend/app/types/account/account.js index 5314d24b7..fa672dfcc 100644 --- a/frontend/app/types/account/account.js +++ b/frontend/app/types/account/account.js @@ -1,6 +1,7 @@ import Member from 'Types/member'; import Appearance from './appearance'; import Limit from './limit'; +import { DateTime } from 'luxon'; export default Member.extend({ changePassword: undefined, @@ -10,9 +11,13 @@ export default Member.extend({ email: '', verifiedEmail: undefined, smtp: false, + license: '', + expirationDate: undefined, }, { - fromJS: account => ({ + fromJS: ({ current = {}, ...account})=> ({ ...account, + license: current.license, + expirationDate: current.expirationDate && DateTime.fromMillis(current.expirationDate * 1000 || 0), appearance: Appearance(account.appearance), }) }); \ No newline at end of file diff --git a/frontend/app/types/filter/filter.js b/frontend/app/types/filter/filter.js index 8ff34b584..feaa44a20 100644 --- a/frontend/app/types/filter/filter.js +++ b/frontend/app/types/filter/filter.js @@ -75,7 +75,7 @@ export const defaultFilters = [ { label: 'Click', key: KEYS.CLICK, type: KEYS.CLICK, filterKey: KEYS.CLICK, icon: 'filters/click', isFilter: false }, { label: 'Input', key: KEYS.INPUT, type: KEYS.INPUT, filterKey: KEYS.INPUT, icon: 'event/input', isFilter: false }, { label: 'Page', key: KEYS.LOCATION, type: KEYS.LOCATION, filterKey: KEYS.LOCATION, icon: 'event/link', isFilter: false }, - { label: 'View', key: KEYS.VIEW, type: KEYS.VIEW, filterKey: KEYS.VIEW, icon: 'event/view', isFilter: false } + // { label: 'View', key: KEYS.VIEW, type: KEYS.VIEW, filterKey: KEYS.VIEW, icon: 'event/view', isFilter: false } ] }, { diff --git a/static/deploy-azure.png b/static/deploy-azure.png index b18dcbd7a..a0e81b99d 100644 Binary files a/static/deploy-azure.png and b/static/deploy-azure.png differ diff --git a/static/replayer.png b/static/replayer.png index f32a8961e..d7d3478c2 100644 Binary files a/static/replayer.png and b/static/replayer.png differ diff --git a/tests/e2e/app.test.js b/tests/e2e/app.test.js index 65af074f8..0f1a7eba8 100644 --- a/tests/e2e/app.test.js +++ b/tests/e2e/app.test.js @@ -25,6 +25,13 @@ beforeAll(async () => { await page.setJavaScriptEnabled(true); await page.setDefaultNavigationTimeout(10000); await page.setRequestInterception(true); + + await page.evaluate(async () => { + const response = await fetch(appUrlBase + '/API_TESTING/update'); + const text = await response.text(); + return text; + }); + page.on('request', (req) => { if (['image', 'font'].indexOf(req.resourceType()) !== -1) { req.abort();