2020-01-16 19:52:45 +05:00
|
|
|
import React, {Component} from 'react';
|
|
|
|
|
import {DeviceEventEmitter} from 'react-native';
|
|
|
|
|
import ActionSheet from '../ActionSheet';
|
2020-01-18 01:04:33 +05:00
|
|
|
import {ActionSheetComponent} from '../ActionSheetComponent';
|
2020-01-17 11:49:31 +05:00
|
|
|
import {Dialog} from '../Dialog';
|
2020-01-17 21:05:38 +05:00
|
|
|
import {VaultDialog} from '../VaultDialog';
|
2020-01-18 11:41:42 +05:00
|
|
|
|
|
|
|
|
export const dialogActions = {
|
|
|
|
|
ACTION_DELETE: 511,
|
|
|
|
|
ACTION_EXIT: 512,
|
|
|
|
|
ACTION_EMPTY_TRASH: 513,
|
|
|
|
|
};
|
|
|
|
|
|
2020-01-16 19:52:45 +05:00
|
|
|
export const ActionSheetEvent = (item, colors, tags, rowItems, columnItems) => {
|
|
|
|
|
DeviceEventEmitter.emit('ActionSheetEvent', {
|
|
|
|
|
item,
|
|
|
|
|
colors,
|
|
|
|
|
tags,
|
|
|
|
|
rowItems,
|
|
|
|
|
columnItems,
|
|
|
|
|
});
|
|
|
|
|
};
|
|
|
|
|
export const ActionSheetHideEvent = () => {
|
|
|
|
|
DeviceEventEmitter.emit('ActionSheetHideEvent');
|
|
|
|
|
};
|
|
|
|
|
|
2020-01-17 11:49:31 +05:00
|
|
|
export const simpleDialogEvent = data => {
|
|
|
|
|
DeviceEventEmitter.emit('simpleDialogEvent', data);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const simpleDialogHideEvent = () => {
|
|
|
|
|
DeviceEventEmitter.emit('simpleDialogHideEvent');
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const updateEvent = data => {
|
|
|
|
|
DeviceEventEmitter.emit('updateEvent', data);
|
|
|
|
|
};
|
|
|
|
|
|
2020-01-16 19:52:45 +05:00
|
|
|
export const _recieveEvent = (eventName, action) => {
|
|
|
|
|
DeviceEventEmitter.addListener(eventName, action);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const _unSubscribeEvent = (eventName, action) => {
|
|
|
|
|
DeviceEventEmitter.removeListener(eventName, action);
|
|
|
|
|
};
|
|
|
|
|
|
2020-01-17 11:49:31 +05:00
|
|
|
export const TEMPLATE_DELETE = type => {
|
|
|
|
|
return {
|
|
|
|
|
title: `Delete ${type}`,
|
|
|
|
|
paragraph: `Are you sure you want to delete this ${type}`,
|
|
|
|
|
positiveText: 'Delete',
|
|
|
|
|
negativeText: 'Cancel',
|
|
|
|
|
action: dialogActions.ACTION_DELETE,
|
|
|
|
|
icon: 'trash',
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2020-01-17 21:05:38 +05:00
|
|
|
export const TEMPLATE_EXIT = type => {
|
|
|
|
|
return {
|
|
|
|
|
title: `Close ${type}`,
|
|
|
|
|
paragraph: `Are you sure you want to close ${type}`,
|
|
|
|
|
positiveText: `Close`,
|
|
|
|
|
negativeText: 'Cancel',
|
|
|
|
|
action: dialogActions.ACTION_EXIT,
|
|
|
|
|
icon: 'x',
|
|
|
|
|
};
|
|
|
|
|
};
|
|
|
|
|
|
2020-01-18 00:46:29 +05:00
|
|
|
export const TEMPLATE_EMPTY_TRASH = {
|
|
|
|
|
title: 'Empty Trash',
|
|
|
|
|
paragraph: 'Are you sure you want to clear the trash?',
|
|
|
|
|
icon: 'trash',
|
|
|
|
|
positiveText: 'Clear',
|
|
|
|
|
negativeText: 'Cancel',
|
|
|
|
|
action: dialogActions.ACTION_EMPTY_TRASH,
|
|
|
|
|
};
|
|
|
|
|
|
2020-01-16 19:52:45 +05:00
|
|
|
export class DialogManager extends Component {
|
|
|
|
|
constructor(props) {
|
|
|
|
|
super(props);
|
|
|
|
|
this.actionSheet;
|
2020-01-17 21:05:38 +05:00
|
|
|
this.opened = false;
|
2020-01-16 19:52:45 +05:00
|
|
|
this.state = {
|
|
|
|
|
item: {},
|
|
|
|
|
actionSheetData: {
|
|
|
|
|
colors: false,
|
|
|
|
|
tags: false,
|
|
|
|
|
rowItems: [],
|
|
|
|
|
columnItems: [],
|
|
|
|
|
},
|
2020-01-17 11:49:31 +05:00
|
|
|
simpleDialog: {
|
|
|
|
|
title: '',
|
|
|
|
|
paragraph: '',
|
|
|
|
|
positiveText: '',
|
|
|
|
|
negativeText: '',
|
|
|
|
|
action: 0,
|
|
|
|
|
icon: '',
|
|
|
|
|
},
|
2020-01-17 21:05:38 +05:00
|
|
|
isPerm: false,
|
2020-01-16 19:52:45 +05:00
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-17 21:05:38 +05:00
|
|
|
shouldComponentUpdate(nextProps, nextState) {
|
|
|
|
|
return (
|
|
|
|
|
JSON.stringify(nextProps) !== JSON.stringify(this.props) ||
|
|
|
|
|
nextState !== this.state
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2020-01-16 19:52:45 +05:00
|
|
|
_showActionSheet = data => {
|
|
|
|
|
this.setState(
|
|
|
|
|
{
|
|
|
|
|
actionSheetData: data,
|
|
|
|
|
item: data.item,
|
|
|
|
|
},
|
|
|
|
|
() => {
|
|
|
|
|
this.actionSheet._setModalVisible();
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
_hideActionSheet = () => {
|
|
|
|
|
this.actionSheet._setModalVisible();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
componentDidMount() {
|
|
|
|
|
_recieveEvent('ActionSheetEvent', this._showActionSheet);
|
|
|
|
|
_recieveEvent('ActionSheetHideEvent', this._hideActionSheet);
|
2020-01-17 11:49:31 +05:00
|
|
|
|
|
|
|
|
_recieveEvent('simpleDialogEvent', this._showSimpleDialog);
|
|
|
|
|
_recieveEvent('simpleDialogHideEvent', this._hideActionSheet);
|
2020-01-16 19:52:45 +05:00
|
|
|
}
|
|
|
|
|
componentWillUnmount() {
|
|
|
|
|
_unSubscribeEvent('ActionSheetEvent', this._showActionSheet);
|
2020-01-17 11:49:31 +05:00
|
|
|
_unSubscribeEvent('ActionSheetHideEvent', this._hideSimpleDialog);
|
|
|
|
|
|
|
|
|
|
_unSubscribeEvent('simpleDialogEvent', this._showSimpleDialog);
|
|
|
|
|
_unSubscribeEvent('simpleDialogHideEvent', this._hideSimpleDialog);
|
2020-01-16 19:52:45 +05:00
|
|
|
}
|
|
|
|
|
|
2020-01-17 11:49:31 +05:00
|
|
|
_showSimpleDialog = data => {
|
|
|
|
|
this.setState(
|
|
|
|
|
{
|
|
|
|
|
simpleDialog: data,
|
|
|
|
|
},
|
|
|
|
|
() => {
|
|
|
|
|
this.simpleDialog.show();
|
|
|
|
|
},
|
|
|
|
|
);
|
|
|
|
|
};
|
|
|
|
|
_hideSimpleDialog = data => {
|
|
|
|
|
this.simpleDialog.hide();
|
|
|
|
|
};
|
|
|
|
|
|
2020-01-17 21:05:38 +05:00
|
|
|
_showVaultDialog = () => {
|
|
|
|
|
this.vaultDialogRef.open();
|
|
|
|
|
};
|
|
|
|
|
_hideVaultDialog = () => {
|
|
|
|
|
this.vaultDialogRef.close();
|
|
|
|
|
};
|
|
|
|
|
|
2020-01-17 11:49:31 +05:00
|
|
|
onActionSheetHide = () => {
|
|
|
|
|
if (this.show) {
|
|
|
|
|
if (this.show === 'delete') {
|
|
|
|
|
this._showSimpleDialog(TEMPLATE_DELETE(this.state.item.type));
|
|
|
|
|
|
|
|
|
|
this.show = null;
|
|
|
|
|
} else if (this.show == 'lock') {
|
2020-01-17 21:05:38 +05:00
|
|
|
this._showVaultDialog();
|
2020-01-17 11:49:31 +05:00
|
|
|
this.show = null;
|
|
|
|
|
} else if (this.show == 'unlock') {
|
|
|
|
|
this.setState({
|
|
|
|
|
isPerm: true,
|
|
|
|
|
});
|
2020-01-17 21:05:38 +05:00
|
|
|
this._showVaultDialog();
|
2020-01-17 11:49:31 +05:00
|
|
|
this.show = null;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
this.show = null;
|
|
|
|
|
};
|
|
|
|
|
|
2020-01-16 19:52:45 +05:00
|
|
|
render() {
|
2020-01-17 21:05:38 +05:00
|
|
|
let {colors} = this.props;
|
|
|
|
|
let {
|
|
|
|
|
actionSheetData,
|
|
|
|
|
item,
|
|
|
|
|
simpleDialog,
|
|
|
|
|
isPerm,
|
|
|
|
|
vaultDialog,
|
|
|
|
|
unlock,
|
|
|
|
|
} = this.state;
|
2020-01-16 19:52:45 +05:00
|
|
|
return (
|
|
|
|
|
<>
|
|
|
|
|
<ActionSheet
|
|
|
|
|
ref={ref => (this.actionSheet = ref)}
|
|
|
|
|
customStyles={{
|
|
|
|
|
backgroundColor: colors.bg,
|
|
|
|
|
}}
|
|
|
|
|
indicatorColor={colors.shade}
|
|
|
|
|
initialOffsetFromBottom={0.5}
|
|
|
|
|
bounceOnOpen={true}
|
|
|
|
|
gestureEnabled={true}
|
|
|
|
|
onClose={() => {
|
2020-01-17 11:49:31 +05:00
|
|
|
this.onActionSheetHide();
|
2020-01-16 19:52:45 +05:00
|
|
|
}}>
|
|
|
|
|
<ActionSheetComponent
|
|
|
|
|
item={item}
|
|
|
|
|
setWillRefresh={value => {
|
|
|
|
|
this.willRefresh = true;
|
|
|
|
|
}}
|
|
|
|
|
hasColors={actionSheetData.colors}
|
|
|
|
|
hasTags={actionSheetData.colors}
|
|
|
|
|
overlayColor={
|
|
|
|
|
colors.night ? 'rgba(225,225,225,0.1)' : 'rgba(0,0,0,0.3)'
|
|
|
|
|
}
|
|
|
|
|
rowItems={actionSheetData.rowItems}
|
|
|
|
|
columnItems={actionSheetData.columnItems}
|
|
|
|
|
close={value => {
|
|
|
|
|
if (value) {
|
|
|
|
|
this.show = value;
|
|
|
|
|
}
|
|
|
|
|
this.actionSheet._setModalVisible();
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
</ActionSheet>
|
2020-01-17 11:49:31 +05:00
|
|
|
|
|
|
|
|
<Dialog
|
|
|
|
|
ref={ref => (this.simpleDialog = ref)}
|
|
|
|
|
item={item}
|
|
|
|
|
colors={colors}
|
|
|
|
|
template={simpleDialog}
|
|
|
|
|
/>
|
2020-01-17 21:05:38 +05:00
|
|
|
|
|
|
|
|
<VaultDialog
|
|
|
|
|
ref={ref => (this.vaultDialogRef = ref)}
|
|
|
|
|
colors={colors}
|
|
|
|
|
note={item}
|
|
|
|
|
perm={isPerm}
|
|
|
|
|
openedToUnlock={false}
|
|
|
|
|
visible={vaultDialog}
|
|
|
|
|
/>
|
2020-01-16 19:52:45 +05:00
|
|
|
</>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|