Browse Source

added fixes

old_master
Listat.an 5 years ago
parent
commit
a342890862
  1. 2
      __run.bat
  2. 1
      package.json
  3. 37
      public/firebase-messaging-sw.js
  4. 7
      public/manifest.json
  5. 23
      src/components/Fields/TreeSelectField.jsx
  6. 4
      src/components/PermissionsField/components/Item/components/Actions/index.jsx
  7. 2
      src/components/PermissionsField/components/Item/components/SubType/index.jsx
  8. 2
      src/components/TableGrid/CollumsView.jsx
  9. 7
      src/components/TableGrid/TableGrig.jsx
  10. 18
      src/components/TableGrid/style.scss
  11. 25
      src/containers/App/App.jsx
  12. 16
      src/containers/App/actions.js
  13. 8
      src/containers/Ips/components/Contexmenu/index.jsx
  14. 5
      src/containers/Ips/components/Data/index.jsx
  15. 4
      src/containers/Ips/index.jsx
  16. 3
      src/containers/Layout/sidebar/filter_task/index.jsx
  17. 1
      src/containers/Layout/topbar/TopbarNotification/index.jsx
  18. 4
      src/containers/LogIn/actions.js
  19. 86
      src/containers/Logs/components/Data/index.jsx
  20. 2
      src/containers/Logs/index.jsx
  21. 2
      src/containers/Profile/components/Actions/index.jsx
  22. 2
      src/containers/Profile/components/Avatar/index.jsx
  23. 12
      src/containers/Task/components/Data/index.jsx
  24. 4
      src/containers/Task/components/Form/components/comments/components/item/index.jsx
  25. 1
      src/containers/Task/components/Form/components/comments/components/new/index.jsx
  26. 1
      src/containers/Task/index.js
  27. 5
      src/containers/User/components/DataUser/index.jsx
  28. 3
      src/index.jsx
  29. 20
      src/init-fcm.js
  30. 14
      src/register-sw.js
  31. 3
      src/scss/component/topbar.scss
  32. 398
      yarn.lock

2
__run.bat

@ -1,3 +1,3 @@ @@ -1,3 +1,3 @@
REM SET REACT_APP_API_URL=http://localhost:1337
SET REACT_APP_API_URL=http://localhost:1337
yarn start

1
package.json

@ -20,6 +20,7 @@ @@ -20,6 +20,7 @@
"extract-text-webpack-plugin": "3.0.2",
"file-loader": "^3.0.1",
"file-saver": "^2.0.2",
"firebase": "^7.14.5",
"fs-extra": "^7.0.1",
"highcharts": "^7.0.3",
"html-webpack-plugin": "^4.0.0-beta.5",

37
public/firebase-messaging-sw.js

@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
importScripts('https://www.gstatic.com/firebasejs/7.14.5/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/7.14.5/firebase-messaging.js');
firebase.initializeApp({
apiKey: "AIzaSyCJtXpg5jFDtuEWy4f4dajX_NKHStZAtVQ",
authDomain: "my-tasks-98409.firebaseapp.com",
databaseURL: "https://my-tasks-98409.firebaseio.com",
projectId: "my-tasks-98409",
storageBucket: "my-tasks-98409.appspot.com",
messagingSenderId: "411418171487",
appId: "1:411418171487:web:fbbe0d70a1376f2d64e3ea"
});
const messaging = firebase.messaging();
messaging.setBackgroundMessageHandler(function(payload) {
const promiseChain = clients
.matchAll({
type: "window",
includeUncontrolled: true
})
.then(windowClients => {
for (let i = 0; i < windowClients.length; i++) {
const windowClient = windowClients[i];
windowClient.postMessage(payload);
}
})
.then(() => {
return registration.showNotification("my notification title");
});
return promiseChain;
});
self.addEventListener('notificationclick', function(event) {
// do what you want
// ...
});

7
public/manifest.json

