UNPKG

klaro

Version:

A simple but powerful consent manager.

223 lines (210 loc) 7.8 kB
import React from 'react'; import { Close } from '../icons'; import ObjectSelector from './object-selector'; import { Services } from './services'; import { Globals } from './globals'; import { Demo } from './demo'; import { JSONConfig } from './json-config'; import { Configs } from './configs'; import { Styling } from './styling'; import { Translations } from './translations'; import { Tabs, Tab } from './tabs'; export class IDEModal extends React.Component { constructor(props) { super(props); this.state = { hidden: false, }; } render() { const { config, t, lang } = this.props; const { stylePrefix } = config; const { hidden } = this.state; const hide = (e) => { e.preventDefault(); this.setState({ hidden: true }); }; const show = (e) => { e.preventDefault(); this.setState({ hidden: false }); }; if (hidden) return ( <div> <a href="#" onClick={show}> open me </a> </div> ); return ( <div className={stylePrefix || 'klaro'}> <div id="cookieScreen" className="cookie-modal"> <div className="cm-bg" onClick={hide} /> <div className="cm-modal cm-ide"> <div className="cm-header"> <button title={t(['close'])} className="hide" type="button" onClick={hide} > <Close t={t} /> </button> <h1 className="title"> {t(['consentModal', 'title'])} </h1> Test </div> <div className="cm-body"> <IDE t={t} /> </div> <div className="cm-footer"> <div className="cm-footer-buttons">Buttons</div> <p className="cm-powered-by"> <a target="_blank" href={ config.poweredBy || 'https://kiprotect.com/klaro' } rel="noopener" > {t(['poweredBy'])} </a> </p> </div> </div> </div> </div> ); } } const tabComponents = { globals: Globals, services: Services, translations: Translations, testing: Demo, json: JSONConfig, styling: Styling, }; export default class IDE extends React.Component { constructor(props) { super(props); } render(){ const { state, setState, className, onConfigAction, configs, t, ...rest } = this.props const { activeConfig } = state; let component const unsetConfig = () => { setState({activeConfig: undefined}) } const setConfigState = (configState) => { const newState = Object.assign({}, state) newState.configState = configState setState(newState) } if (activeConfig !== undefined){ const config = configs.find(config => config.name === activeConfig) component = <ConfigIDE state={state.configState} setState={setConfigState} t={t} unsetConfig={unsetConfig} config={config} {...rest} /> } else { component = <Configs onConfigAction={onConfigAction} onClick={(config) => setState({activeConfig: config.name})}configs={configs} t={t} /> } return <div className={className || 'klaro-ide'}> {component} </div> } } export class ConfigIDE extends React.Component { render() { const { t, disabled, controls, setState, config, services, unsetConfig, saveConfig, resetConfig, updateConfig, deleteConfig, } = this.props; const state = this.props.state || {tab: 'services'}; const { tab } = state; const Component = tabComponents[tab]; const componentState = state[tab]; const changeTab = (tab) => setState({ tab: tab }); const setComponentState = (componentState) => { const newState = Object.assign({}, state) newState[tab] = componentState setState(newState) } const tabs = [ 'services', 'globals', 'translations', 'json', 'styling', 'testing', ].map((tb) => ( <Tab key={tb} onClick={() => changeTab(tb)} active={tab === tb}> {t(['ide', tb])} </Tab> )); return ( <React.Fragment> <div className="cm-config-controls"> <h2><a onClick={() => unsetConfig()}>{t(['configs','title'])} &rsaquo;</a> {config.name === 'default' ? t(['configs', 'default', 'title']) : config.name}</h2> <fieldset> <button disabled={disabled || !config.modified} className="cm-control-button cm-secondary" onClick={(e) => e.preventDefault() || resetConfig(config.name) } > {t(['config', 'reset'])} </button> <button disabled={disabled || !config.modified} className="cm-control-button" onClick={(e) => e.preventDefault() || saveConfig(config.name) } > {t(['config', 'save'])} </button> {false && ( <button disabled={disabled} className="cm-control-button" onClick={(e) => e.preventDefault() || deleteConfig(config.name) } > {t(['config', 'delete'])} </button> )} </fieldset> </div> <Tabs key="tabs">{tabs}</Tabs> <Component state={componentState} setState={setComponentState} disabled={disabled} services={services} config={config} updateConfig={(...args) => updateConfig(config.name, ...args) } controls={controls} t={t} /> </React.Fragment> ); } } export class GlobalSettings extends React.Component {}