File size: 1,757 Bytes
68f7925
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import { type ClassValue, clsx } from 'clsx';
import { twMerge } from 'tailwind-merge';

export function cn(...inputs: ClassValue[]) {
  return twMerge(clsx(inputs));
}

export const allowedEmails = [
  'yoshimura.s@dentsudigital.co.jp',
  'manabe.risa@dentsudigital.co.jp',
  'watabe.kazuhiro@dentsudigital.co.jp',
  'shimizu.r@dentsudigital.co.jp',
  'wada.j@dentsudigital.co.jp',
  'iijima.m@dentsudigital.co.jp',
  'takao.a@dentsudigital.co.jp',
  'hayashi.som@dentsudigital.co.jp',
  'fukushima.r@dentsudigital.co.jp',
  'k.yamada@dentsudigital.co.jp',
  'suzuki@dentsudigital.co.jp',
  'miyazaki.ay@dentsudigital.co.jp',
  'ikeda.yug@dentsudigital.co.jp',
  'masamura.y@dentsudigital.co.jp',
  'u.gunjlkham@mn.data-artist.com',
  'itano.c@dentsudigital.co.jp',
  'kazuki.watanabe@contract.dentsudigital.co.jp',
  'yuki.watanabe@contract.dentsudigital.co.jp',
];

export const isAllowedUser = (email?: string): boolean => {
  return email === '' || email === undefined || email === null || (!!email && allowedEmails.includes(email));
};

/**
 * タイムアウト付きのPromiseラッパー
 * @param promise 実行するPromise
 * @param timeoutMs タイムアウト時間(ミリ秒)
 * @returns タイムアウト付きのPromise
 */
export function withTimeout<T>(promise: Promise<T>, timeoutMs: number): Promise<T> {
  return new Promise((resolve, reject) => {
    const timeoutId = setTimeout(() => {
      reject(new Error(`タイムアウト: ${timeoutMs / 1000}秒以内に処理が完了しませんでした`));
    }, timeoutMs);

    promise
      .then((result) => {
        clearTimeout(timeoutId);
        resolve(result);
      })
      .catch((error) => {
        clearTimeout(timeoutId);
        reject(error);
      });
  });
}