@ -1,6 +1,6 @@ @@ -1,6 +1,6 @@
{
"short_name": "EasyDEV",
"name": "EasyDEV",
"short_name": "TaskMe;)",
"name": "TaskMe;)",
"icons": [
{
"src": "fav.ico",
@ -11,5 +11,6 @@ @@ -11,5 +11,6 @@
"start_url": ".",
"display": "standalone",
"theme_color": "#4ce1b6",
"background_color": "#ffffff"
"background_color": "#ffffff",
"gcm_sender_id": "103953800507"
}

23
src/components/Fields/TreeSelectField.jsx

@ -13,23 +13,6 @@ class TreeSelectField extends Component { @@ -13,23 +13,6 @@ class TreeSelectField extends Component {
}
}
componentWillMount() {
}
componentDidMount() {
}
componentWillReceiveProps(nextProps) {
}
componentWillUnmount() {
}
onChange = (value) => {
this.props.input.onChange(typeof value == 'undefined' ? null : value)
}
@ -44,7 +27,7 @@ class TreeSelectField extends Component { @@ -44,7 +27,7 @@ class TreeSelectField extends Component {
}
render() {
let {input, placeholder, value_field, hideIcon, multiple, tree, label, meta: { touched, error }} = this.props;
let {input, placeholder, treeNodeFilterProp, value_field, hideIcon, multiple, tree, label, meta: { touched, error }} = this.props;
return (
<div className="form__form-group tree-select-field">
@ -54,15 +37,13 @@ class TreeSelectField extends Component { @@ -54,15 +37,13 @@ class TreeSelectField extends Component {
<div style={{position: 'relative'}}>
<TreeSelect
showSearch
treeNodeFilterProp='title'
style={{ width: '100%' }}
value={input.value}
dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
placeholder={placeholder}
allowClear
onChange={this.onChange}
onSearch={(value) => {
}}
multiple={multiple}
>
{this.renderTree(tree)}

4
src/components/PermissionsField/components/Item/components/Actions/index.jsx

@ -61,7 +61,7 @@ class Actions extends Component { @@ -61,7 +61,7 @@ class Actions extends Component {
<Select.Option value={'create'}>Створення задач</Select.Option>,
<Select.Option value={'update'}>Редагування задач</Select.Option>,
<Select.Option value={'destroy'}>Видалення задач</Select.Option>,
<Select.Option value={'not_permission'}>Виключаючи права доступу</Select.Option>,
<Select.Option value={'not_permission'}>Виключити право доступу</Select.Option>,
]
}
@ -76,6 +76,8 @@ class Actions extends Component { @@ -76,6 +76,8 @@ class Actions extends Component {
value={value[name]}
className={!value[name] || !value[name].length ? 'error' : ""}
mode="multiple"
showSearch
allowClear
onChange={(value) => {
this.props.onChange(name, value)
}}

2
src/components/PermissionsField/components/Item/components/SubType/index.jsx

@ -90,6 +90,8 @@ class SubType extends Component { @@ -90,6 +90,8 @@ class SubType extends Component {
placeholder={lable}
defaultValue={value[name]}
value={value[name]}
showSearch
allowClear
onChange={(value) => {
this.props.onChange(name, value)
}}

2
src/components/TableGrid/CollumsView.jsx

@ -37,7 +37,7 @@ class CollumsView extends Component { @@ -37,7 +37,7 @@ class CollumsView extends Component {
trigger={['click']}
>
<Button>
Стовпчики таблиці
Налаштування таблиці
</Button>
</Dropdown>
);

7
src/components/TableGrid/TableGrig.jsx

@ -62,7 +62,8 @@ class TableGrid extends Component { @@ -62,7 +62,8 @@ class TableGrid extends Component {
defaultCollumsActive: defaultCollumsActive,
filter_value: {},
focusFilterKey: null,
collums_width
collums_width,
showFilter: true,
}
this.mouse = {};
}
@ -237,6 +238,7 @@ class TableGrid extends Component { @@ -237,6 +238,7 @@ class TableGrid extends Component {
filter_value,
collums_width,
focusFilterKey,
showFilter,
} = this.state;
let tmp_collums = columns.filter(item => defaultCollumsActive.indexOf(item.key) > -1).map(item => {
@ -347,7 +349,7 @@ class TableGrid extends Component { @@ -347,7 +349,7 @@ class TableGrid extends Component {
</div>}
<ReactDataGrid
columns={tmp_collums}
enableFilters
enableFilters={showFilter}
rows={data}
height={tableHeight || 500}
@ -415,6 +417,7 @@ class TableGrid extends Component { @@ -415,6 +417,7 @@ class TableGrid extends Component {
defaultCollumsActive={defaultCollumsActive}
columns={columns}
/>
<Button type={showFilter ? "primary" : "default"} onClick={() => this.setState({showFilter: !showFilter})}><i className="fal fa-search"></i></Button>
<Button type="primary" onClick={this.saveSettingsTable}><i className="fal fa-save"></i></Button>
</div>
</div>

18
src/components/TableGrid/style.scss

@ -30,16 +30,34 @@ @@ -30,16 +30,34 @@
color: rgba(0, 0, 0, 0.85);
}
}
.rdg-header-row:nth-child(1){
.rdg-cell{
border-top: 1px solid #ddd;
}
}
.rdg-header-row:nth-child(2){
.rdg-cell{
border-right: none;
}
}
.rdg-header-row{
.rdg-cell:last-child{
border-right: none;
}
}
.rdg-grid{
.rdg-cell{
border-right: none;
}
.fa-star{
color: #f6da6e;
cursor: pointer;
}
.row-selected{
background-color: #e6f7ff;
}
}
.rdg-row{
&:hover{

25
src/containers/App/App.jsx

@ -12,7 +12,18 @@ import store from './store'; @@ -12,7 +12,18 @@ import store from './store';
import ScrollToTop from './ScrollToTop';
import history from '../../lib/histoty';
import { Route, Switch } from 'react-router-dom';
import { messaging } from "../../init-fcm";
const registerPushListener = pushNotification =>
navigator.serviceWorker.addEventListener("message", ({data}) =>{
console.log("data", data)
if(data.firebaseMessaging && data.firebaseMessaging.payload && data.firebaseMessaging.payload.notification){
return pushNotification(data.firebaseMessaging.payload.notification.body)
}
}
);
class App extends Component {
@ -25,6 +36,20 @@ class App extends Component { @@ -25,6 +36,20 @@ class App extends Component {
};
}
componentDidMount(){
messaging.requestPermission()
.then(async function() {
const token = await messaging.getToken();
console.log("App -> componentDidMount -> token", token)
localStorage.setItem('desktop_token', token)
})
.catch(function(err) {
console.log("Unable to get permission to notify.", err);
});
registerPushListener();
}
render() {
return (
<Provider store={store}>

16
src/containers/App/actions.js

@ -4,8 +4,13 @@ import { getUsersNotification } from '../Layout/topbar/TopbarNotification/action @@ -4,8 +4,13 @@ import { getUsersNotification } from '../Layout/topbar/TopbarNotification/action
import histoty from '../../lib/histoty';
export function me() {
let desktop_token = '';
if(localStorage.getItem('desktop_token')){
desktop_token = localStorage.getItem('desktop_token');
}
return (dispatch) => {
return restClient.get('auth', 'me').then((result) => {
return restClient.get('auth', 'me', {desktop_token}).then((result) => {
dispatch({ type: 'GET_PROFILE', data: result });
dispatch(getUsersNotification())
return null;
@ -25,7 +30,14 @@ export function me() { @@ -25,7 +30,14 @@ export function me() {
export function logout() {
return (dispatch) => {
histoty.push('/');
return restClient.get('auth', 'logout').then((result) => {
let desktop_token = '';
if(localStorage.getItem('desktop_token')){
desktop_token = localStorage.getItem('desktop_token');
}
return restClient.get('auth', 'logout', {desktop_token}).then((result) => {
dispatch({type: 'LOGOUT'});
return;
}).catch(err => {

8
src/containers/Ips/components/Contexmenu/index.jsx

@ -168,7 +168,13 @@ class Contexmenu extends Component { @@ -168,7 +168,13 @@ class Contexmenu extends Component {
</Item>
: null}
{ selectedUserIds.length >= 1 ?
<Item key='delete'>
<Tooltip placement="bottom" title={mode != "vertical" ? ' Видалити' : null}>
<i className="fal fa-trash-alt"></i>{mode == "vertical" ? ' Видалити' : null}
</Tooltip>
</Item>
: null}
{/* {getPermissionCheck('user', 'update', profile) && selectedUserIds.length == 1 && log.user_id && log.user_id.is_ban ?
<Item key='notban'>

5
src/containers/Ips/components/Data/index.jsx

@ -158,7 +158,7 @@ class Data extends Component { @@ -158,7 +158,7 @@ class Data extends Component {
};
let clientHeight = document.body.clientHeight - 128 - 52 - 90;
let clientHeight = document.body.clientHeight - 128 - 52 - 120;
let collumsList = [
{title: 'Ip', key: 'ip'},
@ -183,8 +183,9 @@ class Data extends Component { @@ -183,8 +183,9 @@ class Data extends Component {
</Radio.Group>
<Button color="primary" size='sm' onClick={() => {
this.props.showModal(true);
}}><i className="fal fa-book"></i> Створити</Button>
}}><i className="fal fa-book" style={{marginRight: 5,}}></i> Створити</Button>
</div>
{ip_selected_ids.length ? <Contexmenu mode="horizontal" item={ip_selected_ids[0]} handleMenuClick={() => {} }/> : <div/>}
<div ref={this.myRef}>
<div><TableGrid
data_table={data}

4
src/containers/Ips/index.jsx

@ -6,6 +6,7 @@ import { getIps, showModal } from './actions'; @@ -6,6 +6,7 @@ import { getIps, showModal } from './actions';
import { Radio, Modal } from 'antd';
import histoty from '../../lib/histoty';
import Form from './components/Form';
import Contexmenu from './components/Contexmenu';
class Ips extends Component {
componentDidMount(){
@ -13,7 +14,7 @@ class Ips extends Component { @@ -13,7 +14,7 @@ class Ips extends Component {
}
render() {
const {profile, show_modal} = this.props;
const {profile, ip_selected_ids} = this.props;
if(profile.role != 'admin'){
histoty.push('/');
@ -40,6 +41,7 @@ class Ips extends Component { @@ -40,6 +41,7 @@ class Ips extends Component {
const mapStateToProps = (state, ownProps) => ({
profile: state.auth.profile,
show_modal: state.ips.show_modal,
ip_selected_ids: state.ips.ip_selected_ids,
})
const mapDispatchToProps = {

3
src/containers/Layout/sidebar/filter_task/index.jsx

@ -142,6 +142,9 @@ class FilterTask extends Component { @@ -142,6 +142,9 @@ class FilterTask extends Component {
name='date'
label='Задачі на дату'
component={DateField}
inputProps={{
allowClear: true
}}
/>
<Field
name='date_from'

1
src/containers/Layout/topbar/TopbarNotification/index.jsx

@ -60,6 +60,7 @@ class TopbarNotification extends PureComponent { @@ -60,6 +60,7 @@ class TopbarNotification extends PureComponent {
</div>
<div className="notification-items">
{notifications.map((notification, index) => {
avatar = `${process.env.PUBLIC_URL}/img/ava.png`;
if(notification.user_job && notification.user_job.avatar){
avatar = getImageThumb(config.apiUrl + notification.user_job.avatar, 'small')
}

4
src/containers/LogIn/actions.js

@ -7,6 +7,10 @@ export function login(data) { @@ -7,6 +7,10 @@ export function login(data) {
let remember_me = data.remember_me;
delete data.remember_me;
if(localStorage.getItem('desktop_token')){
data.desktop_token = localStorage.getItem('desktop_token')
}
return (dispatch) => {
return restClient.post('auth', 'login', data).then((result) => {

86
src/containers/Logs/components/Data/index.jsx

@ -116,10 +116,10 @@ class Data extends Component { @@ -116,10 +116,10 @@ class Data extends Component {
data = _.cloneDeep(data);
data = data.map(item => {
item.user_ban = item.user_id ? item.user_id.is_ban ? 'Заблоковано' : 'Не заблоковано' : 'Не визначено';
item.user_ban = item.user_id ? item.user_id.is_ban ? 'Активний' : 'Не заблоковано' : 'Не визначено';
let find_index = _.findIndex(ban_ip, ['ip', item.ip]);
item.ip_status = find_index > -1 ? ban_ip[find_index].type_ban == 'ban' ? 'Заблоковано' : 'В білому списку' : 'Не заблоковано';
item.ip_status = find_index > -1 ? ban_ip[find_index].type_ban == 'ban' ? 'Заблоковано' : 'В білому списку' : 'Активний';
item.date = moment(item.created_at).format('DD-MM-YY hh:mm:ss')
@ -198,14 +198,7 @@ class Data extends Component { @@ -198,14 +198,7 @@ class Data extends Component {
}
];
const components = {
body: {
row: (props) => (<Row {...props} popup={this.state.popup} setContentMenu={this.setContentMenu} contentMenu={this.state.contentMenu} setLogSelectedIds={this.props.setLogSelectedIds}/>),
cell: ({children}) => (<td>{children}</td>),
},
};
let clientHeight = document.body.clientHeight - 128 - 52 - 30;
let clientHeight = document.body.clientHeight - 128 - 52 - 80;
let collumsList = [
{title: '№', key: 'id'},
@ -220,66 +213,19 @@ class Data extends Component { @@ -220,66 +213,19 @@ class Data extends Component {
let defaultCollumsActive = ['id', 'name', 'ip', 'user_ban', 'ip_status', 'action', 'date'];
return <div><TableGrid
data_table={data}
columns={columns}
tableName={'log_users'}
tableHeight={clientHeight}
setSelectedIds={this.props.setLogSelectedIds}
selectedRowIds={log_selected_ids}
collumsList={collumsList}
contexMenu = {Contexmenu}
defaultCollumsActive={defaultCollumsActive}
/></div>;
return (
<div ref={this.myRef}>
<Table
dataSource={data}
// bordered
onChange={this.onChange}
className='table-task'
components={components}
loading={!is_load}
columns={columns}
onRow={(record, rowIndex) => {
return {
onClick: (event) => {
// this.props.setItemTask(record);
}, // click row
onDoubleClick: (event) => {
// this.props.setItemTask(record);
// this.props.showModalView(true);
// this.props.readUsersNotificationId(record.id)
// history.push('/profile/' + record.id)
}, // double click row
onContextMenu: (event) => {
let top = event.pageY;
let left = event.clientX;
this.setState({popup: {left, top}})
}, // right button click row
onMouseEnter: (event) => {}, // mouse enter row
onMouseLeave: (event) => {}, // mouse leave row
};
}}
// scroll={{ y: 415 }}
rowKey={(record) => record.id}
rowSelection={{
selectedRowKeys: log_selected_ids,
onChange: (selectedRowKeys, selectedRows) => {
this.props.setLogSelectedIds(selectedRows.map(item => item.id))
this.setState({selectedTaskIds: selectedRows.map(item => item.id)})
}
}}
// expandedRowRender={record => <View item={record}/>}
pagination={{
total: totalCount,
pageSize: 8,
}}
/>
</div>
)
return <div>
<TableGrid
data_table={data}
columns={columns}
tableName={'log_users'}
tableHeight={clientHeight}
setSelectedIds={this.props.setLogSelectedIds}
selectedRowIds={log_selected_ids}
collumsList={collumsList}
contexMenu = {Contexmenu}
defaultCollumsActive={defaultCollumsActive}
/>
</div>;
}
}

2
src/containers/Logs/index.jsx

@ -23,9 +23,9 @@ class Logs extends Component { @@ -23,9 +23,9 @@ class Logs extends Component {
<Container className="task">
<Row>
<Col md={12}>
{log_selected_ids.length ? <Contexmenu mode="horizontal" item={log_selected_ids[0]} handleMenuClick={() => {} }/> : <div/>}
<Card>
<CardBody>
{log_selected_ids.length ? <Contexmenu mode="horizontal" item={log_selected_ids[0]} handleMenuClick={() => {} }/> : <div/>}
<Data />
</CardBody>
</Card>

2
src/containers/Profile/components/Actions/index.jsx

@ -22,7 +22,7 @@ class Actions extends Component { @@ -22,7 +22,7 @@ class Actions extends Component {
<Card>
<CardBody className="profile__card">
<div>
Статус: <strong>{profile.is_ban ? "Заблокований" : "Не заблокований"}</strong>
Статус: <strong>{profile.is_ban ? "Заблокований" : "Активний"}</strong>
</div>
{profile.id == login_profile.id && <div>
Ваш IP: <strong>{(login_profile.ip || '').replace('::ffff:', '')}</strong>

2
src/containers/Profile/components/Avatar/index.jsx

@ -120,7 +120,7 @@ class Avatar extends Component { @@ -120,7 +120,7 @@ class Avatar extends Component {
<label>
{/* <div className="avatar-img" style={{backgroundImage: `url(${Ava+'?id=' + profile.id})`}}></div> */}
<div style={{width: 100, display: 'flex', justifyContent: 'center'}}>
<div style={{width: 100, display: 'flex'}}>
<img src={Ava+'?id=' + profile.id} alt="avatar" />
</div>
{isUpdate ? <input style={{display: 'none'}} name='image' type='file' onChange={this.onChange}/> : null}

12
src/containers/Task/components/Data/index.jsx

@ -126,7 +126,7 @@ class Data extends Component { @@ -126,7 +126,7 @@ class Data extends Component {
}
render() {
let {data, profile, users, is_load, filter, totalCount, user_permissions, task_selected_ids} = this.props;
let {data, profile, task_item, users, is_load, show_modal_view, filter, totalCount, user_permissions, task_selected_ids} = this.props;
let { sortedInfo } = this.state;
sortedInfo = sortedInfo || {};
let permissions = profile.permissions || {};
@ -287,12 +287,14 @@ class Data extends Component { @@ -287,12 +287,14 @@ class Data extends Component {
sortDirectionDefault="desc"
loading={!is_load}
rowClassName={(record) => {
let className = 'row-cursor ';
let end_date = moment(record.end_date);
let date = filter.date ? moment(filter.date) : moment().startOf('day');
if(task_selected_ids.indexOf(record.id) > -1 || (show_modal_view && task_item.id == record.id) ){
className += ' row-selected '
}
let end_date = moment(record.end_date, 'DD-MM-YYYY');
let date = filter.date ? moment(filter.date) : moment().startOf('day');
if(end_date < date && record.status == 'active'){
className += 'table-row-red';
} else if(record.status == 'deleted' || record.status == 'finished' ){
@ -406,6 +408,8 @@ Data.propTypes = { @@ -406,6 +408,8 @@ Data.propTypes = {
const mapStateToProps = (state, ownProps) => ({
is_load: state.task.is_load,
data: state.task.data,
show_modal_view: state.task.show_modal_view,
task_item: state.task.item,
filter: state.task.filter,
totalCount: state.task.totalCount,
user_notifications: state.user_notification.notifications,

4
src/containers/Task/components/Form/components/comments/components/item/index.jsx

@ -59,8 +59,7 @@ class Item extends Component { @@ -59,8 +59,7 @@ class Item extends Component {
return <div className="file-content">
<i style={{fontSize: '48px'}} className={this.getIconDocumentAWS({name: item.description})}></i>
<div>
<p>{item.description}</p>
<a target='_blank' href={config.apiUrl + item.url}>Звантажити</a>
<p style={{fontSize: 13, color: 'black'}}>{item.description}</p>
</div>
</div>
}
@ -96,6 +95,7 @@ class Item extends Component { @@ -96,6 +95,7 @@ class Item extends Component {
{(profile.id == item.user_created || profile.role == 'admin') && comment_type=='text' ? <a className="lnr lnr-pencil" href='javascript:;' onClick={() => {
this.setState({is_edit: true});
}}></a> : null}
{item.comment_type == 'file' && <a class="fal fa-download" target="_blank" href={config.apiUrl + item.url}></a>}
<span style={{padding: '2px'}}> </span>
{profile.id == item.user_created || profile.role == 'admin' ? <a className="lnr lnr-trash" href="javascript:;" onClick={() => {
this.props.deleteItem(item, index);

1
src/containers/Task/components/Form/components/comments/components/new/index.jsx

@ -100,6 +100,7 @@ class New extends Component { @@ -100,6 +100,7 @@ class New extends Component {
</textarea> */}
<TextareaAutosize
minRows={1}
maxRows={20}
onChange = {(e) => {
this.setState({description: e.target.value});
}}

1
src/containers/Task/index.js

@ -69,6 +69,7 @@ class Task extends Component { @@ -69,6 +69,7 @@ class Task extends Component {
componentWillUnmount() {
this.props.setTaskFilter({
status: 'active',
type: [],
date: moment().format('YYYY-MM-DD')
});
}

5
src/containers/User/components/DataUser/index.jsx

@ -79,14 +79,11 @@ class DataUser extends Component { @@ -79,14 +79,11 @@ class DataUser extends Component {
user.date_login_desktop_at_string = user.date_login_desktop_at ? moment(user.date_login_desktop_at).format('DD-MM-YYYY HH:mm:ss') : 'Ніколи';
user.is_ban_string = user.is_ban ? 'Активний' : 'Не заблоковано'
user.is_ban_string = user.is_ban ? 'Заблоковано' : 'Активний'
return {...user};
});
console.log("DataUser -> render -> tmp_users", tmp_users.length)
const columns = [
{
name: ' ',

3
src/index.jsx

@ -1,6 +1,9 @@ @@ -1,6 +1,9 @@
import React from 'react';
import { render } from 'react-dom';
import App from './containers/App/App';
import { registerServiceWorker } from "./register-sw";
registerServiceWorker();
render(
<App />,

20
src/init-fcm.js

@ -0,0 +1,20 @@ @@ -0,0 +1,20 @@
import * as firebase from "firebase/app";
import "firebase/messaging";
const initializedFirebaseApp = firebase.initializeApp({
apiKey: "AIzaSyCJtXpg5jFDtuEWy4f4dajX_NKHStZAtVQ",
authDomain: "my-tasks-98409.firebaseapp.com",
databaseURL: "https://my-tasks-98409.firebaseio.com",
projectId: "my-tasks-98409",
storageBucket: "my-tasks-98409.appspot.com",
messagingSenderId: "411418171487",
appId: "1:411418171487:web:fbbe0d70a1376f2d64e3ea"
});
const messaging = initializedFirebaseApp.messaging();
messaging.usePublicVapidKey(
"BLw2gqB1r_7egsu_wVZu9AiL_yfYP65dWWmdYN7hKZVpp9RcG2r4YqnREv9HJhkHdDtiWsHfycy3ZD-uxKWPwqs"
);
export { messaging };

14
src/register-sw.js

@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
const registerServiceWorker = () => {
if ("serviceWorker" in navigator) {
navigator.serviceWorker
.register("./firebase-messaging-sw.js")
.then(function(registration) {
console.log("Registration successful, scope is:", registration.scope);
})
.catch(function(err) {
console.log("Service worker registration failed, error:", err);
});
}
};
export { registerServiceWorker };

3
src/scss/component/topbar.scss

@ -115,11 +115,12 @@ @@ -115,11 +115,12 @@
}
.topbar__avatar-img {
border-radius: 50%;
// border-radius: 50%;
height: 36px;
width: 36px;
background-position: center;
background-size: contain;
overflow: hidden;
img{
height: 36px;
width: auto;

398
yarn.lock

@ -1137,6 +1137,244 @@ @@ -1137,6 +1137,244 @@
resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-0.8.2.tgz#576ff7fb1230185b619a75d258cbc98f0867a8dc"
integrity sha512-rLu3wcBWH4P5q1CGoSSH/i9hrXs7SlbRLkoq9IGuoPYNGQvDJ3pt/wmOM+XgYjIDRMVIdkUWt0RsfzF50JfnCw==
"@firebase/analytics-types@0.3.1":
version "0.3.1"
resolved "https://registry.yarnpkg.com/@firebase/analytics-types/-/analytics-types-0.3.1.tgz#3c5f5d71129c88295e17e914e34b391ffda1723c"
integrity sha512-63vVJ5NIBh/JF8l9LuPrQYSzFimk7zYHySQB4Dk9rVdJ8kV/vGQoVTvRu1UW05sEc2Ug5PqtEChtTHU+9hvPcA==
"@firebase/analytics@0.3.5":
version "0.3.5"
resolved "https://registry.yarnpkg.com/@firebase/analytics/-/analytics-0.3.5.tgz#f7327637281dd7c9cd74152e2f6b8cc64c1330dc"
integrity sha512-p+h1s9A8EjGWfjAObu8ei46JoN2Ogbtl1RzqW7HjcPuclOIOmPTXKEXXCEXgO79OLxnzzezVeBtHPSx6r6gxJA==
dependencies:
"@firebase/analytics-types" "0.3.1"
"@firebase/component" "0.1.12"
"@firebase/installations" "0.4.10"
"@firebase/logger" "0.2.4"
"@firebase/util" "0.2.47"
tslib "1.11.1"
"@firebase/app-types@0.6.1":
version "0.6.1"
resolved "https://registry.yarnpkg.com/@firebase/app-types/-/app-types-0.6.1.tgz#dcbd23030a71c0c74fc95d4a3f75ba81653850e9"
integrity sha512-L/ZnJRAq7F++utfuoTKX4CLBG5YR7tFO3PLzG1/oXXKEezJ0kRL3CMRoueBEmTCzVb/6SIs2Qlaw++uDgi5Xyg==
"@firebase/app@0.6.4":
version "0.6.4"
resolved "https://registry.yarnpkg.com/@firebase/app/-/app-0.6.4.tgz#5b857f2ba1cc286c88a3a7e1e6a1a7cc36308bee"
integrity sha512-E1Zw6yeZYdYYFurMnklKPvE+q/xleHXs7bmcVgyhgAEg3Gv6/qXI4+4GdWh+iF7wmQ3Liesh51xqfdpvHBwAMQ==
dependencies:
"@firebase/app-types" "0.6.1"
"@firebase/component" "0.1.12"
"@firebase/logger" "0.2.4"
"@firebase/util" "0.2.47"
dom-storage "2.1.0"
tslib "1.11.1"
xmlhttprequest "1.8.0"
"@firebase/auth-interop-types@0.1.5":
version "0.1.5"
resolved "https://registry.yarnpkg.com/@firebase/auth-interop-types/-/auth-interop-types-0.1.5.tgz#9fc9bd7c879f16b8d1bb08373a0f48c3a8b74557"
integrity sha512-88h74TMQ6wXChPA6h9Q3E1Jg6TkTHep2+k63OWg3s0ozyGVMeY+TTOti7PFPzq5RhszQPQOoCi59es4MaRvgCw==
"@firebase/auth-types@0.10.1":
version "0.10.1"
resolved "https://registry.yarnpkg.com/@firebase/auth-types/-/auth-types-0.10.1.tgz#7815e71c9c6f072034415524b29ca8f1d1770660"
integrity sha512-/+gBHb1O9x/YlG7inXfxff/6X3BPZt4zgBv4kql6HEmdzNQCodIRlEYnI+/da+lN+dha7PjaFH7C7ewMmfV7rw==
"@firebase/auth@0.14.6":
version "0.14.6"
resolved "https://registry.yarnpkg.com/@firebase/auth/-/auth-0.14.6.tgz#3d419d9b3553f17f94ceea1aaf2cecfdac26c778"
integrity sha512-7gaEUWhUubWBGfOXAZvpTpJqBJT9KyG83RXC6VnjSQIfNUaarHZ485WkzERil43A6KvIl+f4kHxfZShE6ZCK3A==
dependencies:
"@firebase/auth-types" "0.10.1"
"@firebase/component@0.1.12":
version "0.1.12"
resolved "https://registry.yarnpkg.com/@firebase/component/-/component-0.1.12.tgz#deb511c92c5c6f60995207312b7ede8c7076fdb2"
integrity sha512-03w800MxR/EW1m7N0Q46WNcngwdDIHDWpFPHTdbZEI6U/HuLks5RJQlBxWqb1P73nYPkN8YP3U8gTdqrDpqY3Q==
dependencies:
"@firebase/util" "0.2.47"
tslib "1.11.1"
"@firebase/database-types@0.5.1":
version "0.5.1"
resolved "https://registry.yarnpkg.com/@firebase/database-types/-/database-types-0.5.1.tgz#fab2f3fb48eec374a9f435ed21e138635cb9b71c"
integrity sha512-onQxom1ZBYBJ648w/VNRzUewovEDAH7lvnrrpCd69ukkyrMk6rGEO/PQ9BcNEbhlNtukpsqRS0oNOFlHs0FaSA==
dependencies:
"@firebase/app-types" "0.6.1"
"@firebase/database@0.6.3":
version "0.6.3"
resolved "https://registry.yarnpkg.com/@firebase/database/-/database-0.6.3.tgz#d85471938a0a9d9169f1f37f8f9d2dec7ef32f8b"
integrity sha512-gHoCISHQVLoq+rGu+PorYxMkhsjhXov3ocBxz/0uVdznNhrbKkAZaEKF+dIAsUPDlwSYeZuwWuik7xcV3DtRaw==
dependencies:
"@firebase/auth-interop-types" "0.1.5"
"@firebase/component" "0.1.12"
"@firebase/database-types" "0.5.1"
"@firebase/logger" "0.2.4"
"@firebase/util" "0.2.47"
faye-websocket "0.11.3"
tslib "1.11.1"
"@firebase/firestore-types@1.10.2":
version "1.10.2"
resolved "https://registry.yarnpkg.com/@firebase/firestore-types/-/firestore-types-1.10.2.tgz#b2286332c25dbe15becb9153ba3eedf7ab6c2a88"
integrity sha512-T1GttZezQ+gUpdDgLeLOvgS3KMeeIuodQ+JBBEd6M11zdilfTHsEHhmli15c6V3g/PfuFzyKDKExe05lPuYe4w==
"@firebase/firestore@1.14.5":
version "1.14.5"
resolved "https://registry.yarnpkg.com/@firebase/firestore/-/firestore-1.14.5.tgz#0d7526ab8bec3e45726daad3c7c34b6aa09a71e2"
integrity sha512-BZD3RqlAEnq15i8Y53VUFsuWkbujslGaQIcuEnt6bOENzlKiLBwESmt/uGKRIsdQjc1krG2qdoPmaSMqULR0dA==
dependencies:
"@firebase/component" "0.1.12"
"@firebase/firestore-types" "1.10.2"
"@firebase/logger" "0.2.4"
"@firebase/util" "0.2.47"
"@firebase/webchannel-wrapper" "0.2.41"
"@grpc/grpc-js" "0.8.1"
"@grpc/proto-loader" "^0.5.0"
tslib "1.11.1"
"@firebase/functions-types@0.3.17":
version "0.3.17"
resolved "https://registry.yarnpkg.com/@firebase/functions-types/-/functions-types-0.3.17.tgz#348bf5528b238eeeeeae1d52e8ca547b21d33a94"
integrity sha512-DGR4i3VI55KnYk4IxrIw7+VG7Q3gA65azHnZxo98Il8IvYLr2UTBlSh72dTLlDf25NW51HqvJgYJDKvSaAeyHQ==
"@firebase/functions@0.4.44":
version "0.4.44"
resolved "https://registry.yarnpkg.com/@firebase/functions/-/functions-0.4.44.tgz#a0f87a16be9916f930d7e9533b4befdf7640eec2"
integrity sha512-Nbw+V/jYqfgq7wscsSDidqIzx8TrnmA2wRD1auCFNmf+gSJg8o+gNyCDdNHZI407jvrZcxp3nG1eMbqwmmnp7Q==
dependencies:
"@firebase/component" "0.1.12"
"@firebase/functions-types" "0.3.17"
"@firebase/messaging-types" "0.4.5"
isomorphic-fetch "2.2.1"
tslib "1.11.1"
"@firebase/installations-types@0.3.4":
version "0.3.4"
resolved "https://registry.yarnpkg.com/@firebase/installations-types/-/installations-types-0.3.4.tgz#589a941d713f4f64bf9f4feb7f463505bab1afa2"
integrity sha512-RfePJFovmdIXb6rYwtngyxuEcWnOrzdZd9m7xAW0gRxDIjBT20n3BOhjpmgRWXo/DAxRmS7bRjWAyTHY9cqN7Q==
"@firebase/installations@0.4.10":
version "0.4.10"
resolved "https://registry.yarnpkg.com/@firebase/installations/-/installations-0.4.10.tgz#3686be433a176e6e2798b674486255e6749a0b8c"
integrity sha512-Nf7VK9++0eQzjdvBkBNNaOdxPjFiKD0EllLCIQycHozF97BmuFUqb2Ik5L2JaWspWg7vxLNacLHvW48nPGx4Zw==
dependencies:
"@firebase/component" "0.1.12"
"@firebase/installations-types" "0.3.4"
"@firebase/util" "0.2.47"
idb "3.0.2"
tslib "1.11.1"
"@firebase/logger@0.2.4":
version "0.2.4"
resolved "https://registry.yarnpkg.com/@firebase/logger/-/logger-0.2.4.tgz#276e7c482f462b5b24b188257cf162b3b2cd3ad6"
integrity sha512-akHkOU7izYB1okp/B5sxClGjjw6KvZdSHyjNM5pKd67Zg5W6PsbkI/GFNv21+y6LkUkJwDRbdeDgJoYXWT3mMA==
"@firebase/messaging-types@0.4.5":
version "0.4.5"
resolved "https://registry.yarnpkg.com/@firebase/messaging-types/-/messaging-types-0.4.5.tgz#452572d3c5b7fa83659fdb1884450477229f5dc4"
integrity sha512-sux4fgqr/0KyIxqzHlatI04Ajs5rc3WM+WmtCpxrKP1E5Bke8xu/0M+2oy4lK/sQ7nov9z15n3iltAHCgTRU3Q==
"@firebase/messaging@0.6.16":
version "0.6.16"
resolved "https://registry.yarnpkg.com/@firebase/messaging/-/messaging-0.6.16.tgz#72ee968c25de5d376b48556ef36b8fc69aba2316"
integrity sha512-TAPISK5y3xbxUw81HxLDP6YPsRryU6Nl8Z7AjNnem13BoN9LJ2/wCi9RDMfPnQhAn0h0N+mpxy/GB+0IlEARlg==
dependencies:
"@firebase/component" "0.1.12"
"@firebase/installations" "0.4.10"
"@firebase/messaging-types" "0.4.5"
"@firebase/util" "0.2.47"
idb "3.0.2"
tslib "1.11.1"
"@firebase/performance-types@0.0.13":
version "0.0.13"
resolved "https://registry.yarnpkg.com/@firebase/performance-types/-/performance-types-0.0.13.tgz#58ce5453f57e34b18186f74ef11550dfc558ede6"
integrity sha512-6fZfIGjQpwo9S5OzMpPyqgYAUZcFzZxHFqOyNtorDIgNXq33nlldTL/vtaUZA8iT9TT5cJlCrF/jthKU7X21EA==
"@firebase/performance@0.3.4":
version "0.3.4"
resolved "https://registry.yarnpkg.com/@firebase/performance/-/performance-0.3.4.tgz#d2e4f33c3ddc35dd090ba86da4dc6087b083d996"
integrity sha512-VDoqJSB+2RuXlyyP7oSvBPEmoznG84HmEtb8DQWsAHeVkf+qlec1OTZR8IjktlIv+8Pg8MMuYoB0crx5g7xU5A==
dependencies:
"@firebase/component" "0.1.12"
"@firebase/installations" "0.4.10"
"@firebase/logger" "0.2.4"
"@firebase/performance-types" "0.0.13"
"@firebase/util" "0.2.47"
tslib "1.11.1"
"@firebase/polyfill@0.3.36":
version "0.3.36"
resolved "https://registry.yarnpkg.com/@firebase/polyfill/-/polyfill-0.3.36.tgz#c057cce6748170f36966b555749472b25efdb145"
integrity sha512-zMM9oSJgY6cT2jx3Ce9LYqb0eIpDE52meIzd/oe/y70F+v9u1LDqk5kUF5mf16zovGBWMNFmgzlsh6Wj0OsFtg==
dependencies:
core-js "3.6.5"
promise-polyfill "8.1.3"
whatwg-fetch "2.0.4"
"@firebase/remote-config-types@0.1.9":
version "0.1.9"
resolved "https://registry.yarnpkg.com/@firebase/remote-config-types/-/remote-config-types-0.1.9.tgz#fe6bbe4d08f3b6e92fce30e4b7a9f4d6a96d6965"
integrity sha512-G96qnF3RYGbZsTRut7NBX0sxyczxt1uyCgXQuH/eAfUCngxjEGcZQnBdy6mvSdqdJh5mC31rWPO4v9/s7HwtzA==
"@firebase/remote-config@0.1.21":
version "0.1.21"
resolved "https://registry.yarnpkg.com/@firebase/remote-config/-/remote-config-0.1.21.tgz#72261a53a7564453f484278e14ba39d81da99833"
integrity sha512-EwDNU1mT+8Jn66IUwwNP5SM8AbaI7wmCXjp7djZtTXNrpPoh3xqzSRM1vTgp4Uu/mHffEDfbydsoJAIftADIfQ==
dependencies:
"@firebase/component" "0.1.12"
"@firebase/installations" "0.4.10"
"@firebase/logger" "0.2.4"
"@firebase/remote-config-types" "0.1.9"
"@firebase/util" "0.2.47"
tslib "1.11.1"
"@firebase/storage-types@0.3.12":
version "0.3.12"
resolved "https://registry.yarnpkg.com/@firebase/storage-types/-/storage-types-0.3.12.tgz#79540761fb3ad8d674c98712633284d81b268e0f"
integrity sha512-DDV6Fs6aYoGw3w/zZZTkqiipxihnsvHf6znbeZYjIIHit3tr1uLJdGPDPiCTfZcTGPpg2ux6ZmvNDvVgJdHALw==
"@firebase/storage@0.3.34":
version "0.3.34"
resolved "https://registry.yarnpkg.com/@firebase/storage/-/storage-0.3.34.tgz#410ac7988f49259572e0e15c600548982ec5e904"
integrity sha512-vuR1PpGdaCk25D2dT2trfmZZjpdfOn0rPTksvoqg7TAPLeoVsVoDyT2LgF3Arna/jqx52sAIRx1HLrlvzE1pgA==
dependencies:
"@firebase/component" "0.1.12"
"@firebase/storage-types" "0.3.12"
"@firebase/util" "0.2.47"
tslib "1.11.1"
"@firebase/util@0.2.47":
version "0.2.47"
resolved "https://registry.yarnpkg.com/@firebase/util/-/util-0.2.47.tgz#c5e02bbba7aa0786f29cc516b2e2ee17e0c1f4a4"
integrity sha512-RjcIvcfswyxYhf0OMXod+qeI/933wl9FGLIszf0/O1yMZ/s8moXcse7xnOpMjmQPRLB9vHzCMoxW5X90kKg/bQ==
dependencies:
tslib "1.11.1"
"@firebase/webchannel-wrapper@0.2.41":
version "0.2.41"
resolved "https://registry.yarnpkg.com/@firebase/webchannel-wrapper/-/webchannel-wrapper-0.2.41.tgz#4e470c25a99fa0b1f629f1c5ef180a318d399fd0"
integrity sha512-XcdMT5PSZHiuf7LJIhzKIe+RyYa25S3LHRRvLnZc6iFjwXkrSDJ8J/HWO6VT8d2ZTbawp3VcLEjRF/VN8glCrA==
"@grpc/grpc-js@0.8.1":
version "0.8.1"
resolved "https://registry.yarnpkg.com/@grpc/grpc-js/-/grpc-js-0.8.1.tgz#3003a422577da39e7113566f2fdd4872f31e6090"
integrity sha512-e8gSjRZnOUefsR3obOgxG9RtYW2Mw83hh7ogE2ByCdgRhoX0mdnJwBcZOami3E0l643KCTZvORFwfSEi48KFIQ==
dependencies:
semver "^6.2.0"
"@grpc/proto-loader@^0.5.0":
version "0.5.4"
resolved "https://registry.yarnpkg.com/@grpc/proto-loader/-/proto-loader-0.5.4.tgz#038a3820540f621eeb1b05d81fbedfb045e14de0"
integrity sha512-HTM4QpI9B2XFkPz7pjwMyMgZchJ93TVkL3kWPW8GDMDKYxsMnmf4w2TNMJK7+KNiYHS5cJrCEAFlF+AwtXWVPA==
dependencies:
lodash.camelcase "^4.3.0"
protobufjs "^6.8.6"
"@hapi/address@2.x.x":
version "2.1.4"
resolved "https://registry.yarnpkg.com/@hapi/address/-/address-2.1.4.tgz#5d67ed43f3fd41a69d4b9ff7b56e7c0d1d0a81e5"
@ -1410,6 +1648,59 @@ @@ -1410,6 +1648,59 @@
resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b"
integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==
"@protobufjs/aspromise@^1.1.1", "@protobufjs/aspromise@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@protobufjs/aspromise/-/aspromise-1.1.2.tgz#9b8b0cc663d669a7d8f6f5d0893a14d348f30fbf"
integrity sha1-m4sMxmPWaafY9vXQiToU00jzD78=
"@protobufjs/base64@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@protobufjs/base64/-/base64-1.1.2.tgz#4c85730e59b9a1f1f349047dbf24296034bb2735"
integrity sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==
"@protobufjs/codegen@^2.0.4":
version "2.0.4"
resolved "https://registry.yarnpkg.com/@protobufjs/codegen/-/codegen-2.0.4.tgz#7ef37f0d010fb028ad1ad59722e506d9262815cb"
integrity sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==
"@protobufjs/eventemitter@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz#355cbc98bafad5978f9ed095f397621f1d066b70"
integrity sha1-NVy8mLr61ZePntCV85diHx0Ga3A=
"@protobufjs/fetch@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@protobufjs/fetch/-/fetch-1.1.0.tgz#ba99fb598614af65700c1619ff06d454b0d84c45"
integrity sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=
dependencies:
"@protobufjs/aspromise" "^1.1.1"
"@protobufjs/inquire" "^1.1.0"
"@protobufjs/float@^1.0.2":
version "1.0.2"
resolved "https://registry.yarnpkg.com/@protobufjs/float/-/float-1.0.2.tgz#5e9e1abdcb73fc0a7cb8b291df78c8cbd97b87d1"
integrity sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E=
"@protobufjs/inquire@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@protobufjs/inquire/-/inquire-1.1.0.tgz#ff200e3e7cf2429e2dcafc1140828e8cc638f089"
integrity sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik=
"@protobufjs/path@^1.1.2":
version "1.1.2"
resolved "https://registry.yarnpkg.com/@protobufjs/path/-/path-1.1.2.tgz#6cc2b20c5c9ad6ad0dccfd21ca7673d8d7fbf68d"
integrity sha1-bMKyDFya1q0NzP0hynZz2Nf79o0=
"@protobufjs/pool@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@protobufjs/pool/-/pool-1.1.0.tgz#09fd15f2d6d3abfa9b65bc366506d6ad7846ff54"
integrity sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q=
"@protobufjs/utf8@^1.1.0":
version "1.1.0"
resolved "https://registry.yarnpkg.com/@protobufjs/utf8/-/utf8-1.1.0.tgz#a777360b5b39a1a2e5106f8e858f2fd2d060c570"
integrity sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA=
"@svgr/babel-plugin-add-jsx-attribute@^4.2.0":
version "4.2.0"
resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz#dadcb6218503532d6884b210e7f3c502caaa44b1"
@ -1588,6 +1879,11 @@ @@ -1588,6 +1879,11 @@
"@types/istanbul-lib-coverage" "*"
"@types/istanbul-lib-report" "*"
"@types/long@^4.0.1":
version "4.0.1"
resolved "https://registry.yarnpkg.com/@types/long/-/long-4.0.1.tgz#459c65fa1867dafe6a8f322c4c51695663cc55e9"
integrity sha512-5tXH6Bx/kNGd3MgffdmP4dy2Z+G4eaXw0SE81Tq3BNadtnMR5/ySMzX4SLEzHJzSmPNn4HIdpQsBvXMUykr58w==
"@types/minimatch@*":
version "3.0.3"
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d"
@ -1598,6 +1894,11 @@ @@ -1598,6 +1894,11 @@
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.0.tgz#5b6ee7a77faacddd7de719017d0bc12f52f81589"
integrity sha512-0ARSQootUG1RljH2HncpsY2TJBfGQIKOOi7kxzUY6z54ePu/ZD+wJA8zI2Q6v8rol2qpG/rvqsReco8zNMPvhQ==
"@types/node@^13.7.0":
version "13.13.9"
resolved "https://registry.yarnpkg.com/@types/node/-/node-13.13.9.tgz#79df4ae965fb76d31943b54a6419599307a21394"
integrity sha512-EPZBIGed5gNnfWCiwEIwTE2Jdg4813odnG8iNPMQGrqVxrI+wL68SPtPeCX+ZxGBaA6pKAVc6jaKgP/Q0QzfdQ==
"@types/parse-json@^4.0.0":
version "4.0.0"
resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0"
@ -3582,6 +3883,11 @@ core-js@2.6.4: @@ -3582,6 +3883,11 @@ core-js@2.6.4:
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.4.tgz#b8897c062c4d769dd30a0ac5c73976c47f92ea0d"
integrity sha512-05qQ5hXShcqGkPZpXEFLIpxayZscVD2kuMBZewxiIPPEagukO4mqgPA9CWhUvFBJfy3ODdK2p9xyHh7FTU9/7A==
core-js@3.6.5:
version "3.6.5"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a"
integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==
core-js@^1.0.0:
version "1.2.7"
resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
@ -4411,6 +4717,11 @@ dom-serializer@0: @@ -4411,6 +4717,11 @@ dom-serializer@0:
domelementtype "^2.0.1"
entities "^2.0.0"
dom-storage@2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/dom-storage/-/dom-storage-2.1.0.tgz#00fb868bc9201357ea243c7bcfd3304c1e34ea39"
integrity sha512-g6RpyWXzl0RR6OTElHKBl7nwnK87GUyZMYC7JWsB/IA73vpqK2K6LT39x4VepLxlSsWBFrPVLnsSR5Jyty0+2Q==
dom-walk@^0.1.0:
version "0.1.1"
resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018"
@ -5170,6 +5481,13 @@ fault@^1.0.2: @@ -5170,6 +5481,13 @@ fault@^1.0.2:
dependencies:
format "^0.2.0"
faye-websocket@0.11.3, faye-websocket@~0.11.1:
version "0.11.3"
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e"
integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==
dependencies:
websocket-driver ">=0.5.1"
faye-websocket@^0.10.0:
version "0.10.0"
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4"
@ -5177,13 +5495,6 @@ faye-websocket@^0.10.0: @@ -5177,13 +5495,6 @@ faye-websocket@^0.10.0:
dependencies:
websocket-driver ">=0.5.1"
faye-websocket@~0.11.1:
version "0.11.3"
resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.3.tgz#5c0e9a8968e8912c286639fde977a8b209f2508e"
integrity sha512-D2y4bovYpzziGgbHYtGCMjlJM36vAl/y+xUyn1C+FVx8szd1E+86KwVw6XvYSzOP8iMpm1X0I4xJD+QtUb36OA==
dependencies:
websocket-driver ">=0.5.1"
fb-watchman@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85"
@ -5321,6 +5632,26 @@ find-up@^2.0.0, find-up@^2.1.0: @@ -5321,6 +5632,26 @@ find-up@^2.0.0, find-up@^2.1.0:
dependencies:
locate-path "^2.0.0"
firebase@^7.14.5:
version "7.14.5"
resolved "https://registry.yarnpkg.com/firebase/-/firebase-7.14.5.tgz#cf1be9c7f0603c6c2f45f65c7d817f6b22114a4b"
integrity sha512-1vrC1UZIVhaT7owaElQoEseP81xqRt6tHQmxRJRojn0yI3JNXrdWCFsD+26xA1eQQCwodJuMsYJLzQSScgjHuQ==
dependencies:
"@firebase/analytics" "0.3.5"
"@firebase/app" "0.6.4"
"@firebase/app-types" "0.6.1"
"@firebase/auth" "0.14.6"
"@firebase/database" "0.6.3"
"@firebase/firestore" "1.14.5"
"@firebase/functions" "0.4.44"
"@firebase/installations" "0.4.10"
"@firebase/messaging" "0.6.16"
"@firebase/performance" "0.3.4"
"@firebase/polyfill" "0.3.36"
"@firebase/remote-config" "0.1.21"
"@firebase/storage" "0.3.34"
"@firebase/util" "0.2.47"
flat-cache@^2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0"
@ -6088,6 +6419,11 @@ icss-utils@^4.1.0: @@ -6088,6 +6419,11 @@ icss-utils@^4.1.0:
dependencies:
postcss "^7.0.14"
idb@3.0.2:
version "3.0.2"
resolved "https://registry.yarnpkg.com/idb/-/idb-3.0.2.tgz#c8e9122d5ddd40f13b60ae665e4862f8b13fa384"
integrity sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==
identity-obj-proxy@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14"
@ -6684,7 +7020,7 @@ isobject@^3.0.0, isobject@^3.0.1: @@ -6684,7 +7020,7 @@ isobject@^3.0.0, isobject@^3.0.1:
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8=
isomorphic-fetch@^2.1.1:
isomorphic-fetch@2.2.1, isomorphic-fetch@^2.1.1:
version "2.2.1"
resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk=
@ -7541,6 +7877,11 @@ lodash._reinterpolate@^3.0.0: @@ -7541,6 +7877,11 @@ lodash._reinterpolate@^3.0.0:
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=
lodash.camelcase@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
integrity sha1-soqmKIorn8ZRA1x3EfZathkDMaY=
lodash.debounce@^4.0.0, lodash.debounce@^4.0.8:
version "4.0.8"
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
@ -7621,6 +7962,11 @@ loglevel@^1.6.6: @@ -7621,6 +7962,11 @@ loglevel@^1.6.6:
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.7.tgz#b3e034233188c68b889f5b862415306f565e2c56"
integrity sha512-cY2eLFrQSAfVPhCgH1s7JI73tMbg9YC3v3+ZHVW67sBS7UxWzNEk/ZBbSfLykBWHp33dqqtOv82gjhKEi81T/A==
long@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
@ -9608,6 +9954,11 @@ promise-inflight@^1.0.1: @@ -9608,6 +9954,11 @@ promise-inflight@^1.0.1:
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
promise-polyfill@8.1.3:
version "8.1.3"
resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.3.tgz#8c99b3cf53f3a91c68226ffde7bde81d7f904116"
integrity sha512-MG5r82wBzh7pSKDRa9y+vllNHz3e3d4CNj1PQE4BQYxLme0gKYYBm9YENq+UkEikyZ0XbiGWxYlVw3Rl9O/U8g==
promise@8.0.2:
version "8.0.2"
resolved "https://registry.yarnpkg.com/promise/-/promise-8.0.2.tgz#9dcd0672192c589477d56891271bdc27547ae9f0"
@ -9654,6 +10005,25 @@ property-information@^5.0.0: @@ -9654,6 +10005,25 @@ property-information@^5.0.0:
dependencies:
xtend "^4.0.0"
protobufjs@^6.8.6:
version "6.9.0"
resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-6.9.0.tgz#c08b2bf636682598e6fabbf0edb0b1256ff090bd"
integrity sha512-LlGVfEWDXoI/STstRDdZZKb/qusoAWUnmLg9R8OLSO473mBLWHowx8clbX5/+mKDEI+v7GzjoK9tRPZMMcoTrg==
dependencies:
"@protobufjs/aspromise" "^1.1.2"
"@protobufjs/base64" "^1.1.2"
"@protobufjs/codegen" "^2.0.4"
"@protobufjs/eventemitter" "^1.1.0"
"@protobufjs/fetch" "^1.1.0"
"@protobufjs/float" "^1.0.2"
"@protobufjs/inquire" "^1.1.0"
"@protobufjs/path" "^1.1.2"
"@protobufjs/pool" "^1.1.0"
"@protobufjs/utf8" "^1.1.0"
"@types/long" "^4.0.1"
"@types/node" "^13.7.0"
long "^4.0.0"
proxy-addr@~2.0.5:
version "2.0.6"
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf"
@ -12527,7 +12897,7 @@ ts-pnp@^1.1.6: @@ -12527,7 +12897,7 @@ ts-pnp@^1.1.6:
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.6.tgz#389a24396d425a0d3162e96d2b4638900fdc289a"
integrity sha512-CrG5GqAAzMT7144Cl+UIFP7mz/iIhiy+xQ6GGcnjTezhALT02uPMRw7tgDSESgB5MsfKt55+GPWw4ir1kVtMIQ==
tslib@^1.10.0, tslib@^1.9.0:
tslib@1.11.1, tslib@^1.10.0, tslib@^1.9.0:
version "1.11.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==
@ -12987,6 +13357,11 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: @@ -12987,6 +13357,11 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3:
dependencies:
iconv-lite "0.4.24"
whatwg-fetch@2.0.4:
version "2.0.4"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.4.tgz#dde6a5df315f9d39991aa17621853d720b85566f"
integrity sha512-dcQ1GWpOD/eEQ97k66aiEVpNnapVj90/+R+SXTPYGHpYBBypfKJEQjLrvMZ7YXbKm21gXd4NcuxUTjiv1YtLng==
whatwg-fetch@3.0.0, whatwg-fetch@>=0.10.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
@ -13268,6 +13643,11 @@ xmlhttprequest-ssl@~1.5.4: @@ -13268,6 +13643,11 @@ xmlhttprequest-ssl@~1.5.4:
resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e"
integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4=
xmlhttprequest@1.8.0:
version "1.8.0"
resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc"
integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=
xregexp@^4.3.0:
version "4.3.0"
resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50"

Loading…
Cancel
Save