From 0046ae50b545aa5b2e53ccb5b0cf2ffcd2908377 Mon Sep 17 00:00:00 2001 From: Matthew Hodgson Date: Sat, 17 Sep 2016 02:39:19 +0100 Subject: [PATCH] switch to 3-digit formatting for counts --- src/components/views/rooms/RoomTile.js | 3 ++- src/utils/FormattingUtils.js | 28 ++++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 src/utils/FormattingUtils.js diff --git a/src/components/views/rooms/RoomTile.js b/src/components/views/rooms/RoomTile.js index 6f71d6bacf..c90c0264a3 100644 --- a/src/components/views/rooms/RoomTile.js +++ b/src/components/views/rooms/RoomTile.js @@ -25,6 +25,7 @@ var DMRoomMap = require('../../../utils/DMRoomMap'); var sdk = require('../../../index'); var ContextualMenu = require('../../structures/ContextualMenu'); var RoomNotifs = require('../../../RoomNotifs'); +var FormattingUtils = require('../../../utils/FormattingUtils'); module.exports = React.createClass({ displayName: 'RoomTile', @@ -237,7 +238,7 @@ module.exports = React.createClass({ if (this.state.badgeHover || this.state.notificationTagMenu) { badgeContent = "\u00B7\u00B7\u00B7"; } else if (badges) { - var limitedCount = (notificationCount > 99) ? '99+' : notificationCount; + var limitedCount = FormattingUtils.formatCount(notificationCount); badgeContent = notificationCount ? limitedCount : '!'; } else { badgeContent = '\u200B'; diff --git a/src/utils/FormattingUtils.js b/src/utils/FormattingUtils.js new file mode 100644 index 0000000000..44dcb2aa22 --- /dev/null +++ b/src/utils/FormattingUtils.js @@ -0,0 +1,28 @@ +/* +Copyright 2016 OpenMarket Ltd + +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. +*/ + +/** + * formats numbers to fit into ~3 characters, suitable for badge counts + * e.g: 999, 9.9K, 99K, 0.9M, 9.9M, 99M, 0.9B, 9.9B + */ +export function formatCount(count) { + if (count < 1000) return count; + if (count < 10000) return (count / 1000).toFixed(1) + "K"; + if (count < 100000) return (count / 1000).toFixed(0) + "K"; + if (count < 10000000) return (count / 1000000).toFixed(1) + "M"; + if (count < 100000000) return (count / 1000000).toFixed(0) + "M"; + return (count / 1000000000).toFixed(1) + "B"; // 10B is enough for anyone, right? :S +} \ No newline at end of file