Skip to content
Snippets Groups Projects
index.tsx 2.27 KiB
Newer Older
  • Learn to ignore specific revisions
  • Hugo NOUTS's avatar
    Hugo NOUTS committed
    /* global cozy */
    import '../../styles/index.scss'
    
    import React from 'react'
    import CozyClient, { CozyProvider } from 'cozy-client'
    import { render } from 'react-dom'
    import { I18n } from 'cozy-ui/react/I18n'
    import schema from 'doctypes'
    
    const manifest = require('../../../manifest.webapp')
    
    let appLocale
    const renderApp = function(client) {
      const App = require('components/App').default
      render(
        <I18n
          lang={appLocale}
          dictRequire={appLocale => require(`locales/${appLocale}`)}
        >
          <CozyProvider client={client}>
            <App />
          </CozyProvider>
        </I18n>,
        document.querySelector('[role=application]')
      )
    }
    
    // return a defaultData if the template hasn't been replaced by cozy-stack
    const getDataOrDefault = function(toTest, defaultData) {
      const templateRegex = /^\{\{\.[a-zA-Z]*\}\}$/ // {{.Example}}
      return templateRegex.test(toTest) ? defaultData : toTest
    }
    
    // initial rendering of the application
    document.addEventListener('DOMContentLoaded', () => {
      const root = document.querySelector('[role=application]')
      const data = root.dataset
    
      const appIcon = getDataOrDefault(
        data.cozyIconPath,
        require('../vendor/assets/icon.svg')
      )
    
      const appNamePrefix = getDataOrDefault(
        data.cozyAppNamePrefix || manifest.name_prefix,
        ''
      )
      const appName = getDataOrDefault(data.cozyAppName, manifest.name)
      const appSlug = getDataOrDefault(data.cozyAppSlug, manifest.slug)
      const appVersion = getDataOrDefault(data.cozyAppVersion, manifest.version)
    
      appLocale = getDataOrDefault(data.cozyLocale, 'en')
    
      const protocol = window.location ? window.location.protocol : 'https:'
    
      // initialize the client to interact with the cozy stack
      const client = new CozyClient({
        uri: `${protocol}//${data.cozyDomain}`,
        token: data.cozyToken,
        schema,
        appMetadata: {
          slug: appSlug,
          version: appVersion,
        },
      })
    
      // initialize the bar, common of all applications, it allows
      // platform features like apps navigation without doing anything
      cozy.bar.init({
        appName: appName,
        appNamePrefix: appNamePrefix,
        iconPath: appIcon,
        lang: appLocale,
        replaceTitleOnMobile: true,
        cozyClient: client,
      })
    
      const { setTheme } = cozy.bar
      setTheme('primary', { primaryColor: 'transparent' })
    
      renderApp(client)
    })