{"version":3,"sources":["webpack:///../node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./src/components/pages/contribution/textadmin/textadmin.tsx"],"names":["map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","moment","require","data","initialState","filterText","addSentenceText","position","count","TextAdminPage","React","constructor","props","super","ref","state","lastfilter","getAdminSentences","filter","__awaiter","api","this","newSentences","fetchAdminSentences","table","setData","error","createAdminSentence","text","alert","dummySentence","newSentence","console","info","unshift","updateCount","replaceData","clearInputField","updateAdminSentence","sentence","success","result","deleteAdminSentence","index","findIndex","element","splice","editCheck","cell","getRow","getData","is_used","cellTextEdited","event","confirm","updateSentenceAndTable","restoreOldValue","cellIsUsedEdited","reset","setState","columns","title","field","formatter","responsive","minWidth","editor","editable","cellEdited","formatterParams","invalidPlaceholder","width","align","headerSort","cellClick","window","handleAddSentenceChange","bind","handleAddSentenceSubmit","handleFilterChange","handleFilterSubmit","nextData","prevData","componentDidMount","Promise","all","fetchAdminSentencesCount","target","value","preventDefault","document","getElementsByName","countLabel","getElementById","textContent","String","updateResult","render","getString","user","className","LocaleLink","to","account","URLS","DASHBOARD","ROOT","ArrowLeft","Localized","LocaleNavLink","getTrackClass","SPEAK","LISTEN","TEXTADMIN","onSubmit","type","onChange","onClick","ReactTabulator","options","movableRows","layout","name","size","withRouter","localeConnector","withLocalization","connect","sentences","isLoading","Sentences","selectors","localeSentences","locale"],"mappings":"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","file":"13.js?id=2f2758adb45bba691838","sourcesContent":["var map = {\n\t\"./af\": 203,\n\t\"./af.js\": 203,\n\t\"./ar\": 204,\n\t\"./ar-dz\": 205,\n\t\"./ar-dz.js\": 205,\n\t\"./ar-kw\": 206,\n\t\"./ar-kw.js\": 206,\n\t\"./ar-ly\": 207,\n\t\"./ar-ly.js\": 207,\n\t\"./ar-ma\": 208,\n\t\"./ar-ma.js\": 208,\n\t\"./ar-sa\": 209,\n\t\"./ar-sa.js\": 209,\n\t\"./ar-tn\": 210,\n\t\"./ar-tn.js\": 210,\n\t\"./ar.js\": 204,\n\t\"./az\": 211,\n\t\"./az.js\": 211,\n\t\"./be\": 212,\n\t\"./be.js\": 212,\n\t\"./bg\": 213,\n\t\"./bg.js\": 213,\n\t\"./bm\": 214,\n\t\"./bm.js\": 214,\n\t\"./bn\": 215,\n\t\"./bn.js\": 215,\n\t\"./bo\": 216,\n\t\"./bo.js\": 216,\n\t\"./br\": 217,\n\t\"./br.js\": 217,\n\t\"./bs\": 218,\n\t\"./bs.js\": 218,\n\t\"./ca\": 219,\n\t\"./ca.js\": 219,\n\t\"./cs\": 220,\n\t\"./cs.js\": 220,\n\t\"./cv\": 221,\n\t\"./cv.js\": 221,\n\t\"./cy\": 222,\n\t\"./cy.js\": 222,\n\t\"./da\": 223,\n\t\"./da.js\": 223,\n\t\"./de\": 224,\n\t\"./de-at\": 225,\n\t\"./de-at.js\": 225,\n\t\"./de-ch\": 226,\n\t\"./de-ch.js\": 226,\n\t\"./de.js\": 224,\n\t\"./dv\": 227,\n\t\"./dv.js\": 227,\n\t\"./el\": 228,\n\t\"./el.js\": 228,\n\t\"./en-SG\": 229,\n\t\"./en-SG.js\": 229,\n\t\"./en-au\": 230,\n\t\"./en-au.js\": 230,\n\t\"./en-ca\": 231,\n\t\"./en-ca.js\": 231,\n\t\"./en-gb\": 232,\n\t\"./en-gb.js\": 232,\n\t\"./en-ie\": 233,\n\t\"./en-ie.js\": 233,\n\t\"./en-il\": 234,\n\t\"./en-il.js\": 234,\n\t\"./en-nz\": 235,\n\t\"./en-nz.js\": 235,\n\t\"./eo\": 236,\n\t\"./eo.js\": 236,\n\t\"./es\": 237,\n\t\"./es-do\": 238,\n\t\"./es-do.js\": 238,\n\t\"./es-us\": 239,\n\t\"./es-us.js\": 239,\n\t\"./es.js\": 237,\n\t\"./et\": 240,\n\t\"./et.js\": 240,\n\t\"./eu\": 241,\n\t\"./eu.js\": 241,\n\t\"./fa\": 242,\n\t\"./fa.js\": 242,\n\t\"./fi\": 243,\n\t\"./fi.js\": 243,\n\t\"./fo\": 244,\n\t\"./fo.js\": 244,\n\t\"./fr\": 245,\n\t\"./fr-ca\": 246,\n\t\"./fr-ca.js\": 246,\n\t\"./fr-ch\": 247,\n\t\"./fr-ch.js\": 247,\n\t\"./fr.js\": 245,\n\t\"./fy\": 248,\n\t\"./fy.js\": 248,\n\t\"./ga\": 249,\n\t\"./ga.js\": 249,\n\t\"./gd\": 250,\n\t\"./gd.js\": 250,\n\t\"./gl\": 251,\n\t\"./gl.js\": 251,\n\t\"./gom-latn\": 252,\n\t\"./gom-latn.js\": 252,\n\t\"./gu\": 253,\n\t\"./gu.js\": 253,\n\t\"./he\": 254,\n\t\"./he.js\": 254,\n\t\"./hi\": 255,\n\t\"./hi.js\": 255,\n\t\"./hr\": 256,\n\t\"./hr.js\": 256,\n\t\"./hu\": 257,\n\t\"./hu.js\": 257,\n\t\"./hy-am\": 258,\n\t\"./hy-am.js\": 258,\n\t\"./id\": 259,\n\t\"./id.js\": 259,\n\t\"./is\": 260,\n\t\"./is.js\": 260,\n\t\"./it\": 261,\n\t\"./it-ch\": 262,\n\t\"./it-ch.js\": 262,\n\t\"./it.js\": 261,\n\t\"./ja\": 263,\n\t\"./ja.js\": 263,\n\t\"./jv\": 264,\n\t\"./jv.js\": 264,\n\t\"./ka\": 265,\n\t\"./ka.js\": 265,\n\t\"./kk\": 266,\n\t\"./kk.js\": 266,\n\t\"./km\": 267,\n\t\"./km.js\": 267,\n\t\"./kn\": 268,\n\t\"./kn.js\": 268,\n\t\"./ko\": 269,\n\t\"./ko.js\": 269,\n\t\"./ku\": 270,\n\t\"./ku.js\": 270,\n\t\"./ky\": 271,\n\t\"./ky.js\": 271,\n\t\"./lb\": 272,\n\t\"./lb.js\": 272,\n\t\"./lo\": 273,\n\t\"./lo.js\": 273,\n\t\"./lt\": 274,\n\t\"./lt.js\": 274,\n\t\"./lv\": 275,\n\t\"./lv.js\": 275,\n\t\"./me\": 276,\n\t\"./me.js\": 276,\n\t\"./mi\": 277,\n\t\"./mi.js\": 277,\n\t\"./mk\": 278,\n\t\"./mk.js\": 278,\n\t\"./ml\": 279,\n\t\"./ml.js\": 279,\n\t\"./mn\": 280,\n\t\"./mn.js\": 280,\n\t\"./mr\": 281,\n\t\"./mr.js\": 281,\n\t\"./ms\": 282,\n\t\"./ms-my\": 283,\n\t\"./ms-my.js\": 283,\n\t\"./ms.js\": 282,\n\t\"./mt\": 284,\n\t\"./mt.js\": 284,\n\t\"./my\": 285,\n\t\"./my.js\": 285,\n\t\"./nb\": 286,\n\t\"./nb.js\": 286,\n\t\"./ne\": 287,\n\t\"./ne.js\": 287,\n\t\"./nl\": 288,\n\t\"./nl-be\": 289,\n\t\"./nl-be.js\": 289,\n\t\"./nl.js\": 288,\n\t\"./nn\": 290,\n\t\"./nn.js\": 290,\n\t\"./pa-in\": 291,\n\t\"./pa-in.js\": 291,\n\t\"./pl\": 292,\n\t\"./pl.js\": 292,\n\t\"./pt\": 293,\n\t\"./pt-br\": 294,\n\t\"./pt-br.js\": 294,\n\t\"./pt.js\": 293,\n\t\"./ro\": 295,\n\t\"./ro.js\": 295,\n\t\"./ru\": 296,\n\t\"./ru.js\": 296,\n\t\"./sd\": 297,\n\t\"./sd.js\": 297,\n\t\"./se\": 298,\n\t\"./se.js\": 298,\n\t\"./si\": 299,\n\t\"./si.js\": 299,\n\t\"./sk\": 300,\n\t\"./sk.js\": 300,\n\t\"./sl\": 301,\n\t\"./sl.js\": 301,\n\t\"./sq\": 302,\n\t\"./sq.js\": 302,\n\t\"./sr\": 303,\n\t\"./sr-cyrl\": 304,\n\t\"./sr-cyrl.js\": 304,\n\t\"./sr.js\": 303,\n\t\"./ss\": 305,\n\t\"./ss.js\": 305,\n\t\"./sv\": 306,\n\t\"./sv.js\": 306,\n\t\"./sw\": 307,\n\t\"./sw.js\": 307,\n\t\"./ta\": 308,\n\t\"./ta.js\": 308,\n\t\"./te\": 309,\n\t\"./te.js\": 309,\n\t\"./tet\": 310,\n\t\"./tet.js\": 310,\n\t\"./tg\": 311,\n\t\"./tg.js\": 311,\n\t\"./th\": 312,\n\t\"./th.js\": 312,\n\t\"./tl-ph\": 313,\n\t\"./tl-ph.js\": 313,\n\t\"./tlh\": 314,\n\t\"./tlh.js\": 314,\n\t\"./tr\": 315,\n\t\"./tr.js\": 315,\n\t\"./tzl\": 316,\n\t\"./tzl.js\": 316,\n\t\"./tzm\": 317,\n\t\"./tzm-latn\": 318,\n\t\"./tzm-latn.js\": 318,\n\t\"./tzm.js\": 317,\n\t\"./ug-cn\": 319,\n\t\"./ug-cn.js\": 319,\n\t\"./uk\": 320,\n\t\"./uk.js\": 320,\n\t\"./ur\": 321,\n\t\"./ur.js\": 321,\n\t\"./uz\": 322,\n\t\"./uz-latn\": 323,\n\t\"./uz-latn.js\": 323,\n\t\"./uz.js\": 322,\n\t\"./vi\": 324,\n\t\"./vi.js\": 324,\n\t\"./x-pseudo\": 325,\n\t\"./x-pseudo.js\": 325,\n\t\"./yo\": 326,\n\t\"./yo.js\": 326,\n\t\"./zh-cn\": 327,\n\t\"./zh-cn.js\": 327,\n\t\"./zh-hk\": 328,\n\t\"./zh-hk.js\": 328,\n\t\"./zh-tw\": 329,\n\t\"./zh-tw.js\": 329\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 375;","import {\n  Localized,\n  WithLocalizationProps,\n  withLocalization,\n} from '@fluent/react';\nimport * as React from 'react';\nimport { connect } from 'react-redux';\nimport { Locale } from '../../../../stores/locale';\nimport StateTree from '../../../../stores/tree';\nimport URLS from '../../../../urls';\nimport 'react-tabulator/lib/styles.css'; // default theme\nimport 'react-tabulator/css/bootstrap/tabulator_bootstrap.min.css'; // use Theme(s)\n// for React 16.4.x use: import { ReactTabulator } - example in github repo.\nimport { ReactTabulator } from 'react-tabulator'; // for React 15.x\nimport './textadmin.css';\nimport API from '../../../../services/api';\nimport { ArrowLeft, MicIcon, StopIcon } from '../../../ui/icons';\nimport {\n  localeConnector,\n  LocaleLink,\n  LocaleNavLink,\n  LocalePropsFromState,\n} from '../../../locale-helpers';\nimport '.././contribution.css';\nimport { AdminSentences } from '../../../../stores/adminsentences';\nimport { getTrackClass } from '../../../../services/tracker';\n\nconst moment = require('moment');\n\nimport AdminSentence = AdminSentences.AdminSentence;\nimport { Sentences } from '../../../../stores/sentences';\nimport { Notifications } from '../../../../stores/notifications';\nimport { Uploads } from '../../../../stores/uploads';\nimport { User } from '../../../../stores/user';\nimport { RouteComponentProps, withRouter } from 'react-router';\nimport Modal, { ModalButtons } from '../../../modal/modal';\nimport { Button, TextButton } from '../../../ui/ui';\nimport TermsModal from '../../../terms-modal';\nimport ContributionPage, {\n  ContributionPillProps,\n  SET_COUNT,\n} from '../contribution';\nimport { AudioError } from '../speak/audio-web';\nimport { RecordButton } from '../../../primary-buttons/primary-buttons';\nimport RecordingPill from '../speak/recording-pill';\n\nlet data: any = [];\n\ninterface PropsFromState {\n  api: API;\n  locale: Locale.State;\n  user: User.State;\n}\n\ninterface PropsFromDispatch {}\n\ninterface Props\n  extends LocalePropsFromState,\n    WithLocalizationProps,\n    PropsFromState,\n    PropsFromDispatch,\n    RouteComponentProps<any, any, any> {}\n\ninterface State {\n  filterText: string;\n  addSentenceText: string;\n  position: number;\n  count: number;\n}\n\ntype CallResult = {\n  success: boolean;\n  result: any;\n  // result: Promise<AdminSentence>,\n};\n\nconst initialState: State = {\n  filterText: '',\n  addSentenceText: '',\n  position: 0,\n  count: 0,\n};\n\nclass TextAdminPage extends React.Component<Props, State> {\n  ref: any = null;\n\n  async componentDidMount() {\n    const { api } = this.props;\n\n    const count = await Promise.all([api.fetchAdminSentencesCount()]);\n\n    this.updateCount(count[0]);\n  }\n\n  constructor(props: Props) {\n    super(props);\n    this.state = initialState;\n    window.moment = moment;\n\n    this.handleAddSentenceChange = this.handleAddSentenceChange.bind(this);\n    this.handleAddSentenceSubmit = this.handleAddSentenceSubmit.bind(this);\n\n    this.handleFilterChange = this.handleFilterChange.bind(this);\n    this.handleFilterSubmit = this.handleFilterSubmit.bind(this);\n\n    this.nextData = this.nextData.bind(this);\n    this.prevData = this.prevData.bind(this);\n\n    this.getAdminSentences('', 0);\n  }\n\n  state: State = initialState;\n\n  static getDerivedStateFromProps(props: Props, state: State) {\n    //if (state.clips.length > 0) return null;\n\n    /*\n    if (props.s2tclips.length > 0) {\n      return {\n        s2tclips: props.s2tclips\n          .slice(0, SET_COUNT)\n          .map(s2tclip => ({ ...s2tclip, isValid: null })),\n      };\n    }\n    */\n    return props;\n  }\n\n  handleAddSentenceChange(event: any) {\n    this.setState({ addSentenceText: event.target.value });\n  }\n\n  handleAddSentenceSubmit(event: any) {\n    this.createAdminSentence(this.state.addSentenceText);\n    this.clearInputField();\n    event.preventDefault();\n  }\n\n  handleFilterChange(event: any) {\n    this.setState({ filterText: event.target.value });\n  }\n\n  handleFilterSubmit(event: any) {\n    let position = this.state.position;\n\n    // Reset position when filter changed\n    if (this.lastfilter != this.state.filterText) {\n      position = 0;\n      this.setState({ position: position });\n    }\n\n    const sentences = this.getAdminSentences(this.state.filterText, position);\n    event.preventDefault();\n  }\n\n  lastfilter = '';\n\n  private clearInputField() {\n    const input = document.getElementsByName(\n      'newSentence-input'\n    )[0] as HTMLInputElement;\n    input.value = '';\n    this.state.addSentenceText = '';\n  }\n\n  private getAdminSentences = async (\n    filter: string,\n    position: number\n  ): Promise<AdminSentences.AdminSentence[]> => {\n    const { api } = this.props;\n\n    try {\n      const newSentences = await api.fetchAdminSentences(20, position, filter);\n\n      this.lastfilter = filter;\n\n      data = newSentences;\n      this.ref.table.setData(data);\n      return newSentences;\n    } catch (error) {\n      return [];\n    }\n  };\n\n  private createAdminSentence = async (text: string): Promise<void> => {\n    if (text == '') {\n      alert('Text should not be empty!');\n    } else {\n      const { api } = this.props;\n\n      try {\n        const dummySentence = {\n          text: text,\n        } as AdminSentence;\n\n        const newSentence = await api.createAdminSentence(dummySentence);\n        console.info('Sentences returned: ' + newSentence);\n\n        data.unshift(newSentence);\n        this.updateCount(this.state.count + 1);\n        this.ref.table.replaceData(data);\n        this.clearInputField();\n      } catch (error) {\n        console.error(error);\n        alert(error);\n      }\n    }\n  };\n\n  private updateCount(count: number) {\n    if (count >= 0) {\n      this.setState({ count: count });\n      const countLabel = document.getElementById(\n        'count-label'\n      ) as HTMLLabelElement;\n      if (countLabel != null) {\n        countLabel.textContent = String(count);\n      }\n    }\n  }\n\n  private updateAdminSentence = async (\n    sentence: AdminSentence\n  ): Promise<CallResult> => {\n    if (sentence.text === '') {\n      alert('Text should not be empty!');\n    } else {\n      const { api } = this.props;\n      try {\n        const newSentence = await api.updateAdminSentence(sentence);\n        console.info('Sentences returned: ' + newSentence);\n        return { success: true, result: newSentence };\n      } catch (error) {\n        alert(error);\n        console.info(error);\n        return { success: false, result: null };\n      }\n    }\n  };\n\n  private deleteAdminSentence = async (\n    sentence: AdminSentence\n  ): Promise<boolean> => {\n    const { api } = this.props;\n\n    try {\n      await api.deleteAdminSentence(sentence);\n      const index = data.findIndex((element: AdminSentence) => {\n        return element.text === sentence.text;\n      });\n      if (index > -1) {\n        data.splice(index, 1);\n      }\n      this.updateCount(this.state.count - 1);\n      this.ref.table.replaceData(data);\n      return true;\n    } catch (error) {\n      console.error(error);\n      return false;\n    }\n  };\n\n  private editCheck = function (cell: any) {\n    //get row data\n    const data = cell.getRow().getData();\n\n    return data.is_used == 0;\n  };\n\n  private cellTextEdited = async (event: any): Promise<void> => {\n    const sentence = event.getData() as AdminSentence;\n    if (\n      confirm(\n        'Are you sure you want to change this entry to: ' + event.getData().text\n      )\n    ) {\n      try {\n        await this.updateSentenceAndTable(sentence, event);\n      } catch (error) {\n        event.restoreOldValue();\n        console.error(error);\n      }\n    } else {\n      event.restoreOldValue();\n    }\n  };\n\n  private cellIsUsedEdited = async (event: any): Promise<void> => {\n    try {\n      const sentence = event.getData() as AdminSentence;\n      if (confirm('Are you sure you want to publish the sentence?')) {\n        sentence.is_used = true;\n        await this.updateSentenceAndTable(sentence, event);\n      } else {\n        event.restoreOldValue();\n      }\n    } catch (error) {\n      event.restoreOldValue();\n      console.error(error);\n    }\n  };\n\n  private async updateSentenceAndTable(sentence: AdminSentence, event: any) {\n    const updateResult = await this.updateAdminSentence(sentence);\n    if (!updateResult.success) {\n      event.restoreOldValue();\n    } else {\n      const index = data.findIndex((element: AdminSentence) => {\n        return element.text === sentence.text;\n      });\n      data[index] = updateResult.result;\n      this.ref.table.setData(data);\n    }\n    console.info(event);\n  }\n\n  nextData(event: any) {\n    const position = this.state.position + 20;\n    console.info('Neue Position:' + position);\n    this.setState({ position: position });\n    this.getAdminSentences(this.state.filterText, position);\n  }\n\n  prevData(event: any) {\n    let position = this.state.position - 20;\n    if (position < 0) {\n      position = 0;\n    }\n    console.info('Neue Position:' + position);\n    this.setState({ position: position });\n    this.getAdminSentences(this.state.filterText, position);\n  }\n\n  private reset = () => this.setState(initialState);\n  columns = [\n    {\n      title: 'Text',\n      field: 'text',\n      formatter: 'textarea',\n      responsive: 0,\n      minWidth: 300,\n      editor: 'input',\n      editable: this.editCheck,\n      cellEdited: this.cellTextEdited,\n    },\n    {\n      title: 'Created',\n      field: 'created_at',\n      formatter: 'datetime',\n      formatterParams: { invalidPlaceholder: 'Kürzlich' },\n      width: '200',\n      responsive: 1,\n    },\n    {\n      title: 'AudioClips',\n      field: 'clips_count',\n      align: 'center',\n      formatter: 'star',\n      width: '120',\n      responsive: 2,\n    },\n    {\n      title: 'Veröffentlicht',\n      field: 'is_used',\n      align: 'center',\n      width: 150,\n      formatter: 'tickCross',\n      editor: true,\n      cellEdited: this.cellIsUsedEdited,\n      editable: this.editCheck,\n      responsive: 3,\n    },\n    {\n      title: 'Löschen',\n      width: 100,\n      align: 'center',\n      headerSort: false,\n      formatter: 'tickCross',\n      responsive: 4,\n      editable: this.editCheck,\n      cellClick: (e: any, cell: any) => {\n        const sentence = cell.getData() as AdminSentence;\n        if (!sentence.is_used) {\n          if (confirm('Are you sure you want to delete this entry?')) {\n            this.deleteAdminSentence(sentence);\n          }\n        }\n      },\n    },\n  ];\n\n  render() {\n    const { getString, user } = this.props;\n    const {} = this.state;\n    const options = {\n      //height: 150,\n      movableRows: true,\n      layout: 'fitColumns',\n    };\n\n    return (\n      <React.Fragment>\n        <div className=\"contribution-wrapper\">\n          <div className=\"contribution speak\">\n            <div className=\"top\">\n              <LocaleLink\n                to={user.account ? URLS.DASHBOARD : URLS.ROOT}\n                className=\"back\">\n                <ArrowLeft />\n              </LocaleLink>\n\n              <div className=\"links\">\n                <Localized id=\"speak\">\n                  <LocaleNavLink\n                    className={getTrackClass('fs', `toggle-speak`)}\n                    to={URLS.SPEAK}\n                  />\n                </Localized>\n                <Localized id=\"listen\">\n                  <LocaleNavLink\n                    className={getTrackClass('fs', `toggle-listen`)}\n                    to={URLS.LISTEN}\n                  />\n                </Localized>\n\n                {/*user.account*/ true ? (\n                  <Localized id=\"textadmin\">\n                    <LocaleNavLink to={URLS.TEXTADMIN} />\n                  </Localized>\n                ) : (\n                  ''\n                )}\n              </div>\n            </div>\n\n            <div>\n              <form onSubmit={this.handleFilterSubmit}>\n                <label>\n                  Filter:\n                  <input\n                    type=\"text\"\n                    value={this.state.filterText}\n                    onChange={this.handleFilterChange}\n                  />\n                </label>\n                <input type=\"submit\" value=\"Laden\" />\n                <button\n                  type=\"button\"\n                  className=\"minibutton\"\n                  onClick={this.prevData}>\n                  Zurück\n                </button>\n                &nbsp;{this.state.position}&nbsp; - &nbsp;\n                {this.state.position + 20}&nbsp; (\n                <label id=\"count-label\"> {this.state.count}</label>)\n                <button\n                  type=\"button\"\n                  className=\"minibutton\"\n                  onClick={this.nextData}>\n                  Mehr\n                </button>\n              </form>\n            </div>\n\n            <div className=\"texttable\">\n              <ReactTabulator\n                ref={ref => (this.ref = ref)}\n                columns={this.columns}\n                data={data}\n                options={options}\n                //height=\"100%\"\n                data-custom-attr=\"test-custom-attribute\"\n                className=\"custom-css-class\"\n              />\n            </div>\n\n            <div className=\"primary-buttons\">\n              <form onSubmit={this.handleAddSentenceSubmit}>\n                <label>\n                  Neuer Satz:\n                  <input\n                    className={'input-res'}\n                    name={'newSentence-input'}\n                    type=\"text\"\n                    size={130}\n                    value={this.state.addSentenceText}\n                    onChange={this.handleAddSentenceChange}\n                  />\n                </label>\n                <input type=\"submit\" value=\"Anlegen\" />\n              </form>\n            </div>\n\n            <div className=\"buttons\">\n              <div>\n                <button\n                  type=\"button\"\n                  className=\"button outline rounded hidden-sm-down\">\n                  <span>Tastenkürzel</span>\n                </button>\n              </div>\n            </div>\n          </div>\n        </div>\n      </React.Fragment>\n    );\n  }\n}\n\nconst mapStateToProps = (state: StateTree) => {\n  const { sentences, isLoading } = Sentences.selectors.localeSentences(state);\n\n  return {\n    api: state.api,\n    locale: state.locale,\n    user: state.user,\n  };\n};\n\nconst mapDispatchToProps = {};\n\nexport default withRouter(\n  localeConnector(\n    withLocalization(\n      connect<PropsFromState, any>(\n        mapStateToProps,\n        mapDispatchToProps\n      )(TextAdminPage)\n    )\n  )\n);\n"],"sourceRoot":""}