Extract RoomStatusBarUnsentMessages (#9080)
This commit is contained in:
parent
dca4b8b291
commit
c980885d6b
4 changed files with 111 additions and 25 deletions
|
@ -138,7 +138,7 @@ limitations under the License.
|
||||||
mask-image: url('$(res)/img/element-icons/trashcan.svg');
|
mask-image: url('$(res)/img/element-icons/trashcan.svg');
|
||||||
}
|
}
|
||||||
|
|
||||||
&.mx_RoomStatusBar_unsentResendAllBtn {
|
&.mx_RoomStatusBar_unsentRetry {
|
||||||
padding-left: 34px; // 28px from above, but +6px to account for the wider icon
|
padding-left: 34px; // 28px from above, but +6px to account for the wider icon
|
||||||
|
|
||||||
&::before {
|
&::before {
|
||||||
|
|
|
@ -24,11 +24,11 @@ import Resend from '../../Resend';
|
||||||
import dis from '../../dispatcher/dispatcher';
|
import dis from '../../dispatcher/dispatcher';
|
||||||
import { messageForResourceLimitError } from '../../utils/ErrorUtils';
|
import { messageForResourceLimitError } from '../../utils/ErrorUtils';
|
||||||
import { Action } from "../../dispatcher/actions";
|
import { Action } from "../../dispatcher/actions";
|
||||||
import NotificationBadge from "../views/rooms/NotificationBadge";
|
|
||||||
import { StaticNotificationState } from "../../stores/notifications/StaticNotificationState";
|
import { StaticNotificationState } from "../../stores/notifications/StaticNotificationState";
|
||||||
import AccessibleButton from "../views/elements/AccessibleButton";
|
import AccessibleButton from "../views/elements/AccessibleButton";
|
||||||
import InlineSpinner from "../views/elements/InlineSpinner";
|
import InlineSpinner from "../views/elements/InlineSpinner";
|
||||||
import MatrixClientContext from "../../contexts/MatrixClientContext";
|
import MatrixClientContext from "../../contexts/MatrixClientContext";
|
||||||
|
import { RoomStatusBarUnsentMessages } from './RoomStatusBarUnsentMessages';
|
||||||
|
|
||||||
const STATUS_BAR_HIDDEN = 0;
|
const STATUS_BAR_HIDDEN = 0;
|
||||||
const STATUS_BAR_EXPANDED = 1;
|
const STATUS_BAR_EXPANDED = 1;
|
||||||
|
@ -240,7 +240,7 @@ export default class RoomStatusBar extends React.PureComponent<IProps, IState> {
|
||||||
<AccessibleButton onClick={this.onCancelAllClick} className="mx_RoomStatusBar_unsentCancelAllBtn">
|
<AccessibleButton onClick={this.onCancelAllClick} className="mx_RoomStatusBar_unsentCancelAllBtn">
|
||||||
{ _t("Delete all") }
|
{ _t("Delete all") }
|
||||||
</AccessibleButton>
|
</AccessibleButton>
|
||||||
<AccessibleButton onClick={this.onResendAllClick} className="mx_RoomStatusBar_unsentResendAllBtn">
|
<AccessibleButton onClick={this.onResendAllClick} className="mx_RoomStatusBar_unsentRetry">
|
||||||
{ _t("Retry all") }
|
{ _t("Retry all") }
|
||||||
</AccessibleButton>
|
</AccessibleButton>
|
||||||
</>;
|
</>;
|
||||||
|
@ -252,28 +252,12 @@ export default class RoomStatusBar extends React.PureComponent<IProps, IState> {
|
||||||
</>;
|
</>;
|
||||||
}
|
}
|
||||||
|
|
||||||
return <>
|
return <RoomStatusBarUnsentMessages
|
||||||
<div className="mx_RoomStatusBar mx_RoomStatusBar_unsentMessages">
|
title={title}
|
||||||
<div role="alert">
|
description={_t("You can select all or individual messages to retry or delete")}
|
||||||
<div className="mx_RoomStatusBar_unsentBadge">
|
notificationState={StaticNotificationState.RED_EXCLAMATION}
|
||||||
<NotificationBadge
|
buttons={buttonRow}
|
||||||
notification={StaticNotificationState.RED_EXCLAMATION}
|
/>;
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<div className="mx_RoomStatusBar_unsentTitle">
|
|
||||||
{ title }
|
|
||||||
</div>
|
|
||||||
<div className="mx_RoomStatusBar_unsentDescription">
|
|
||||||
{ _t("You can select all or individual messages to retry or delete") }
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div className="mx_RoomStatusBar_unsentButtonBar">
|
|
||||||
{ buttonRow }
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</>;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public render(): JSX.Element {
|
public render(): JSX.Element {
|
||||||
|
|
55
src/components/structures/RoomStatusBarUnsentMessages.tsx
Normal file
55
src/components/structures/RoomStatusBarUnsentMessages.tsx
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
/*
|
||||||
|
Copyright 2022 The Matrix.org Foundation C.I.C.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React, { ReactElement } from "react";
|
||||||
|
|
||||||
|
import { StaticNotificationState } from "../../stores/notifications/StaticNotificationState";
|
||||||
|
import NotificationBadge from "../views/rooms/NotificationBadge";
|
||||||
|
|
||||||
|
interface RoomStatusBarUnsentMessagesProps {
|
||||||
|
title: string;
|
||||||
|
description?: string;
|
||||||
|
notificationState: StaticNotificationState;
|
||||||
|
buttons: ReactElement;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const RoomStatusBarUnsentMessages = (props: RoomStatusBarUnsentMessagesProps): ReactElement => {
|
||||||
|
return (
|
||||||
|
<div className="mx_RoomStatusBar mx_RoomStatusBar_unsentMessages">
|
||||||
|
<div role="alert">
|
||||||
|
<div className="mx_RoomStatusBar_unsentBadge">
|
||||||
|
<NotificationBadge
|
||||||
|
notification={props.notificationState}
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div className="mx_RoomStatusBar_unsentTitle">
|
||||||
|
{ props.title }
|
||||||
|
</div>
|
||||||
|
{
|
||||||
|
props.description &&
|
||||||
|
<div className="mx_RoomStatusBar_unsentDescription">
|
||||||
|
{ props.description }
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
<div className="mx_RoomStatusBar_unsentButtonBar">
|
||||||
|
{ props.buttons }
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
Copyright 2022 The Matrix.org Foundation C.I.C.
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import React from "react";
|
||||||
|
import { render, screen } from "@testing-library/react";
|
||||||
|
|
||||||
|
import { RoomStatusBarUnsentMessages } from "../../../src/components/structures/RoomStatusBarUnsentMessages";
|
||||||
|
import { StaticNotificationState } from "../../../src/stores/notifications/StaticNotificationState";
|
||||||
|
|
||||||
|
describe("RoomStatusBarUnsentMessages", () => {
|
||||||
|
const title = "test title";
|
||||||
|
const description = "test description";
|
||||||
|
const buttonsText = "test buttons";
|
||||||
|
const buttons = <div>{ buttonsText }</div>;
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
render(
|
||||||
|
<RoomStatusBarUnsentMessages
|
||||||
|
title={title}
|
||||||
|
description={description}
|
||||||
|
buttons={buttons}
|
||||||
|
notificationState={StaticNotificationState.RED_EXCLAMATION}
|
||||||
|
/>,
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should render the values passed as props", () => {
|
||||||
|
screen.getByText(title);
|
||||||
|
screen.getByText(description);
|
||||||
|
screen.getByText(buttonsText);
|
||||||
|
// notification state
|
||||||
|
screen.getByText("!");
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in a new issue