Merge branch 'main' into dev

This commit is contained in:
Shekar Siri 2021-05-20 11:24:02 +05:30 committed by GitHub
commit 77fc8e5f01
16 changed files with 41 additions and 29 deletions

View file

@ -26,7 +26,7 @@
</p>
<p align="center">
<a href="https://openreplay.com">
<a href="https://github.com/openreplay/openreplay">
<img src="static/replayer.png">
</a>
</p>
@ -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

View file

@ -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

View file

@ -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
TODO = things to implement

View file

@ -73,8 +73,8 @@ class Announcements extends React.Component {
content={
<div className="mx-4">
<NoContent
title="No Alerts found!"
subtext="There are no alerts created."
title="No Announcements found!"
subtext="There are no announcements to show."
icon="exclamation-circle"
show={ !loading && announcements.size === 0 }
size="small"

View file

@ -1,9 +1,15 @@
import React from 'react'
import { connect } from 'react-redux'
export default function Licenses() {
function Licenses({ account }) {
return (
<div>
License Number
<div>{account.license}</div>
<div className="font-medium text-sm">Expires At: {account.expirationDate && account.expirationDate.toFormat('LLL dd, yyyy')}</div>
</div>
)
}
export default connect(state => ({
account: state.getIn([ 'user', 'account' ]),
}))(Licenses)

View file

@ -53,8 +53,7 @@ export default class ProfileSettings extends React.PureComponent {
<div className="flex items-center">
<div className={ styles.left }>
<h4 className="text-lg mb-4">{ 'Licenses' }</h4>
{/* <div className={ styles.info }>{ 'Your API key gives you access to an extra set of services.' }</div> */}
<h4 className="text-lg mb-4">{ 'License' }</h4>
</div>
<div><Licenses /></div>
</div>

View file

@ -162,7 +162,7 @@ class Sites extends React.PureComponent {
<TextLink
icon="book"
className="ml-auto"
href="https://docs.openreplay.com/getting-started/quick-start"
href="https://docs.openreplay.com/installation"
label="Documentation"
/>
</div>

View file

@ -9,7 +9,7 @@ const FeatureItem = ({ label, completed = false, subText, onClick }) => {
className={ cn(stl.wrapper, stl.activeLink, { [stl.completed]: completed }) }
onClick={onClick && onClick}
>
<div className={ cn("h-6 w-6 flex-shrink-0 rounded-full flex items-center justify-center", { 'bg-white' : !completed, 'bg-teal' : completed })}>
<div className={ cn("h-6 w-6 flex-shrink-0 rounded-full flex items-center justify-center", { 'bg-gray-lightest border' : !completed, 'bg-teal' : completed })}>
{ completed && <Icon name="check" size="16" color="white" /> }
</div>
<div className="ml-3">{label}</div>

View file

@ -28,11 +28,10 @@ const codeSnippet = `<!-- OpenReplay Tracking Code for HOST -->
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);
<script>`;
r.isActive=r.active=function(){return false};
r.getSessionToken=r.sessionID=function(){};
})(0,PROJECT_HASH,"//${window.location.hostname}/static/openreplay.js",1,XXX);
</script>`;
const ProjectCodeSnippet = props => {

View file

@ -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 && (

View file

@ -27,11 +27,10 @@ const codeSnippet = `<!-- OpenReplay Tracking Code for HOST -->
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);
<script>`;
r.isActive=r.active=function(){return false};
r.getSessionToken=r.sessionID=function(){};
})(0,PROJECT_HASH,"//${window.location.hostname}/static/openreplay.js",1,XXX);
</script>`;
const ProjectCodeSnippet = props => {

View file

@ -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),
})
});

View file

@ -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 }
]
},
{

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 501 KiB

View file

@ -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();