Compare commits
2 Commits
develop
...
easysms-in
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
43c3f5e3de | ||
|
|
a99fc78fe1 |
@@ -26,6 +26,7 @@ import NotifyEstimateViaSMSDialog from '../containers/Dialogs/NotifyEstimateViaS
|
|||||||
import NotifyPaymentReceiveViaSMSDialog from '../containers/Dialogs/NotifyPaymentReceiveViaSMSDialog';
|
import NotifyPaymentReceiveViaSMSDialog from '../containers/Dialogs/NotifyPaymentReceiveViaSMSDialog';
|
||||||
import SMSMessageDialog from '../containers/Dialogs/SMSMessageDialog';
|
import SMSMessageDialog from '../containers/Dialogs/SMSMessageDialog';
|
||||||
import TransactionsLockingDialog from '../containers/Dialogs/TransactionsLockingDialog';
|
import TransactionsLockingDialog from '../containers/Dialogs/TransactionsLockingDialog';
|
||||||
|
import EasySMSIntegrationDialog from '../containers/Dialogs/EasySMSIntegrationDialog';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Dialogs container.
|
* Dialogs container.
|
||||||
@@ -60,6 +61,7 @@ export default function DialogsContainer() {
|
|||||||
<BadDebtDialog dialogName={'write-off-bad-debt'} />
|
<BadDebtDialog dialogName={'write-off-bad-debt'} />
|
||||||
<SMSMessageDialog dialogName={'sms-message-form'} />
|
<SMSMessageDialog dialogName={'sms-message-form'} />
|
||||||
<TransactionsLockingDialog dialogName={'transactions-locking'} />
|
<TransactionsLockingDialog dialogName={'transactions-locking'} />
|
||||||
|
<EasySMSIntegrationDialog dialogName={'easysms-integrate'} />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,68 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import intl from 'react-intl-universal';
|
||||||
|
import { FormattedMessage as T, FormattedHTMLMessage } from 'components';
|
||||||
|
import { Intent, Alert } from '@blueprintjs/core';
|
||||||
|
import { AppToaster } from 'components';
|
||||||
|
|
||||||
|
import { useSettingEasySMSDisconnect } from 'hooks/query';
|
||||||
|
|
||||||
|
import withAlertStoreConnect from 'containers/Alert/withAlertStoreConnect';
|
||||||
|
import withAlertActions from 'containers/Alert/withAlertActions';
|
||||||
|
|
||||||
|
import { compose } from 'utils';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Easy SMS disconnect alert.
|
||||||
|
*/
|
||||||
|
function EasySMSDisconnectAlert({
|
||||||
|
name,
|
||||||
|
|
||||||
|
// #withAlertStoreConnect
|
||||||
|
isOpen,
|
||||||
|
payload: {},
|
||||||
|
|
||||||
|
// #withAlertActions
|
||||||
|
closeAlert,
|
||||||
|
}) {
|
||||||
|
const { mutateAsync: disconnectEasySMS, isLoading } =
|
||||||
|
useSettingEasySMSDisconnect();
|
||||||
|
|
||||||
|
// Handle cancel Disconnect alert.
|
||||||
|
const handleCancelDisconnect = () => {
|
||||||
|
closeAlert(name);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Handle confirm Disconnect alert.
|
||||||
|
const handleConfirmDisconnect = () => {
|
||||||
|
disconnectEasySMS()
|
||||||
|
.then(() => {
|
||||||
|
AppToaster.show({
|
||||||
|
message: intl.get('easysms.disconnect.alert.success_message'),
|
||||||
|
intent: Intent.SUCCESS,
|
||||||
|
});
|
||||||
|
})
|
||||||
|
.catch(() => {})
|
||||||
|
.finally(() => {
|
||||||
|
closeAlert(name);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Alert
|
||||||
|
cancelButtonText={<T id={'cancel'} />}
|
||||||
|
confirmButtonText={<T id={'easysms.label.disconnect'} />}
|
||||||
|
intent={Intent.WARNING}
|
||||||
|
isOpen={isOpen}
|
||||||
|
onCancel={handleCancelDisconnect}
|
||||||
|
onConfirm={handleConfirmDisconnect}
|
||||||
|
loading={isLoading}
|
||||||
|
>
|
||||||
|
<p>Ea aliqua elit reprehenderit pariatur consequat voluptate quis.</p>
|
||||||
|
</Alert>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default compose(
|
||||||
|
withAlertStoreConnect(),
|
||||||
|
withAlertActions,
|
||||||
|
)(EasySMSDisconnectAlert);
|
||||||
@@ -17,6 +17,7 @@ import AccountTransactionsAlerts from '../CashFlow/AccountTransactions/AccountTr
|
|||||||
import UsersAlerts from '../Preferences/Users/UsersAlerts';
|
import UsersAlerts from '../Preferences/Users/UsersAlerts';
|
||||||
import CurrenciesAlerts from '../Preferences/Currencies/CurrenciesAlerts';
|
import CurrenciesAlerts from '../Preferences/Currencies/CurrenciesAlerts';
|
||||||
import RolesAlerts from '../Preferences/Users/Roles/RolesAlerts';
|
import RolesAlerts from '../Preferences/Users/Roles/RolesAlerts';
|
||||||
|
import EasySMSIntegrationAlerts from '../Preferences/EasySMSIntegration/EasySMSIntegrationAlerts';
|
||||||
|
|
||||||
export default [
|
export default [
|
||||||
...AccountsAlerts,
|
...AccountsAlerts,
|
||||||
@@ -38,4 +39,5 @@ export default [
|
|||||||
...UsersAlerts,
|
...UsersAlerts,
|
||||||
...CurrenciesAlerts,
|
...CurrenciesAlerts,
|
||||||
...RolesAlerts,
|
...RolesAlerts,
|
||||||
|
...EasySMSIntegrationAlerts,
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
import { EasySMSIntegrationProvider } from './EasySMSIntegrationProvider';
|
||||||
|
import EasySMSIntegrationForm from './EasySMSIntegrationForm';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EasySMS integration dialog content.
|
||||||
|
*/
|
||||||
|
export default function EasySMSIntegrationDialogContent({
|
||||||
|
// #ownProps
|
||||||
|
dialogName,
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<EasySMSIntegrationProvider dialogName={dialogName}>
|
||||||
|
<EasySMSIntegrationForm />
|
||||||
|
</EasySMSIntegrationProvider>
|
||||||
|
);
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import intl from 'react-intl-universal';
|
||||||
|
import { Formik } from 'formik';
|
||||||
|
import { Intent } from '@blueprintjs/core';
|
||||||
|
|
||||||
|
import '../../../style/pages/EasySMSIntegration/EasySMSIntegration.scss';
|
||||||
|
|
||||||
|
import { AppToaster } from 'components';
|
||||||
|
import EasySMSIntegrationFormContent from './EasySMSIntegrationFormContent';
|
||||||
|
import { CreateEasySMSIntegrationSchema } from './EasySMSIntegrationForm.schema';
|
||||||
|
import { useEasySMSIntegration } from './EasySMSIntegrationProvider';
|
||||||
|
|
||||||
|
import withDialogActions from 'containers/Dialog/withDialogActions';
|
||||||
|
import { compose } from 'utils';
|
||||||
|
|
||||||
|
const defaultInitialValues = {
|
||||||
|
token: '',
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EasySMS Integration form.
|
||||||
|
*/
|
||||||
|
function EasySMSIntegrationForm({
|
||||||
|
// #withDialogActions
|
||||||
|
closeDialog,
|
||||||
|
}) {
|
||||||
|
const { dialogName, easySMSIntegrateMutate } = useEasySMSIntegration();
|
||||||
|
|
||||||
|
// Initial form values.
|
||||||
|
const initialValues = {
|
||||||
|
...defaultInitialValues,
|
||||||
|
};
|
||||||
|
|
||||||
|
// Handles the form submit.
|
||||||
|
const handleFormSubmit = (values, { setSubmitting, setErrors }) => {
|
||||||
|
// Handle request response success.
|
||||||
|
const onSuccess = (response) => {
|
||||||
|
AppToaster.show({
|
||||||
|
message: intl.get('easysms.integrate.dialog.success_message'),
|
||||||
|
intent: Intent.SUCCESS,
|
||||||
|
});
|
||||||
|
closeDialog(dialogName);
|
||||||
|
};
|
||||||
|
// Handle request response errors.
|
||||||
|
const onError = ({
|
||||||
|
response: {
|
||||||
|
data: { errors },
|
||||||
|
},
|
||||||
|
}) => {
|
||||||
|
setSubmitting(false);
|
||||||
|
};
|
||||||
|
|
||||||
|
easySMSIntegrateMutate(values).then(onSuccess).catch(onError);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Formik
|
||||||
|
validationSchema={CreateEasySMSIntegrationSchema}
|
||||||
|
initialValues={initialValues}
|
||||||
|
onSubmit={handleFormSubmit}
|
||||||
|
component={EasySMSIntegrationFormContent}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default compose(withDialogActions)(EasySMSIntegrationForm);
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
import * as Yup from 'yup';
|
||||||
|
|
||||||
|
const Schema = Yup.object().shape({
|
||||||
|
token: Yup.string().required(),
|
||||||
|
});
|
||||||
|
|
||||||
|
export const CreateEasySMSIntegrationSchema = Schema;
|
||||||
@@ -0,0 +1,68 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Form, FastField, ErrorMessage, useFormikContext } from 'formik';
|
||||||
|
import { Classes, FormGroup, InputGroup, Button } from '@blueprintjs/core';
|
||||||
|
import { FieldRequiredHint, FormattedMessage as T } from 'components';
|
||||||
|
import { useEasySMSIntegration } from './EasySMSIntegrationProvider';
|
||||||
|
import withDialogActions from 'containers/Dialog/withDialogActions';
|
||||||
|
import { inputIntent, compose } from 'utils';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EasySMS Integration form content.
|
||||||
|
*/
|
||||||
|
function EasySMSIntegrationFormContent({
|
||||||
|
// #withDialogActions
|
||||||
|
closeDialog,
|
||||||
|
}) {
|
||||||
|
// Formik context.
|
||||||
|
const { isSubmitting } = useFormikContext();
|
||||||
|
|
||||||
|
// EasySMS Integration dialog context.
|
||||||
|
const { dialogName } = useEasySMSIntegration();
|
||||||
|
|
||||||
|
// Handle close button click.
|
||||||
|
const handleCloseBtnClick = () => {
|
||||||
|
closeDialog(dialogName);
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Form>
|
||||||
|
<div className={Classes.DIALOG_BODY}>
|
||||||
|
{/*------------ Token -----------*/}
|
||||||
|
<FastField name={'token'}>
|
||||||
|
{({ form, field, meta: { error, touched } }) => (
|
||||||
|
<FormGroup
|
||||||
|
label={<T id={'easysms.integrate.dialog.label.token'} />}
|
||||||
|
labelInfo={<FieldRequiredHint />}
|
||||||
|
intent={inputIntent({ error, touched })}
|
||||||
|
helperText={<ErrorMessage name="token" />}
|
||||||
|
className={'form-group--token'}
|
||||||
|
>
|
||||||
|
<InputGroup intent={inputIntent({ error, touched })} {...field} />
|
||||||
|
</FormGroup>
|
||||||
|
)}
|
||||||
|
</FastField>
|
||||||
|
</div>
|
||||||
|
<div className={Classes.DIALOG_FOOTER}>
|
||||||
|
<div className={Classes.DIALOG_FOOTER_ACTIONS}>
|
||||||
|
<Button
|
||||||
|
disabled={isSubmitting}
|
||||||
|
onClick={handleCloseBtnClick}
|
||||||
|
style={{ minWidth: '75px' }}
|
||||||
|
>
|
||||||
|
<T id={'close'} />
|
||||||
|
</Button>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
loading={isSubmitting}
|
||||||
|
style={{ minWidth: '75px' }}
|
||||||
|
type="submit"
|
||||||
|
>
|
||||||
|
{<T id={'save'} />}
|
||||||
|
</Button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Form>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default compose(withDialogActions)(EasySMSIntegrationFormContent);
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { DialogContent } from 'components';
|
||||||
|
import { useSettingEasySMSIntegrate } from 'hooks/query';
|
||||||
|
|
||||||
|
const EasySMSIntegrationDialogContext = React.createContext();
|
||||||
|
/**
|
||||||
|
* Easy SMS integration dialog provider.
|
||||||
|
*/
|
||||||
|
function EasySMSIntegrationProvider({ dialogName, ...props }) {
|
||||||
|
// easysms integrate mutations.
|
||||||
|
const { mutateAsync: easySMSIntegrateMutate } = useSettingEasySMSIntegrate();
|
||||||
|
|
||||||
|
// State provider.
|
||||||
|
const provider = {
|
||||||
|
dialogName,
|
||||||
|
easySMSIntegrateMutate,
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<DialogContent>
|
||||||
|
<EasySMSIntegrationDialogContext.Provider value={provider} {...props} />
|
||||||
|
</DialogContent>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const useEasySMSIntegration = () =>
|
||||||
|
React.useContext(EasySMSIntegrationDialogContext);
|
||||||
|
|
||||||
|
export { EasySMSIntegrationProvider, useEasySMSIntegration };
|
||||||
29
src/containers/Dialogs/EasySMSIntegrationDialog/index.js
Normal file
29
src/containers/Dialogs/EasySMSIntegrationDialog/index.js
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Dialog, DialogSuspense, FormattedMessage as T } from 'components';
|
||||||
|
import withDialogRedux from 'components/DialogReduxConnect';
|
||||||
|
import { compose } from 'redux';
|
||||||
|
|
||||||
|
const EasySMSIntegrationDialogContent = React.lazy(() =>
|
||||||
|
import('./EasySMSIntegrationDialogContent'),
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EasySms integration dialog.
|
||||||
|
*/
|
||||||
|
function EasySMSIntegrationDialog({ dialogName, payload = {}, isOpen }) {
|
||||||
|
return (
|
||||||
|
<Dialog
|
||||||
|
name={dialogName}
|
||||||
|
title={'EasySMS Inegration'}
|
||||||
|
isOpen={isOpen}
|
||||||
|
canEscapeJeyClose={true}
|
||||||
|
autoFocus={true}
|
||||||
|
className={'dialog--easysms-integrate'}
|
||||||
|
>
|
||||||
|
<DialogSuspense>
|
||||||
|
<EasySMSIntegrationDialogContent dialogName={dialogName} />
|
||||||
|
</DialogSuspense>
|
||||||
|
</Dialog>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
export default compose(withDialogRedux())(EasySMSIntegrationDialog);
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
import React from 'react';
|
||||||
|
|
||||||
|
const EasySMSDisconnectAlert = React.lazy(() =>
|
||||||
|
import('../../Alerts/EasySMSIntegration/EasySMSDisconnectAlert'),
|
||||||
|
);
|
||||||
|
|
||||||
|
export default [
|
||||||
|
{
|
||||||
|
name: 'easysms-disconnect',
|
||||||
|
component: EasySMSDisconnectAlert,
|
||||||
|
},
|
||||||
|
];
|
||||||
@@ -0,0 +1,29 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import classNames from 'classnames';
|
||||||
|
import { CLASSES } from 'common/classes';
|
||||||
|
import {
|
||||||
|
useSettingEasySMS,
|
||||||
|
useSettingEasySMSDisconnect,
|
||||||
|
useSettingEasySMSIntegrate,
|
||||||
|
} from 'hooks/query';
|
||||||
|
|
||||||
|
const EasySMSIntegrationContext = React.createContext();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Easysms integration data provider.
|
||||||
|
*/
|
||||||
|
function EasySMSIntegrationProvider({ ...props }) {
|
||||||
|
// Provider
|
||||||
|
const provider = {};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className={classNames(CLASSES.PREFERENCES_PAGE_INSIDE_CONTENT)}>
|
||||||
|
<EasySMSIntegrationContext.Provider value={provider} {...props} />
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
const useEasySMSIntegrationContext = () =>
|
||||||
|
React.useContext(EasySMSIntegrationContext);
|
||||||
|
|
||||||
|
export { EasySMSIntegrationProvider, useEasySMSIntegrationContext };
|
||||||
99
src/containers/Preferences/EasySMSIntegration/index.js
Normal file
99
src/containers/Preferences/EasySMSIntegration/index.js
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import styled from 'styled-components';
|
||||||
|
import { Button, Intent } from '@blueprintjs/core';
|
||||||
|
import clsx from 'classnames';
|
||||||
|
import { FormattedMessage as T } from 'components';
|
||||||
|
|
||||||
|
import { EasySMSIntegrationProvider } from './EasySMSIntegrationProvider';
|
||||||
|
import withDialogActions from 'containers/Dialog/withDialogActions';
|
||||||
|
import withAlertsActions from 'containers/Alert/withAlertActions';
|
||||||
|
|
||||||
|
import { compose } from 'utils';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* EasySMS integration.
|
||||||
|
*/
|
||||||
|
function EasySMSIntegrationList({
|
||||||
|
// #withDialogActions
|
||||||
|
openDialog,
|
||||||
|
|
||||||
|
// #withAlertsActions
|
||||||
|
openAlert,
|
||||||
|
}) {
|
||||||
|
// Handle EasySMS integrate.
|
||||||
|
const handleEasySMSIntegrate = () => {
|
||||||
|
openDialog('easysms-integrate', {});
|
||||||
|
};
|
||||||
|
|
||||||
|
// Handle EsaySMS disconnect
|
||||||
|
const handleEasySMSDiconnect = ({}) => {
|
||||||
|
openAlert('easysms-disconnect', {});
|
||||||
|
};
|
||||||
|
|
||||||
|
return (
|
||||||
|
<EasySMSIntegrationProvider>
|
||||||
|
<EasySMSIntegration>
|
||||||
|
<EasySMSIntegrationInner>
|
||||||
|
<EasySMSIntegrationTitle>Easysms Integration</EasySMSIntegrationTitle>
|
||||||
|
<EasySMSIntegrationParagraph>
|
||||||
|
<b>Lorem ipsum</b> dolor sit amet, consectetur adipisicing elit, sed
|
||||||
|
do eiusmod tempor incididunt ut labore et dolore magna aliqua. Lorem
|
||||||
|
ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
|
||||||
|
</EasySMSIntegrationParagraph>
|
||||||
|
<Button
|
||||||
|
text={<T id={'esaysms.label.connect'} />}
|
||||||
|
onClick={handleEasySMSIntegrate}
|
||||||
|
/>
|
||||||
|
</EasySMSIntegrationInner>
|
||||||
|
<EasySMSIntegrationFooter>
|
||||||
|
<Button
|
||||||
|
onClick={handleEasySMSIntegrate}
|
||||||
|
text={<T id={'easysms.label.edit_integration_settings'} />}
|
||||||
|
/>
|
||||||
|
|
||||||
|
<Button
|
||||||
|
text={<T id={'easysms.label.disconnect'} />}
|
||||||
|
onClick={handleEasySMSDiconnect}
|
||||||
|
/>
|
||||||
|
</EasySMSIntegrationFooter>
|
||||||
|
</EasySMSIntegration>
|
||||||
|
</EasySMSIntegrationProvider>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
export default compose(
|
||||||
|
withAlertsActions,
|
||||||
|
withDialogActions,
|
||||||
|
)(EasySMSIntegrationList);
|
||||||
|
|
||||||
|
const EasySMSIntegration = styled.div`
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 14px;
|
||||||
|
`;
|
||||||
|
|
||||||
|
const EasySMSIntegrationInner = styled.div`
|
||||||
|
max-width: 45rem; // 100%
|
||||||
|
margin-bottom: 48px; // 48
|
||||||
|
`;
|
||||||
|
|
||||||
|
const EasySMSIntegrationTitle = styled.h2`
|
||||||
|
font-weight: 50px;
|
||||||
|
margin-bottom: 12px;
|
||||||
|
`;
|
||||||
|
|
||||||
|
const EasySMSIntegrationParagraph = styled.p`
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 1.75rem;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
`;
|
||||||
|
|
||||||
|
const EasySMSIntegrationFooter = styled.div`
|
||||||
|
width: 100%;
|
||||||
|
/* max-width: 30rem; */
|
||||||
|
display: flex;
|
||||||
|
|
||||||
|
.bp3-button {
|
||||||
|
margin-right: 10px;
|
||||||
|
}
|
||||||
|
`;
|
||||||
@@ -5,6 +5,7 @@ import { Tabs, Tab } from '@blueprintjs/core';
|
|||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { CLASSES } from 'common/classes';
|
import { CLASSES } from 'common/classes';
|
||||||
import SMSMessagesDataTable from './SMSMessagesDataTable';
|
import SMSMessagesDataTable from './SMSMessagesDataTable';
|
||||||
|
import EasySMSIntegration from '../EasySMSIntegration';
|
||||||
|
|
||||||
import '../../../style/pages/Preferences/SMSIntegration.scss';
|
import '../../../style/pages/Preferences/SMSIntegration.scss';
|
||||||
|
|
||||||
@@ -27,6 +28,7 @@ function SMSIntegrationTabs({
|
|||||||
<Tab
|
<Tab
|
||||||
id="overview"
|
id="overview"
|
||||||
title={intl.get('sms_integration.label.overview')}
|
title={intl.get('sms_integration.label.overview')}
|
||||||
|
panel={<EasySMSIntegration />}
|
||||||
/>
|
/>
|
||||||
<Tab
|
<Tab
|
||||||
id="sms_messages"
|
id="sms_messages"
|
||||||
|
|||||||
@@ -180,3 +180,57 @@ export function useSettingEditSMSNotification(props) {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve EasySMS Integration settings.
|
||||||
|
*/
|
||||||
|
export function useSettingEasySMSIntegrate(props) {
|
||||||
|
const queryClient = useQueryClient();
|
||||||
|
const apiRequest = useApiRequest();
|
||||||
|
|
||||||
|
return useMutation(
|
||||||
|
(values) => apiRequest.post(`settings/easysms/integrate`, values),
|
||||||
|
{
|
||||||
|
onSuccess: () => {
|
||||||
|
queryClient.invalidateQueries([t.SETTING_EASY_SMS]);
|
||||||
|
queryClient.invalidateQueries([t.SETTING_SMS_NOTIFICATIONS]);
|
||||||
|
},
|
||||||
|
...props,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve EasySMS Disconnect settings.
|
||||||
|
*/
|
||||||
|
export function useSettingEasySMSDisconnect(props) {
|
||||||
|
const queryClient = useQueryClient();
|
||||||
|
const apiRequest = useApiRequest();
|
||||||
|
|
||||||
|
return useMutation(
|
||||||
|
(values) => apiRequest.post(`settings/easysms/disconnect`, values),
|
||||||
|
{
|
||||||
|
onSuccess: () => {
|
||||||
|
queryClient.invalidateQueries([t.SETTING_EASY_SMS]);
|
||||||
|
queryClient.invalidateQueries([t.SETTING_SMS_NOTIFICATIONS]);
|
||||||
|
},
|
||||||
|
...props,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve EasySMS settings.
|
||||||
|
*/
|
||||||
|
export function useSettingEasySMS(props) {
|
||||||
|
return useRequestQuery(
|
||||||
|
[t.SETTING_EASY_SMS],
|
||||||
|
{ method: 'get', url: `settings/easysms` },
|
||||||
|
{
|
||||||
|
select: (res) => res.data,
|
||||||
|
defaultData: [],
|
||||||
|
...props,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -120,6 +120,7 @@ const SETTING = {
|
|||||||
SETTING_SMS_NOTIFICATION: 'SETTING_SMS_NOTIFICATION',
|
SETTING_SMS_NOTIFICATION: 'SETTING_SMS_NOTIFICATION',
|
||||||
SETTING_SMS_NOTIFICATIONS: 'SETTING_SMS_NOTIFICATIONS',
|
SETTING_SMS_NOTIFICATIONS: 'SETTING_SMS_NOTIFICATIONS',
|
||||||
SETTING_EDIT_SMS_NOTIFICATION: 'SETTING_EDIT_SMS_NOTIFICATION',
|
SETTING_EDIT_SMS_NOTIFICATION: 'SETTING_EDIT_SMS_NOTIFICATION',
|
||||||
|
SETTING_EASY_SMS: 'SETTING_EASY_SMS',
|
||||||
};
|
};
|
||||||
|
|
||||||
const ORGANIZATIONS = {
|
const ORGANIZATIONS = {
|
||||||
|
|||||||
@@ -1467,25 +1467,31 @@
|
|||||||
"sms_notification.payment_details.type": "Payment receive thank you.",
|
"sms_notification.payment_details.type": "Payment receive thank you.",
|
||||||
"sms_notification.receipt_details.type": "Sale receipt details",
|
"sms_notification.receipt_details.type": "Sale receipt details",
|
||||||
"personal": "Personal",
|
"personal": "Personal",
|
||||||
"list.create":"Create {value}",
|
"list.create": "Create {value}",
|
||||||
"roles.label":"Roles",
|
"roles.label": "Roles",
|
||||||
"roles.column.name":"Name",
|
"roles.column.name": "Name",
|
||||||
"roles.column.description":"Description",
|
"roles.column.description": "Description",
|
||||||
"roles.edit_roles":"Edit Roles",
|
"roles.edit_roles": "Edit Roles",
|
||||||
"roles.delete_roles":"Delete Roles",
|
"roles.delete_roles": "Delete Roles",
|
||||||
"roles.label.role_name":"Role Name",
|
"roles.label.role_name": "Role Name",
|
||||||
"roles.label.role_name_":"Role name",
|
"roles.label.role_name_": "Role name",
|
||||||
"roles.error.role_is_predefined":"Role is predefined, you cannot delete predefined roles.",
|
"roles.error.role_is_predefined": "Role is predefined, you cannot delete predefined roles.",
|
||||||
"roles.error.you_cannot_change_your_own_role":"You cannot change your own role.",
|
"roles.error.you_cannot_change_your_own_role": "You cannot change your own role.",
|
||||||
"sidebar.transactions_locaking":"Transactions Locaking",
|
"sidebar.transactions_locaking": "Transactions Locaking",
|
||||||
"transactions_locking.dialog.label":"Transactions locking",
|
"transactions_locking.dialog.label": "Transactions locking",
|
||||||
"roles.permission_schema.success_message":"The role has been created successfully.",
|
"roles.permission_schema.success_message": "The role has been created successfully.",
|
||||||
"roles.permission_schema.upload_message":"The given role has been updated successfully.",
|
"roles.permission_schema.upload_message": "The given role has been updated successfully.",
|
||||||
"roles.permission_schema.delete.alert_message":"The given role has been deleted successfully.",
|
"roles.permission_schema.delete.alert_message": "The given role has been deleted successfully.",
|
||||||
"roles.permission_schema.once_delete_this_role_you_will_able_to_restore_it":"Once you delete this role, you won't be able to restore it later. Are you sure you want to delete this role?",
|
"roles.permission_schema.once_delete_this_role_you_will_able_to_restore_it": "Once you delete this role, you won't be able to restore it later. Are you sure you want to delete this role?",
|
||||||
"users.column.role_name":"Role Name",
|
"users.column.role_name": "Role Name",
|
||||||
"roles.error.you_cannot_edit_predefined_roles":"You cannot edit predefined roles.",
|
"roles.error.you_cannot_edit_predefined_roles": "You cannot edit predefined roles.",
|
||||||
"roles.error.you_cannot_delete_predefined_roles":"You cannot delete predefined roles.",
|
"roles.error.you_cannot_delete_predefined_roles": "You cannot delete predefined roles.",
|
||||||
"roles.error.the_submit_role_has_invalid_permissions":"The submit role has invalid permissions.",
|
"roles.error.the_submit_role_has_invalid_permissions": "The submit role has invalid permissions.",
|
||||||
"roles.error.you_cannot_delete_role_that_associated_to_users":"You cannot delete role that associated to users"
|
"roles.error.you_cannot_delete_role_that_associated_to_users": "You cannot delete role that associated to users",
|
||||||
|
"esaysms.label.connect": "Connect",
|
||||||
|
"easysms.label.disconnect": "Disconnect",
|
||||||
|
"easysms.label.edit_integration_settings": "Edit integration settings",
|
||||||
|
"easysms.disconnect.alert.success_message": "The sms gateway integration has been disconnected successfully.",
|
||||||
|
"easysms.integrate.dialog.label.token": "Token",
|
||||||
|
"easysms.integrate.dialog.success_message": "The system has been integrated with Easysms sms gateway successfully."
|
||||||
}
|
}
|
||||||
17
src/style/pages/EasySMSIntegration/EasySMSIntegration.scss
Normal file
17
src/style/pages/EasySMSIntegration/EasySMSIntegration.scss
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
.dialog--easysms-integrate {
|
||||||
|
max-width: 400px;
|
||||||
|
.bp3-dialog-body {
|
||||||
|
.bp3-form-group {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
margin-top: 15px;
|
||||||
|
|
||||||
|
label.bp3-label {
|
||||||
|
margin-bottom: 3px;
|
||||||
|
font-size: 13px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.bp3-dialog-footer {
|
||||||
|
padding-top: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user