{"version":3,"sources":["components/services/authService.js","components/layout/Navbar.js","components/pages/NotFound.js","components/pages/Home.js","components/pages/About.js","components/common/input.jsx","components/common/select.jsx","components/common/plainText.jsx","components/common/form.jsx","components/pages/Login.js","components/pages/Logout.js","components/pages/Profile.js","components/services/clientService.js","components/utils/paginate.js","components/common/searchBox.jsx","components/common/pagination.jsx","components/common/tableHeader.jsx","components/common/tableBody.jsx","components/common/table.jsx","components/clients/ClientsTable.js","components/clients/Clients.js","components/clients/ClientForm.js","components/services/surveyService.js","components/utils/convertDate.js","components/surveys/SurveysTable.js","components/surveys/Surveys.js","components/common/protectedRoute.jsx","App.js","index.js"],"names":["CTX","logout","a","fetch","endPoint","getCTX","localStorage","removeItem","login","name","password","formData","FormData","append","magicAppName","apiUrl","method","body","res","text","data","toast","error","setItem","window","location","message","getCurrentUser","json","getItem","getCompanies","setINI","companyId","NavBar","user","useState","navExpanded","navBar","setNavBar","Navbar","bg","expand","onToggle","prevState","expanded","Brand","href","alt","src","width","height","className","Toggle","aria-controls","Collapse","id","Nav","onClick","to","NavDropdown","title","Divider","uname","NotFound","Home","About","Input","label","rest","htmlFor","Select","options","textProperty","valueProperty","value","map","option","key","defaultProps","PlainText","readOnly","Form","validateProperty","obj","schema","Joi","validate","details","state","abortEarly","errors","item","path","handleSubmit","e","preventDefault","setState","doSubmit","handleChange","input","currentTarget","errorMessage","doChange","type","this","onChange","Component","Login","upass","string","required","auth","onSubmit","renderInput","renderButton","Logout","Profile","currentUser","currentCompany","companies","props","CustomerID","renderSelect","propTypes","PropTypes","func","isRequired","getClients","getClient","IDCustomer","saveClient","client","CustomerName","ContactName","Phone1","Phone2","Phone3","paginate","items","pageNumber","pageSize","startIndex","_","slice","take","SearchBox","placeholder","Pagination","itemsCount","onPageChange","currentPage","onNext","onPrev","paginationRange","paginationStartFrom","Math","ceil","pages","range","aria-label","aria-hidden","page","TableHeader","raiseSort","sortColumn","order","onSort","renderSortIcon","column","columns","style","cursor","React","TableBody","renderCell","content","get","createKey","idProperty","Table","ClientsTable","Telephon","Cellular","clients","Clients","searchQuery","handleSerch","query","handlePageChange","handleSort","handleNext","nextPagination","handlePrev","prevPagination","getPageData","allClients","filtered","filter","toLowerCase","startsWith","sorted","orderBy","totalCount","length","ClientForm","Address","Type","Remark","number","allow","history","push","populateClient","clientID","match","params","replace","mapToViewModel","Telephone2","renderPlainText","aria-describedby","rows","getSurveys","sertificate","fromDate","toDate","printSurvey","blob","file","Blob","fileURL","URL","createObjectURL","open","convertDate","date_from","date_to","pad","s","Date","dateFrom","getDate","getMonth","getFullYear","join","dateTo","SurveysTable","survey","onPrint","surveys","Surveys","handlePrint","ID","split","handleChangeDateFrom","getServerData","handleChangeDateTo","allsurveys","selected","dateFormat","ProtectedRoute","component","render","App","handleChangeProfile","exact","ReactDOM","document","getElementById"],"mappings":"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","file":"static/js/main.0fe55d7c.chunk.js","sourcesContent":["import { toast } from 'react-toastify';\r\nimport { apiUrl, magicAppName, endPoint } from '../../config.json';\r\n\r\nconst CTX = 'CTX';\r\n\r\n\r\nconst logout = async () => {\r\n await fetch(endPoint + 'Auth&TRMCTX=Y&Arguments=-N3&CTX=' + getCTX());\r\n localStorage.removeItem(CTX);\r\n};\r\n\r\n\r\nconst login = async (name, password) => {\r\n try {\r\n const formData = new FormData();\r\n formData.append('uname', name);\r\n formData.append('upass', password);\r\n formData.append('appname', magicAppName);\r\n formData.append('prgname', 'Auth');\r\n formData.append('Arguments', '-N1');\r\n const res = await fetch(apiUrl, {\r\n method: 'POST',\r\n body: formData\r\n });\r\n const data = await res.text();\r\n switch (data) {\r\n case 'NoUser':\r\n toast.error('משתמש לא קיים');\r\n break;\r\n case 'NoActiveUser':\r\n toast.error('משתמש לא פעיל');\r\n break;\r\n default:\r\n localStorage.setItem(CTX, data);\r\n window.location = '/';\r\n };\r\n }\r\n catch (err) {\r\n toast.error(err.message);\r\n };\r\n}\r\n\r\n\r\nconst getCurrentUser = async () => {\r\n try {\r\n const res = await fetch(endPoint + 'Auth&CTX=' + getCTX() + '&Arguments=-N2');\r\n const data = await res.json();\r\n return data;\r\n }\r\n catch (err) {\r\n localStorage.removeItem(CTX);\r\n return null;\r\n };\r\n};\r\n\r\n\r\nconst getCTX = () => {\r\n return localStorage.getItem(CTX) ? localStorage.getItem(CTX) : '';\r\n};\r\n\r\nconst getCompanies = async () => {\r\n try {\r\n const res = await fetch(endPoint + 'INI&CTX=' + getCTX() + '&Arguments=-N2');\r\n const data = await res.json();\r\n return data;\r\n }\r\n catch (err) {\r\n localStorage.removeItem(CTX);\r\n return null;\r\n };\r\n};\r\n\r\n\r\nconst setINI = async (companyId) => {\r\n try {\r\n await fetch (endPoint + 'INI&Arguments=-N1,-N' + companyId + '&CTX=' + getCTX());\r\n }\r\n catch (err) {\r\n localStorage.removeItem(CTX);\r\n };\r\n};\r\n\r\n\r\nexport default { login, logout, getCurrentUser, getCTX, getCompanies, setINI };","import React, { Fragment, useState } from 'react';\r\n//import { Nav, Navbar, Form, FormControl, Button, NavDropdown } from 'react-bootstrap';\r\nimport { Nav, Navbar, NavDropdown } from 'react-bootstrap';\r\nimport { NavLink } from 'react-router-dom';\r\n\r\nconst NavBar = ({ user }) => {\r\n const [navBar, setNavBar] = useState({\r\n navExpanded: false\r\n });\r\n return (\r\n\r\n setNavBar(prevState => ({ ...navBar, navExpanded: !prevState.navExpanded }))} expanded={navBar.navExpanded}>\r\n \r\n {'Checkline | ניהול תסקירים'}\r\n \r\n \r\n \r\n {/*
\r\n \r\n \r\n */}\r\n
\r\n
\r\n )\r\n};\r\n\r\nexport default NavBar;","import React from 'react';\r\n\r\nconst NotFound = () => {\r\n return(\r\n

דף לא נימצא

\r\n );\r\n};\r\n\r\nexport default NotFound;","import React from 'react';\r\n\r\nconst Home = () => {\r\n\r\n return (\r\n
\r\n

דף בית

\r\n
\r\n );\r\n}\r\n\r\n\r\nexport default Home;","import React from 'react';\r\n\r\nconst About = () => {\r\n\r\n return (\r\n
\r\n
הודות
\r\n

תוכנה לבודקים מוסמכים

\r\n

\r\n גירסה : 1.0.0\r\n

\r\n
\r\n );\r\n}\r\n\r\n\r\nexport default About;","import React from 'react';\r\n\r\nconst Input = ({ name, label, error, ...rest }) => { // in ...rest : value, type, onChange\r\n return (\r\n
\r\n \r\n \r\n {error &&
{error}
}\r\n
);\r\n};\r\n\r\nexport default Input;","import React from 'react';\r\n\r\nconst Select = ({ name, label, options, error, textProperty, valueProperty, ...rest }) => {\r\n\r\n return (\r\n
\r\n \r\n \r\n {error &&
{error}
}\r\n
\r\n );\r\n};\r\n\r\nSelect.defaultProps = {\r\n textProperty: 'label',\r\n valueProperty: 'id'\r\n}\r\n\r\nexport default Select;","import React from 'react';\r\n\r\nconst PlainText = ({ name, label, ...rest }) => { // in ...rest : value, type\r\n return (\r\n
\r\n {label && }\r\n \r\n
);\r\n};\r\n\r\nexport default PlainText;","import React, { Component } from 'react';\r\nimport Joi from 'joi-browser';\r\nimport Input from './input';\r\nimport Select from './select';\r\nimport PlainText from './plainText';\r\n\r\nclass Form extends Component {\r\n\r\n validateProperty = ({ name, value }) => { // for one input\r\n const obj = { [name]: value };\r\n const schema = { [name]: this.schema[name] };\r\n const { error } = Joi.validate(obj, schema);\r\n return error ? error.details[0].message : null;\r\n };\r\n\r\n\r\n validate = () => { // for form\r\n const options = { abortEarly: false };\r\n const { error } = Joi.validate(this.state.data, this.schema, options); // 'abortEarly' for keep validate rest inputs\r\n if (!error) return null;\r\n const errors = {};\r\n // eslint-disable-next-line\r\n for (let item of error.details) { errors[item.path[0]] = item.message; }\r\n return errors;\r\n };\r\n\r\n\r\n handleSubmit = e => {\r\n e.preventDefault();\r\n const errors = this.validate();\r\n this.setState({ errors: errors || {} }); // if function 'validate' return 'null' update with empty object\r\n if (errors) return;\r\n this.doSubmit();\r\n };\r\n\r\n handleChange = ({ currentTarget: input }) => {\r\n // validate onchange input value\r\n const errors = { ...this.state.errors };\r\n const errorMessage = this.validateProperty(input);\r\n if (errorMessage) errors[input.name] = errorMessage;\r\n else delete errors[input.name];\r\n // update state from inputs\r\n const data = { ...this.state.data };\r\n data[input.name] = input.value;\r\n this.setState({data, errors});\r\n this.doChange(input);\r\n };\r\n\r\n renderButton(label) {\r\n return (\r\n );\r\n };\r\n\r\n renderInput(name, label, type = 'text') {\r\n const {data, errors} = this.state;\r\n return (\r\n \r\n );\r\n };\r\n\r\n renderPlainText (name, label, type = 'text') {\r\n const {data} = this.state;\r\n return (\r\n \r\n );\r\n };\r\n\r\n renderSelect(name, label, options, textProperty, valueProperty) {\r\n const {data, errors} = this.state;\r\n return (\r\n <Select name={name} value={data[name]} label={label} options={options} onChange={this.handleChange}\r\n error={errors[name]} textProperty={textProperty} valueProperty={valueProperty} />\r\n );\r\n };\r\n\r\n\r\n};\r\n\r\nexport default Form;","import React from 'react';\r\nimport Joi from 'joi-browser';\r\nimport auth from '../services/authService';\r\nimport Form from '../common/form';\r\n\r\n\r\nclass Login extends Form {\r\n\r\n state = {\r\n data: {\r\n uname: '',\r\n upass: ''\r\n },\r\n errors: {} // same structure as data\r\n };\r\n\r\n schema = {\r\n uname: Joi.string().required().label('שם משתמש'),\r\n upass: Joi.string().required().label('סיסמה')\r\n };\r\n\r\n doSubmit = async () => {\r\n const { data } = this.state;\r\n await auth.login(data.uname, data.upass);\r\n };\r\n\r\n doChange = () => {};\r\n\r\n render() {\r\n return (\r\n <div >\r\n <h5>כניסה</h5>\r\n <form onSubmit={this.handleSubmit}>\r\n {this.renderInput('uname', 'שם משתמש')}\r\n {this.renderInput('upass', 'סיסמה', 'password')}\r\n {this.renderButton('כניסה')}\r\n </form>\r\n </div>\r\n );\r\n };\r\n}\r\n\r\n\r\nexport default Login;","import {Component} from 'react';\r\nimport auth from '../services/authService';\r\n\r\nclass Logout extends Component {\r\n async componentDidMount () {\r\n await auth.logout();\r\n window.location = '/';\r\n };\r\n render () {\r\n return(null);\r\n };\r\n}\r\n\r\nexport default Logout;","import React from 'react';\r\nimport Joi from 'joi-browser';\r\nimport PropTypes from 'prop-types';\r\nimport Form from '../common/form';\r\nimport auth from '../services/authService';\r\n\r\nclass Profile extends Form {\r\n\r\n state = {\r\n data: {\r\n currentUser: '',\r\n currentCompany: '',\r\n },\r\n companies: [],\r\n errors: {}, // same structure as data object\r\n };\r\n\r\n schema = {\r\n currentCompany: Joi.string().required().label('חברה לעבודה'),\r\n };\r\n\r\n async componentDidMount() {\r\n const user = await auth.getCurrentUser();\r\n const companies = await auth.getCompanies();\r\n this.setState(\r\n {\r\n companies,\r\n data: {\r\n currentUser: user.uname,\r\n currentCompany: user.CustomerID\r\n }\r\n }\r\n );\r\n };\r\n\r\n doChange = async (input) => {\r\n if (input.value) {\r\n await auth.setINI(input.value);\r\n await this.props.onChange();\r\n };\r\n };\r\n\r\n render() {\r\n const {data, companies} = this.state;\r\n return (\r\n <div>\r\n {data.currentUser}\r\n {this.renderSelect('currentCompany', 'חברה', companies)}\r\n </div>\r\n );\r\n };\r\n}\r\n\r\nProfile.propTypes = {\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default Profile;","import auth from './authService';\r\nimport {apiUrl, magicAppName, endPoint} from '../../config.json';\r\n\r\nexport const getClients = async () => {\r\n const res = await fetch(endPoint + 'Clients&Arguments=-N1&CTX=' + auth.getCTX());\r\n const data = await res.json();\r\n return data;\r\n};\r\n\r\nexport const getClient = async (IDCustomer) => {\r\n const res = await fetch(endPoint + `Clients&Arguments=-N1,-N${IDCustomer}&CTX=` + auth.getCTX());\r\n const data = await res.json();\r\n return data;\r\n};\r\n\r\nexport const saveClient = async (client) => {\r\n const formData = new FormData();\r\n formData.append('appname', magicAppName);\r\n formData.append('prgname', 'Clients');\r\n formData.append('CTX', auth.getCTX());\r\n formData.append('Arguments', `-N2,-N${client.IDCustomer}`);\r\n formData.append('CustomerName', client.CustomerName);\r\n formData.append('ContactName', client.ContactName);\r\n formData.append('Phone1', client.Phone1);\r\n formData.append('Phone2', client.Phone2);\r\n formData.append('Phone3', client.Phone3);\r\n await fetch(apiUrl, {\r\n method: 'POST',\r\n body: formData\r\n });\r\n // const data = await res.text();\r\n};\r\n","import _ from 'lodash';\r\n\r\nexport const paginate = (items, pageNumber, pageSize) => {\r\n const startIndex = (pageNumber - 1) * pageSize;\r\n return _(items).slice(startIndex).take(pageSize).value();\r\n}","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst SearchBox = ({ value, onChange }) => {\r\n return (\r\n <input type='text' name='query' className='form-control my-3'\r\n placeholder='חיפוש ...' value={value} onChange={e => onChange(e.currentTarget.value)} />\r\n );\r\n};\r\n\r\nSearchBox.propTypes = {\r\n value: PropTypes.string.isRequired,\r\n onChange: PropTypes.func.isRequired\r\n};\r\n\r\nexport default SearchBox;","import React from 'react';\r\nimport _ from 'lodash';\r\nimport PropTypes from 'prop-types';\r\n\r\nconst Pagination = (props) => {\r\n const { itemsCount, pageSize, onPageChange, currentPage, onNext, onPrev, paginationRange, paginationStartFrom } = props;\r\n const pagesCount = Math.ceil(itemsCount / pageSize);\r\n if (pagesCount === 1) return null;\r\n const pages = _.range(paginationStartFrom, paginationRange + paginationStartFrom - 1);\r\n\r\n\r\n return (\r\n <nav aria-label=\"Page navigation example\">\r\n <ul className=\"pagination\">\r\n <li className=\"page-item\">\r\n <button className=\"page-link\" onClick={onPrev} >\r\n <span aria-hidden=\"true\">&laquo;</span>\r\n </button>\r\n </li>\r\n {pages.map(\r\n page => (\r\n <li key={page} className={page === currentPage ? \"page-item active\" : \"page-item\"} >\r\n <button className=\"page-link\" onClick={() => { onPageChange(page) }} >{page}</button>\r\n </li>\r\n )\r\n )}\r\n <li className=\"page-item\">\r\n <button className=\"page-link\" onClick={onNext} >\r\n <span aria-hidden=\"true\">&raquo;</span>\r\n </button>\r\n </li>\r\n </ul>\r\n </nav>\r\n )\r\n};\r\n\r\n\r\n// type checking is good practies for reusable components\r\nPagination.propTypes = {\r\n itemsCount: PropTypes.number.isRequired,\r\n pageSize: PropTypes.number.isRequired,\r\n onPageChange: PropTypes.func.isRequired,\r\n currentPage: PropTypes.number.isRequired,\r\n onNext: PropTypes.func.isRequired,\r\n onPrev: PropTypes.func.isRequired,\r\n paginationRange: PropTypes.number.isRequired,\r\n paginationStartFrom: PropTypes.number.isRequired\r\n}\r\n\r\nexport default Pagination;","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\n\r\nclass TableHeader extends React.Component {\r\n\r\n raiseSort = path => {\r\n const sortColumn = this.props.sortColumn;\r\n if (sortColumn.path === path) {\r\n sortColumn.order = (sortColumn.order === 'asc') ? 'desc' : 'asc';\r\n }\r\n else {\r\n sortColumn.path = path;\r\n sortColumn.order = 'asc';\r\n }\r\n this.props.onSort(sortColumn);\r\n };\r\n\r\n renderSortIcon = column => {\r\n const { sortColumn } = this.props;\r\n if (column.path !== sortColumn.path) return null;\r\n if (sortColumn.order === 'asc') return <i className='fa fa-sort-asc'></i>\r\n return <i className='fa fa-sort-desc'></i>\r\n }\r\n\r\n render() {\r\n return (\r\n <thead>\r\n <tr>\r\n {this.props.columns.map(column =>\r\n <th className='clickable' style ={{cursor: 'pointer'}} key={column.path || column.key} onClick={() => this.raiseSort(column.path)}>\r\n {column.label} {this.renderSortIcon(column)}</th>)}\r\n </tr>\r\n </thead>\r\n );\r\n };\r\n}\r\n\r\nTableHeader.propTypes = {\r\n columns: PropTypes.array.isRequired,\r\n onSort: PropTypes.func.isRequired,\r\n sortColumn: PropTypes.object.isRequired\r\n};\r\n\r\nexport default TableHeader;","import React from 'react';\r\nimport _ from 'lodash';\r\n\r\nclass TableBody extends React.Component {\r\n\r\n renderCell = (item, column) => {\r\n if (column.content) return column.content(item);\r\n return _.get(item, column.path);\r\n };\r\n\r\n createKey = (item, column, idProperty) => {\r\n return (item[idProperty] + (column.path || column.key));\r\n }\r\n\r\n render() {\r\n const { data, columns, idProperty } = this.props;\r\n return (<tbody>\r\n {data.map(item => (\r\n <tr key = {item[idProperty]}>\r\n {columns.map(column => <td key={this.createKey(item,column, idProperty)}>\r\n {this.renderCell(item,column)}\r\n </td>)}\r\n </tr>\r\n ))}\r\n </tbody>);\r\n };\r\n}\r\n\r\nTableBody.defaultProps = {\r\n idProperty: '_id'\r\n}\r\n\r\nexport default TableBody","import React from 'react';\r\nimport TableHeader from './tableHeader';\r\nimport TableBody from './tableBody';\r\n\r\nconst Table = ({ data, columns, sortColumn, onSort, idProperty }) => {\r\n\r\n return (\r\n <div className='table-responsive'>\r\n <table className=\"table\">\r\n <TableHeader columns={columns} sortColumn={sortColumn} onSort={onSort} />\r\n <TableBody data={data} columns={columns} idProperty={idProperty} />\r\n </table>\r\n </div>);\r\n}\r\n\r\nexport default Table;","import React from 'react';\r\nimport {Link} from 'react-router-dom';\r\nimport Table from '../common/table';\r\n\r\nclass ClientsTable extends React.Component {\r\n\r\n columns = [\r\n { path: 'CustomerName', label: 'לקוח', content: client => <Link to={`/clients/${client.IDCustomer}`}>{client.CustomerName}</Link>},\r\n { path: 'ContactName', label: 'איש קשר' },\r\n { key: 'phone', content: client => <a className='btn btn-info btn-sm' href={'tel:' + client.Telephon} ><i className='fa fa-phone'></i></a>},\r\n { key: 'cellular', content: client => <a className='btn btn-info btn-sm' href={'tel:' + client.Cellular} ><i className='fa fa-mobile'></i></a>}\r\n ];\r\n\r\n render () {\r\n const {clients, onSort, sortColumn} = this.props;\r\n return (\r\n <Table columns = {this.columns} data={clients} onSort={onSort} sortColumn={sortColumn} idProperty='IDCustomer'/>\r\n );\r\n };\r\n\r\n};\r\n\r\n\r\nexport default ClientsTable;","import React, { Component } from 'react';\r\nimport _ from 'lodash';\r\nimport { getClients } from '../services/clientService';\r\nimport { paginate } from '../utils/paginate';\r\nimport SearchBox from '../common/searchBox';\r\nimport Pagination from '../common/pagination';\r\nimport ClientsTable from './ClientsTable';\r\n\r\n\r\nclass Clients extends Component {\r\n\r\n state = {\r\n clients: [],\r\n searchQuery: '',\r\n pageSize: 8,\r\n currentPage: 1,\r\n paginationRange: 6,\r\n paginationStartFrom: 1,\r\n sortColumn: { path: 'CustomerName', order: 'asc' }\r\n };\r\n\r\n async componentDidMount() {\r\n const clients = await getClients();\r\n this.setState({ clients });\r\n };\r\n\r\n handleSerch = query => {\r\n this.setState({ searchQuery: query, currentPage: 1 });\r\n };\r\n\r\n handlePageChange = page => {\r\n this.setState({ currentPage: page });\r\n };\r\n\r\n handleSort = sortColumn => {\r\n this.setState({ sortColumn });\r\n }\r\n\r\n handleNext = () => {\r\n const { paginationStartFrom, paginationRange } = this.state;\r\n const nextPagination = paginationStartFrom + paginationRange - 1;\r\n this.setState({\r\n paginationStartFrom: nextPagination,\r\n currentPage: nextPagination\r\n });\r\n };\r\n\r\n\r\n handlePrev = () => {\r\n const { paginationStartFrom, paginationRange, currentPage } = this.state;\r\n if (currentPage > paginationRange - 1) {\r\n const prevPagination = paginationStartFrom - paginationRange + 1;\r\n this.setState({\r\n paginationStartFrom: prevPagination,\r\n currentPage: prevPagination\r\n });\r\n }\r\n };\r\n\r\n getPageData = () => {\r\n const { pageSize, currentPage, searchQuery, clients: allClients, sortColumn } = this.state;\r\n let filtered = allClients;\r\n if (searchQuery) {\r\n filtered = allClients.filter(client => client.CustomerName.toLowerCase().startsWith(searchQuery.toLowerCase()));\r\n };\r\n const sorted = _.orderBy(filtered, [sortColumn.path], [sortColumn.order]);\r\n const clients = paginate(sorted, currentPage, pageSize);\r\n return { totalCount: filtered.length, data: clients };\r\n };\r\n\r\n render() {\r\n const { length: count } = this.state.clients;\r\n if (count === 0) {\r\n return <p>אין לקוחות</p>;\r\n }\r\n const { pageSize, currentPage, searchQuery, paginationRange, paginationStartFrom, sortColumn } = this.state;\r\n const { totalCount, data: clients } = this.getPageData();\r\n\r\n return (\r\n <div className='row'>\r\n <div className='col'>\r\n <p>סה\"כ {totalCount} לקוחות</p>\r\n <SearchBox value={searchQuery} onChange={this.handleSerch} />\r\n <ClientsTable clients={clients} onSort={this.handleSort} sortColumn={sortColumn} />\r\n <Pagination itemsCount={totalCount} pageSize={pageSize} onPageChange={this.handlePageChange}\r\n currentPage={currentPage} paginationRange={paginationRange} onNext={this.handleNext} onPrev={this.handlePrev}\r\n paginationStartFrom={paginationStartFrom} />\r\n </div>\r\n </div>\r\n );\r\n };\r\n};\r\n\r\nexport default Clients;","import React from 'react';\r\nimport Joi from 'joi-browser';\r\nimport Form from '../common/form';\r\nimport { getClient, saveClient } from '../services/clientService';\r\n\r\nclass ClientForm extends Form {\r\n\r\n state = {\r\n data: {\r\n IDCustomer: 0,\r\n CustomerName: '',\r\n ContactName: '',\r\n Address: '',\r\n Type: '',\r\n Remark: '',\r\n Phone1: '',\r\n Phone2: '',\r\n Phone3: ''\r\n },\r\n errors: {}\r\n };\r\n\r\n schema = {\r\n IDCustomer: Joi.number().required(),\r\n CustomerName: Joi.string().required().label('שם לקוח'),\r\n ContactName: Joi.string().required().label('איש קשר'),\r\n Address: Joi.string().allow(''),\r\n Type: Joi.string().allow(''),\r\n Remark: Joi.string().allow(''),\r\n Phone1: Joi.string().allow(''),\r\n Phone2: Joi.string().allow(''),\r\n Phone3: Joi.string().allow('')\r\n };\r\n\r\n async componentDidMount() {\r\n await this.populateClient();\r\n };\r\n\r\n async populateClient() {\r\n const clientID = this.props.match.params.id;\r\n if (clientID === 'new') return;\r\n const data = await getClient(clientID);\r\n if (data.length === 0) return this.props.history.replace('/not-found');\r\n this.setState({ data: this.mapToViewModel(...data) }); // spread operator because return array with one object\r\n };\r\n\r\n\r\n doSubmit = async () => {\r\n await saveClient(this.state.data);\r\n this.props.history.push('/clients');\r\n };\r\n\r\n doChange = () => { };\r\n\r\n handleChange = ({ currentTarget: input }) => {\r\n const data = { ...this.state.data };\r\n data[input.name] = input.value;\r\n this.setState({ data });\r\n };\r\n\r\n mapToViewModel(client) {\r\n return {\r\n IDCustomer: client.IDCustomer,\r\n CustomerName: client.CustomerName,\r\n ContactName: client.ContactName,\r\n Address: client.Address,\r\n Type: client.Type,\r\n Remark: client.Remark,\r\n Phone1: client.Telephon,\r\n Phone2: client.Cellular,\r\n Phone3: client.Telephone2\r\n };\r\n };\r\n\r\n\r\n render() {\r\n return (\r\n <div>\r\n {this.renderPlainText('Type')}\r\n <form onSubmit={this.handleSubmit}> {/* handleSubmit in extended form component */}\r\n {this.renderInput('CustomerName', 'שם')}\r\n {this.renderInput('ContactName', 'איש קשר')}\r\n\r\n <div className=\"input-group mb-3\">\r\n <div className=\"input-group-prepend\">\r\n <a className=\"btn btn-outline-secondary\" href={'tel:' + this.state.data.Phone1}>טלפון ראשי</a>\r\n </div>\r\n <input value={this.state.data.Phone1} onChange={this.handleChange} name='Phone1'\r\n type=\"text\" className=\"form-control\" placeholder=\"\" aria-label=\"\" aria-describedby=\"basic-addon1\" />\r\n </div>\r\n\r\n <div className=\"input-group mb-3\">\r\n <div className=\"input-group-prepend\">\r\n <a className=\"btn btn-outline-secondary\" href={'tel:' + this.state.data.Phone2}>טלפון נייד</a>\r\n </div>\r\n <input value={this.state.data.Phone2} onChange={this.handleChange} name='Phone2'\r\n type=\"text\" className=\"form-control\" placeholder=\"\" aria-label=\"\" aria-describedby=\"basic-addon1\" />\r\n </div>\r\n\r\n <div className=\"input-group mb-3\">\r\n <div className=\"input-group-prepend\">\r\n <a className=\"btn btn-outline-secondary\" href={'tel:' + this.state.data.Phone3}>טלפון משני</a>\r\n </div>\r\n <input value={this.state.data.Phone3} onChange={this.handleChange} name='Phone3'\r\n type=\"text\" className=\"form-control\" placeholder=\"\" aria-label=\"\" aria-describedby=\"basic-addon1\" />\r\n </div>\r\n\r\n {this.renderPlainText('Address')}\r\n\r\n <div className=\"form-group\">\r\n <textarea rows='4' className=\"form-control-plaintext\" readOnly name='Remark' onChange={this.handleChange} value={this.state.data.Remark}></textarea>\r\n </div>\r\n\r\n <div className=\"form-group\">\r\n {this.renderButton('שמור')}\r\n <input className=\"btn btn-dark\" type=\"button\" value=\"חזרה\" onClick={() => { this.props.history.push('/clients') }} />\r\n </div>\r\n\r\n </form>\r\n\r\n </div>\r\n );\r\n };\r\n};\r\n\r\nexport default ClientForm;","import auth from './authService';\r\nimport {endPoint} from '../../config.json';\r\n\r\nexport const getSurveys = async (sertificate, id, fromDate, toDate) => {\r\n const res = await fetch(endPoint + `Surveys&Arguments=-N1,-A${sertificate},-N${id},-A${fromDate},-A${toDate}&CTX=` + auth.getCTX());\r\n const data = await res.json();\r\n return data;\r\n};\r\n\r\nexport const printSurvey = async (sertificate, id, CustomerID) => {\r\n const res = await fetch(endPoint + `Surveys&Arguments=-N2,-A${id},-N${sertificate},-A,-A,-N${CustomerID}`);\r\n const data = await res.blob(); // Receive PDF Steam as as Blob\r\n const file = new Blob([data], {type: 'application/pdf'}); //Create a Blob from the PDF Stream\r\n const fileURL = URL.createObjectURL(file); //Build a URL from the file\r\n window.open(fileURL); //Open the URL on new Window\r\n};\r\n","export const convertDate = (date_from, date_to) => {\r\n function pad(s) { return (s < 10) ? '0' + s : s; }\r\n let dateFrom = new Date(date_from);\r\n let dateTo = new Date(date_to);\r\n dateFrom = [pad(date_from.getDate()), pad(date_from.getMonth() + 1), date_from.getFullYear()].join('/');\r\n dateTo = [pad(date_to.getDate()), pad(date_to.getMonth() + 1), date_to.getFullYear()].join('/');\r\n return { dateFrom, dateTo };\r\n};","import React from 'react';\r\nimport Table from '../common/table';\r\n\r\nclass SurveysTable extends React.Component {\r\n\r\n columns = [\r\n { path: 'CheckDate', label: 'תאריך'},\r\n { path: 'CustomerName', label: 'לקוח'},\r\n { path: 'ID', label: 'תסקיר' },\r\n { path: 'CheckerName', label: 'בודק' },\r\n { key: 'print', content: survey => <button onClick={() => this.props.onPrint(survey)} className='btn btn-info btn-sm'><i className='fa fa-print'></i></button> }\r\n ];\r\n\r\n render () {\r\n const {surveys, onSort, sortColumn} = this.props;\r\n return (\r\n <Table columns = {this.columns} data={surveys} onSort={onSort} sortColumn={sortColumn} idProperty='ID'/>\r\n );\r\n };\r\n\r\n};\r\n\r\n\r\nexport default SurveysTable;","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport _ from 'lodash';\r\nimport DatePicker from 'react-datepicker';\r\nimport { getSurveys, printSurvey } from '../services/surveyService';\r\nimport { paginate } from '../utils/paginate';\r\nimport { convertDate } from '../utils/convertDate';\r\nimport SearchBox from '../common/searchBox';\r\nimport Pagination from '../common/pagination';\r\nimport SurveysTable from './SurveysTable';\r\n\r\n\r\n\r\nclass Surveys extends Component {\r\n\r\n state = {\r\n surveys: [],\r\n dateFrom: new Date(),\r\n dateTo: new Date(),\r\n searchQuery: '',\r\n pageSize: 8,\r\n currentPage: 1,\r\n paginationRange: 6,\r\n paginationStartFrom: 1,\r\n sortColumn: { path: 'CustomerName', order: 'asc' }\r\n };\r\n\r\n async componentDidMount() {\r\n await this.getServerData();\r\n };\r\n\r\n handleSerch = query => {\r\n this.setState({ searchQuery: query, currentPage: 1 });\r\n };\r\n\r\n handlePrint = async survey => {\r\n const id = survey.ID.split('/')[0];\r\n const sertificate = survey.ID.split('/')[1];\r\n const {CustomerID} = this.props.user;\r\n await printSurvey(id, sertificate, CustomerID);\r\n };\r\n\r\n handlePageChange = page => {\r\n this.setState({ currentPage: page });\r\n };\r\n\r\n handleSort = sortColumn => {\r\n this.setState({ sortColumn });\r\n }\r\n\r\n handleNext = () => {\r\n const { paginationStartFrom, paginationRange } = this.state;\r\n const nextPagination = paginationStartFrom + paginationRange - 1;\r\n this.setState({\r\n paginationStartFrom: nextPagination,\r\n currentPage: nextPagination\r\n });\r\n };\r\n\r\n\r\n handlePrev = () => {\r\n const { paginationStartFrom, paginationRange, currentPage } = this.state;\r\n if (currentPage > paginationRange - 1) {\r\n const prevPagination = paginationStartFrom - paginationRange + 1;\r\n this.setState({\r\n paginationStartFrom: prevPagination,\r\n currentPage: prevPagination\r\n });\r\n }\r\n };\r\n\r\n handleChangeDateFrom = async dateFrom => {\r\n this.setState({\r\n dateFrom\r\n }, async () => { await this.getServerData() });\r\n // pass function as a callback, for executed after state change occurs (setState() does not immediately mutate this.state)\r\n // if call function after setState instead pass as a callback its still see old date value\r\n };\r\n\r\n handleChangeDateTo = async dateTo => {\r\n this.setState({\r\n dateTo\r\n }, async () => { await this.getServerData() });\r\n };\r\n\r\n getServerData = async () => {\r\n const { dateFrom, dateTo } = convertDate(this.state.dateFrom, this.state.dateTo);\r\n const surveys = await getSurveys('', 0, dateFrom, dateTo);\r\n this.setState({ surveys });\r\n };\r\n\r\n getPageData = () => {\r\n const { pageSize, currentPage, searchQuery, surveys: allsurveys, sortColumn } = this.state;\r\n let filtered = allsurveys;\r\n if (searchQuery) {\r\n filtered = allsurveys.filter(survey => survey.CustomerName.toLowerCase().startsWith(searchQuery.toLowerCase()));\r\n };\r\n const sorted = _.orderBy(filtered, [sortColumn.path], [sortColumn.order]);\r\n const surveys = paginate(sorted, currentPage, pageSize);\r\n return { totalCount: filtered.length, data: surveys };\r\n };\r\n\r\n render() {\r\n const { length: count } = this.state.surveys;\r\n if (count === 0) {\r\n return <div className='row'>\r\n <div className='col'>\r\n <DatePicker selected={this.state.dateFrom} onChange={this.handleChangeDateFrom} dateFormat='dd/MM/yyyy' className='form-control my-3' />\r\n {' - '}\r\n <DatePicker selected={this.state.dateTo} onChange={this.handleChangeDateTo} dateFormat='dd/MM/yyyy' className='form-control my-3' />\r\n <p>אין תסקירים</p>\r\n </div>\r\n </div>\r\n }\r\n const { pageSize, currentPage, searchQuery, paginationRange, paginationStartFrom, sortColumn } = this.state;\r\n const { totalCount, data: surveys } = this.getPageData();\r\n\r\n return (\r\n <div className='row'>\r\n <div className='col'>\r\n <DatePicker selected={this.state.dateFrom} onChange={this.handleChangeDateFrom} dateFormat='dd/MM/yyyy' className='form-control my-3' />\r\n {' - '}\r\n <DatePicker selected={this.state.dateTo} onChange={this.handleChangeDateTo} dateFormat='dd/MM/yyyy' className='form-control my-3' />\r\n <p>סה\"כ {totalCount} תסקירים</p>\r\n <SearchBox value={searchQuery} onChange={this.handleSerch} />\r\n <SurveysTable surveys={surveys} onPrint={this.handlePrint} onSort={this.handleSort} sortColumn={sortColumn} />\r\n <Pagination itemsCount={totalCount} pageSize={pageSize} onPageChange={this.handlePageChange}\r\n currentPage={currentPage} paginationRange={paginationRange} onNext={this.handleNext} onPrev={this.handlePrev}\r\n paginationStartFrom={paginationStartFrom} />\r\n </div>\r\n </div>\r\n );\r\n };\r\n};\r\n\r\nSurveys.propTypes = {\r\n user: PropTypes.object.isRequired\r\n};\r\n\r\nexport default Surveys;","import React from 'react';\r\nimport { Route, Redirect } from 'react-router-dom';\r\nimport auth from '../services/authService';\r\n\r\nconst ProtectedRoute = ({ component: Component, render, path, ...rest }) => {\r\n return (\r\n <Route {...rest}\r\n render={props => {\r\n if (!auth.getCTX())\r\n return (<Redirect to='/login' />);\r\n return Component ? <Component {...props} /> : render(props);\r\n }}\r\n />\r\n );\r\n};\r\n\r\nexport default ProtectedRoute;","import React, { Fragment, Component } from 'react';\nimport { BrowserRouter as Router, Route, Redirect, Switch } from 'react-router-dom';\nimport { ToastContainer } from 'react-toastify';\nimport auth from './components/services/authService';\nimport Navbar from './components/layout/Navbar';\nimport NotFound from './components/pages/NotFound';\nimport Home from './components/pages/Home';\nimport About from './components/pages/About';\nimport Login from './components/pages/Login';\nimport Logout from './components/pages/Logout';\nimport Profile from './components/pages/Profile';\nimport Clients from './components/clients/Clients';\nimport ClientForm from './components/clients/ClientForm';\nimport Surveys from './components/surveys/Surveys';\n\nimport ProtectedRoute from './components/common/protectedRoute';\n\nimport './App.css';\nimport 'react-toastify/dist/ReactToastify.css';\n\n\nclass App extends Component {\n state = {};\n\n async componentDidMount() {\n if (auth.getCTX()) {\n const user = await auth.getCurrentUser();\n this.setState({ user });\n };\n };\n\n handleChangeProfile = async () => {\n const user = await auth.getCurrentUser();\n this.setState({ user });\n };\n\n render() {\n const { user } = this.state;\n return (\n <Router>\n <Fragment>\n <ToastContainer />\n <Navbar user={user} />\n <main className='container'>\n <Switch>\n <Route exact path='/' component={Home} />\n <Route path='/login' component={Login} />\n <Route path='/logout' component={Logout} />\n <Route path='/about' component={About} />\n <ProtectedRoute path='/surveys' render={props => <Surveys {...props} user={user || {}} />} />\n <ProtectedRoute path='/clients/:id' component={ClientForm} />\n <ProtectedRoute path='/clients' component={Clients} />\n <ProtectedRoute path='/profile' render={props => <Profile {...props} onChange={this.handleChangeProfile} />} />\n <Route path='/not-found' component={NotFound} />\n <Redirect to='/not-found' />\n </Switch>\n </main>\n </Fragment>\n </Router>\n );\n };\n}\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport 'bootstrap-v4-rtl/dist/css/bootstrap-rtl.css';\nimport 'font-awesome/css/font-awesome.css';\nimport \"react-datepicker/dist/react-datepicker.css\";\nimport App from './App';\n\nReactDOM.render(<App/>, document.getElementById('root'));\n"],"sourceRoot":""}