mirror of
https://github.com/zulip/zulip-desktop.git
synced 2025-11-01 20:43:33 +00:00
typescript: Migrate helper.js to typescript.
This commit is contained in:
committed by
Akash Nimare
parent
63a913487c
commit
6192801083
@@ -1,5 +1,5 @@
|
||||
const { remote } = require('electron');
|
||||
const Logger = require('../utils/logger-util.js');
|
||||
import { remote } from 'electron';
|
||||
import Logger from '../utils/logger-util';
|
||||
|
||||
const logger = new Logger({
|
||||
file: 'errors.log',
|
||||
@@ -7,24 +7,25 @@ const logger = new Logger({
|
||||
});
|
||||
|
||||
// Do not change this
|
||||
const appId = 'org.zulip.zulip-electron';
|
||||
export const appId = 'org.zulip.zulip-electron';
|
||||
|
||||
const botsList = [];
|
||||
export type BotListItem = [string, string];
|
||||
const botsList: BotListItem[] = [];
|
||||
let botsListLoaded = false;
|
||||
|
||||
// this function load list of bots from the server
|
||||
// sync=True for a synchronous getJSON request
|
||||
// in case botsList isn't already completely loaded when required in parseRely
|
||||
function loadBots(sync = false) {
|
||||
export function loadBots(sync = false): void {
|
||||
const { $ } = window;
|
||||
botsList.length = 0;
|
||||
if (sync) {
|
||||
$.ajaxSetup({async: false});
|
||||
}
|
||||
$.getJSON('/json/users')
|
||||
.done(data => {
|
||||
const members = data.members;
|
||||
members.forEach(membersRow => {
|
||||
.done((data: any) => {
|
||||
const { members } = data;
|
||||
members.forEach((membersRow: any) => {
|
||||
if (membersRow.is_bot) {
|
||||
const bot = `@${membersRow.full_name}`;
|
||||
const mention = `@**${bot.replace(/^@/, '')}**`;
|
||||
@@ -33,7 +34,7 @@ function loadBots(sync = false) {
|
||||
});
|
||||
botsListLoaded = true;
|
||||
})
|
||||
.fail(error => {
|
||||
.fail((error: any) => {
|
||||
logger.log('Load bots request failed: ', error.responseText);
|
||||
logger.log('Load bots request status: ', error.statusText);
|
||||
});
|
||||
@@ -42,7 +43,7 @@ function loadBots(sync = false) {
|
||||
}
|
||||
}
|
||||
|
||||
function checkElements(...elements) {
|
||||
export function checkElements(...elements: any[]): boolean {
|
||||
let status = true;
|
||||
elements.forEach(element => {
|
||||
if (element === null || element === undefined) {
|
||||
@@ -52,13 +53,13 @@ function checkElements(...elements) {
|
||||
return status;
|
||||
}
|
||||
|
||||
function customReply(reply) {
|
||||
export function customReply(reply: string): void {
|
||||
// server does not support notification reply yet.
|
||||
const buttonSelector = '.messagebox #send_controls button[type=submit]';
|
||||
const messageboxSelector = '.selected_message .messagebox .messagebox-border .messagebox-content';
|
||||
const textarea = document.querySelector('#compose-textarea');
|
||||
const messagebox = document.querySelector(messageboxSelector);
|
||||
const sendButton = document.querySelector(buttonSelector);
|
||||
const textarea: HTMLInputElement = document.querySelector('#compose-textarea');
|
||||
const messagebox: HTMLButtonElement = document.querySelector(messageboxSelector);
|
||||
const sendButton: HTMLButtonElement = document.querySelector(buttonSelector);
|
||||
|
||||
// sanity check for old server versions
|
||||
const elementsExists = checkElements(textarea, messagebox, sendButton);
|
||||
@@ -77,19 +78,24 @@ const webContentsId = webContents.id;
|
||||
|
||||
// this function will focus the server that sent
|
||||
// the notification. Main function implemented in main.js
|
||||
function focusCurrentServer() {
|
||||
currentWindow.send('focus-webview-with-id', webContentsId);
|
||||
export function focusCurrentServer(): void {
|
||||
// TODO: TypeScript: currentWindow of type BrowserWindow doesn't
|
||||
// have a .send() property per typescript.
|
||||
(currentWindow as any).send('focus-webview-with-id', webContentsId);
|
||||
}
|
||||
// this function parses the reply from to notification
|
||||
// making it easier to reply from notification eg
|
||||
// @username in reply will be converted to @**username**
|
||||
// #stream in reply will be converted to #**stream**
|
||||
// bot mentions are not yet supported
|
||||
function parseReply(reply) {
|
||||
export function parseReply(reply: string): string {
|
||||
const usersDiv = document.querySelectorAll('#user_presences li');
|
||||
const streamHolder = document.querySelectorAll('#stream_filters li');
|
||||
const users = [];
|
||||
const streams = [];
|
||||
|
||||
type UsersItem = BotListItem;
|
||||
type StreamsItem = BotListItem;
|
||||
const users: UsersItem[] = [];
|
||||
const streams: StreamsItem[] = [];
|
||||
|
||||
usersDiv.forEach(userRow => {
|
||||
const anchor = userRow.querySelector('span a');
|
||||
@@ -139,18 +145,8 @@ function parseReply(reply) {
|
||||
return reply;
|
||||
}
|
||||
|
||||
function setupReply(id) {
|
||||
export function setupReply(id: string): void {
|
||||
const { narrow } = window;
|
||||
const narrowByTopic = narrow.by_topic || narrow.by_subject;
|
||||
narrowByTopic(id, { trigger: 'notification' });
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
appId,
|
||||
checkElements,
|
||||
customReply,
|
||||
parseReply,
|
||||
setupReply,
|
||||
focusCurrentServer,
|
||||
loadBots
|
||||
};
|
||||
6
typings.d.ts
vendored
6
typings.d.ts
vendored
@@ -8,3 +8,9 @@ declare var page_params: object;
|
||||
|
||||
// since requestIdleCallback didn't make it into lib.dom.d.ts yet
|
||||
declare function requestIdleCallback(callback: Function, options?: object): void;
|
||||
|
||||
// This is mostly zulip side of code we access from window
|
||||
interface Window {
|
||||
$: any;
|
||||
narrow: any;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user