| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- import React, { PureComponent } from 'react';
- import { dateTime } from '@grafana/data';
- import { LdapUserSyncInfo } from 'app/types';
- interface Props {
- syncInfo: LdapUserSyncInfo;
- onSync?: () => void;
- }
- interface State {
- isSyncing: boolean;
- }
- const syncTimeFormat = 'dddd YYYY-MM-DD HH:mm zz';
- export class UserSyncInfo extends PureComponent<Props, State> {
- state = {
- isSyncing: false,
- };
- handleSyncClick = async () => {
- const { onSync } = this.props;
- this.setState({ isSyncing: true });
- try {
- if (onSync) {
- await onSync();
- }
- } finally {
- this.setState({ isSyncing: false });
- }
- };
- render() {
- const { syncInfo } = this.props;
- const { isSyncing } = this.state;
- const nextSyncTime = syncInfo.nextSync ? dateTime(syncInfo.nextSync).format(syncTimeFormat) : '';
- const prevSyncSuccessful = syncInfo && syncInfo.prevSync;
- const prevSyncTime = prevSyncSuccessful ? dateTime(syncInfo.prevSync).format(syncTimeFormat) : '';
- return (
- <>
- <h3 className="page-heading">
- LDAP
- <button className={`btn btn-secondary pull-right`} onClick={this.handleSyncClick} hidden={true}>
- <span className="btn-title">Sync user</span>
- {isSyncing && <i className="fa fa-spinner fa-fw fa-spin run-icon" />}
- </button>
- </h3>
- <div className="gf-form-group">
- <div className="gf-form">
- <table className="filter-table form-inline">
- <tbody>
- <tr>
- <td>Last synchronisation</td>
- <td>{prevSyncTime}</td>
- {prevSyncSuccessful && <td className="pull-right">Successful</td>}
- </tr>
- <tr>
- <td>Next scheduled synchronisation</td>
- <td colSpan={2}>{nextSyncTime}</td>
- </tr>
- </tbody>
- </table>
- </div>
- </div>
- </>
- );
- }
- }
|