33 lines
829 B
JavaScript
33 lines
829 B
JavaScript
|
|
/* eslint-disable import/prefer-default-export */
|
||
|
|
import { useState, useEffect } from 'react';
|
||
|
|
|
||
|
|
import initMatrix from '../../client/initMatrix';
|
||
|
|
|
||
|
|
export function useDeviceList() {
|
||
|
|
const mx = initMatrix.matrixClient;
|
||
|
|
const [deviceList, setDeviceList] = useState(null);
|
||
|
|
|
||
|
|
useEffect(() => {
|
||
|
|
let isMounted = true;
|
||
|
|
|
||
|
|
const updateDevices = () => mx.getDevices().then((data) => {
|
||
|
|
if (!isMounted) return;
|
||
|
|
setDeviceList(data.devices || []);
|
||
|
|
});
|
||
|
|
updateDevices();
|
||
|
|
|
||
|
|
const handleDevicesUpdate = (users) => {
|
||
|
|
if (users.includes(mx.getUserId())) {
|
||
|
|
updateDevices();
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
mx.on('crypto.devicesUpdated', handleDevicesUpdate);
|
||
|
|
return () => {
|
||
|
|
mx.removeListener('crypto.devicesUpdated', handleDevicesUpdate);
|
||
|
|
isMounted = false;
|
||
|
|
};
|
||
|
|
}, []);
|
||
|
|
return deviceList;
|
||
|
|
}
|