Spaces:
Sleeping
Sleeping
| 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); | |
| }); | |
| }); | |
| } | |