Files
flipper/desktop/app/src/chrome/NotificationScreen.tsx
Michel Weststrate f0c54667e0 Support handling deeplinks in plugins
Summary:
This adds support for handling incoming deeplinks in a Sandy plugin, which can be done by using a `client.onDeepLink(deepLink => { } )` listener

Also generalized deeplinks to not just support strings, but also richer objects, which is beneficial to plugin to plugin linking.

Reviewed By: jknoxville

Differential Revision: D22524749

fbshipit-source-id: 2cbe8d52f6eac91a1c1c8c8494706952920b9181
2020-07-22 04:13:59 -07:00

105 lines
2.7 KiB
TypeScript

/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
import {PureComponent, Fragment} from 'react';
import {Logger} from '../fb-interfaces/Logger';
import {connect} from 'react-redux';
import {State as Store} from '../reducers/index';
import {ConnectedNotificationsTable} from '../NotificationsHub';
import {Button, colors, styled, FlexColumn} from '../ui';
import {clearAllNotifications} from '../reducers/notifications';
import {selectPlugin} from '../reducers/connections';
import React from 'react';
type StateFromProps = {
deepLinkPayload: unknown;
blacklistedPlugins: Array<string>;
blacklistedCategories: Array<string>;
};
type DispatchFromProps = {
clearAllNotifications: () => void;
selectPlugin: (payload: {
selectedPlugin: string | null;
selectedApp: string | null | undefined;
deepLinkPayload: unknown;
}) => any;
};
type OwnProps = {
logger: Logger;
};
type Props = StateFromProps & DispatchFromProps & OwnProps;
type State = {};
const Container = styled(FlexColumn)({
width: 0,
flexGrow: 1,
flexShrink: 1,
backgroundColor: colors.white,
});
class Notifications extends PureComponent<Props, State> {
render() {
const {
blacklistedPlugins,
blacklistedCategories,
deepLinkPayload,
logger,
clearAllNotifications,
selectPlugin,
} = this.props;
return (
<React.Fragment>
<Container>
<ConnectedNotificationsTable
onClear={clearAllNotifications}
selectedID={
typeof deepLinkPayload === 'string' ? deepLinkPayload : null
}
onSelectPlugin={selectPlugin}
logger={logger}
defaultFilters={[
...blacklistedPlugins.map((value) => ({
value,
type: 'exclude',
key: 'plugin',
})),
...blacklistedCategories.map((value) => ({
value,
type: 'exclude',
key: 'category',
})),
]}
actions={
<Fragment>
<Button onClick={clearAllNotifications}>Clear</Button>
</Fragment>
}
/>
</Container>
</React.Fragment>
);
}
}
export default connect<StateFromProps, DispatchFromProps, OwnProps, Store>(
({
connections: {deepLinkPayload},
notifications: {blacklistedPlugins, blacklistedCategories},
}) => ({
deepLinkPayload,
blacklistedPlugins,
blacklistedCategories,
}),
{clearAllNotifications, selectPlugin},
)(Notifications);