openreplay/frontend/app/components/shared/TrackingCodeModal/ProjectCodeSnippet/ProjectCodeSnippet.js
Delirium a71381da40
getting rid of redux for good (#2556)
* start moving ui to redux tlk

* remove unused reducer

* changes for gdpr and site types

* ui: migrating duck/roles to mobx

* ui: drop unreferenced types

* ui: drop unreferenced types

* ui: move player slice reducer to mobx family

* ui: move assignments to issueReportingStore.ts

* remove issues store

* some fixes after issues store

* remove errors reducer, drop old components

* finish removing errors reducer

* start moving integrations state to mobx

* change(ui): funnel duck cleanup

* change(ui): custom fields

* change(ui): customMetrics cleanup

* change(ui): customMetrics cleanup

* change(ui): duck/filters minor cleanup

* change(ui): duck/filters cleanup

* change(ui): duck/customMetrics cleanup and upgrades

* fix integrations service, fix babel config to >.25 + not ie

* refactoring integrations reducers etc WIP

* finish removing integrations state

* some fixes for integrated check

* start of projects refactoring

* move api and "few" files to new project store

* new batch for site -> projects

* fix setid context

* move all critical components, drop site duck

* remove all duck/site refs, remove old components

* fixup for SessionTags.tsx, remove duck/sources (?)

* move session store

* init sessionstore outside of context

* fix userfilter

* replace simple actions for session store

* sessions sotre

* Rtm temp (#2597)

* change(ui): duck/search wip

* change(ui): duck/search wip

* change(ui): duck/search wip

* change(ui): duck/searchLive wip

* change(ui): duck/searchLive wip

* change(ui): duck/searchLive wip

* change(ui): duck/searchLive wip

* change(ui): search states

* change(ui): search states

* change(ui): search states

* change(ui): fix savedSearch store

* change(ui): fix savedSearch store

* some fixes for session connector

* change(ui): fix savedSearch store

* change(ui): fix searchLive

* change(ui): fix searchLive

* fixes for session replay

* change(ui): bookmark fetch

* last components for sessions

* add fetchautoplaylist

* finish session reducer, remove deleted reducers

* change(ui): fix the search fetch

* change(ui): fix the search fetch

* fix integrations call ctx

* ensure ctx for sessionstore

* fix(ui): checking for latest sessions path

* start removing user reducer

* removing user reducer pt2...

* finish user store

* remove rand log

* fix crashes

* tinkering workflow file for tracker test

* making sure prefetched sessions work properly

* fix conflict

* fix router redirects during loading

---------

Co-authored-by: Shekar Siri <sshekarsiri@gmail.com>
2024-10-03 11:38:36 +02:00

101 lines
3.4 KiB
JavaScript

import React, { useState } from 'react'
import { observer } from 'mobx-react-lite'
import { useStore } from 'App/mstore'
import { Checkbox } from 'UI';
import cn from 'classnames'
import styles from './projectCodeSnippet.module.css'
import Select from 'Shared/Select'
import CodeSnippet from '../../CodeSnippet';
const inputModeOptions = [
{ label: 'Record all inputs', value: 'plain' },
{ label: 'Obscure all inputs', value: 'hidden' },
{ label: 'Ignore all inputs', value: 'obscured' },
];
const inputModeOptionsMap = {}
inputModeOptions.forEach((o, i) => inputModeOptionsMap[o.value] = i)
const ProjectCodeSnippet = props => {
const { projectsStore } = useStore();
const site = props.site;
const gdpr = projectsStore.instance.gdpr;
const saveGdpr = projectsStore.saveGDPR;
const editGdpr = projectsStore.editGDPR;
const [changed, setChanged] = useState(false)
const saveGDPR = () => {
setChanged(true)
saveGdpr(site.id);
}
const onChangeSelect = ({ name, value }) => {
editGdpr({ [ name ]: value });
saveGDPR();
};
const onChangeOption = ({ target: { name, checked }}) => {
editGdpr({ [ name ]: checked });
saveGDPR()
}
return (
<div>
<div className="mb-4">
<div className="font-semibold mb-2">1. Choose data recording options</div>
<div className="flex items-center justify-between">
<Select
name="defaultInputMode"
options={ inputModeOptions }
onChange={ ({ value }) => onChangeSelect({ name: 'defaultInputMode', value: value.value }) }
placeholder="Default Input Mode"
value={ inputModeOptions.find(o => o.value === gdpr.defaultInputMode) }
/>
<Checkbox
name="maskNumbers"
type="checkbox"
checked={ gdpr.maskNumbers }
onChange={ onChangeOption }
className="mr-2"
label="Do not record any numeric text"
/>
<Checkbox
name="maskEmails"
type="checkbox"
checked={ gdpr.maskEmails }
onChange={ onChangeOption }
className="mr-2"
label="Do not record email addresses"
/>
</div>
</div>
<div className={ cn(styles.info,'rounded bg-gray mt-2 mb-4', { 'hidden': !changed })}>
Below code snippet changes depending on the data recording options chosen.
</div>
<div className={ styles.instructions }>
<div>
<span className="font-semibold">2. Paste this snippet </span><span>{ 'before the ' } </span>
<span className={ styles.highLight }> { '</head>' } </span>
<span>{ ' tag of your page.' }</span>
</div>
<div className={ styles.siteId }>{ 'Project Key: ' } <span>{ site.projectKey }</span></div>
</div>
<div className={ styles.snippetsWrapper }>
<CodeSnippet
host={ site && site.host }
projectKey={ site && site.projectKey }
ingestPoint={`"https://${window.location.hostname}/ingest"`}
defaultInputMode={ gdpr.defaultInputMode }
obscureTextNumbers={ gdpr.maskNumbers }
obscureTextEmails={ gdpr.maskEmails }
/>
</div>
<div className="my-4">You can also setup OpenReplay using <a className="link" href="https://docs.openreplay.com/integrations/google-tag-manager" target="_blank">Google Tag Manager (GTM)</a>. </div>
</div>
)
}
export default observer(ProjectCodeSnippet)